From patchwork Mon Jul 12 19:32:59 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 28913 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:bbc9:0:0:0:0:0 with SMTP id c9csp3176853ybk; Mon, 12 Jul 2021 12:33:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw6iloDO/AfYJXxpHd6xjY/b9koBOmHiAnRhwjg6tgKt5VoZecZGnI5a3GjME0hDyLkQWfJ X-Received: by 2002:a17:906:814f:: with SMTP id z15mr769920ejw.178.1626118423237; Mon, 12 Jul 2021 12:33:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626118423; cv=none; d=google.com; s=arc-20160816; b=igi19LqYxAlbSAPhbbsBwhZ0VkBIvXjrPHaBYZoY5S78CgRFuKADkJKLviM5l+3i7s xvd5v1o/7PiFShnVqN6ec2GLaZwqaXil+D6sRu9TVprBvycptIHj7eDGkKYPSczSvKCs c5GmDhO/19xlCiyXkf7ILNerZLzJDiB5VDkM3Y0i9Ny5zO/Pe46jh3ZioGxaacRzn0sf UM8BKY8pBQlQs2q4bJh5oATUZm5vGJxrCZkHWDkqzbk4NzmKGE28VxyQOzwNPX2wowUp vFwrzKNzov4XOU89DjMA2YvPH6LJy7Vzir1vJ4NsmZo79neXvQ7qrGclQuR714wXmpAS AyeA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:message-id:date:to:from :dkim-signature:delivered-to; bh=0MkyxlopEUYGRv1tLJOUd3sJ8iM36g++lTKZvu0df4s=; b=ePTg8BMUcEhuLNONu9IlfryzCtqe8D49746PkH6V6auhao4n++cX/8EguHbhI5mUE2 4SmsvZpWAnihW1HIWS6Wzaz+ZMoAc3wPWUjkfToY6cr678vL9LwKsb5B3GGg0BMDrq9+ 2Dv2awbG+4DHUEYzExo8kzvPCTdR0CISqzN+wjCYMbDHTc9He5LDqM+1tIyN5ob1RuOC R7YhuijG9lp/mV/kj5LiBjTOlReL8FVvAz8r8CpW+Cx6W00ppaoPg3kh06MwE0K7maeu AWkhq/ScQLnNs/kcTLqqIDrFT/meUxmzbX+E+R0rFyuruE5uH5bhlTo2z8C9XvJdFLN0 UV1g== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=ObccZhUV; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id eb9si18895198ejc.250.2021.07.12.12.33.42; Mon, 12 Jul 2021 12:33:43 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=ObccZhUV; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 12D1C68A0D3; Mon, 12 Jul 2021 22:33:39 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pf1-f177.google.com (mail-pf1-f177.google.com [209.85.210.177]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E075C68A60B for ; Mon, 12 Jul 2021 22:33:31 +0300 (EEST) Received: by mail-pf1-f177.google.com with SMTP id j9so11704749pfc.5 for ; Mon, 12 Jul 2021 12:33:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=e6fzrVuyZc7qBUZj7nZ1eekx6GzDyIvfSqXQmPaT1Xk=; b=ObccZhUVv+mMs/KdIAjRZAVjylW3PlfPJ4MUno0EQifMy3U7jKwQUQDYl+7dfD5oJG fpFSzuZ1N8ib+vRGCR4YOczPyH2zgm+Oq0M/nm63+ydFKXkM/ULuX5cGPhlPkWBf1/i6 u5wcvsNcEl256y3opFWrSTj6bnCJVAF5QwqXvu3SSfUyLu+4BnEOkJAiYqV5fgUpulXJ nJ1b//w6CyrtrdVWBfw6BNITFUg940SK51BNKQmNoX9Py1In7zPcjSPMFXm1c2deE5HK XTB9vZMmsjAKyJsPHcq2xzC5fa8CE56PuIiv5v4ORxt0RmEQYum+B0+s40egQtpIPsTm VVlg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=e6fzrVuyZc7qBUZj7nZ1eekx6GzDyIvfSqXQmPaT1Xk=; b=imJT5CXzny/bPemmK+A6UyOUURzmlbT/WjUQdSBgqrrQlWhR1I4fRbbMj9YOxt5dx8 gBuC3TIScag+66+oownTnd4jcgFXW/kCf8slQV7y69/5MpXnKVY5HxsL4QzBto6x0mFf vmsTJJqZwlg4bDP/o4Ot6Bk9zJlY+ngK+3dFVk+GTGhr8HKWlqF+XukKDFsMUTZdhVMy Dskc4qINwbRB8HMObShqtVRu1ngrRbx9LOViyPhCcaqW+MR435k3KvVf5+d6gEvmVQZz wC6/ymkbBsGs1JZSdMMcdBAsEZtWC/CQAGn+l+N+DDtntMcx5YqHxC475Kxp2E7pgQzn Pjlg== X-Gm-Message-State: AOAM532engpykRKDxZvJl5T1d83jdHDbLnsBhUXNHvooaTHU8CNbALNC t0/kyIqkSBMF37gFOyn/8PZPGDSlXmI= X-Received: by 2002:a62:78cd:0:b029:327:de34:ad60 with SMTP id t196-20020a6278cd0000b0290327de34ad60mr828593pfc.18.1626118409630; Mon, 12 Jul 2021 12:33:29 -0700 (PDT) Received: from localhost.localdomain ([191.83.217.217]) by smtp.gmail.com with ESMTPSA id a22sm9353918pfv.113.2021.07.12.12.33.28 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Jul 2021 12:33:29 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Mon, 12 Jul 2021 16:32:59 -0300 Message-Id: <20210712193259.17346-1-jamrial@gmail.com> X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/h264_parser: remove key frame tagging heuristics X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: TQoDgxOMj/3s Content-Length: 12204 None of these packets contain keyframes, and tagging them as such can result in non spec compliant output when remuxing into containers like mp4 and Matroska, where bogus samples would be marked as Sync Samples. Some tests are updated to reflect this. Suggested-by: ffmpeg@fb.com Signed-off-by: James Almer --- libavcodec/h264_parser.c | 8 -------- tests/fate-run.sh | 4 ++-- tests/fate/ffmpeg.mak | 2 +- tests/fate/lavf-container.mak | 12 ++++++------ tests/fate/matroska.mak | 2 +- tests/ref/fate/copy-trac2211-avi | 2 +- tests/ref/fate/matroska-h264-remux | 4 ++-- tests/ref/fate/segment-mp4-to-ts | 10 +++++----- tests/ref/lavf-fate/h264.mp4 | 4 ++-- 9 files changed, 20 insertions(+), 28 deletions(-) diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c index d3c56cc188..e78c3679fb 100644 --- a/libavcodec/h264_parser.c +++ b/libavcodec/h264_parser.c @@ -344,10 +344,6 @@ static inline int parse_nal_units(AVCodecParserContext *s, get_ue_golomb_long(&nal.gb); // skip first_mb_in_slice slice_type = get_ue_golomb_31(&nal.gb); s->pict_type = ff_h264_golomb_to_pict_type[slice_type % 5]; - if (p->sei.recovery_point.recovery_frame_cnt >= 0) { - /* key frame, since recovery_frame_cnt is set */ - s->key_frame = 1; - } pps_id = get_ue_golomb(&nal.gb); if (pps_id >= MAX_PPS_COUNT) { av_log(avctx, AV_LOG_ERROR, @@ -370,10 +366,6 @@ static inline int parse_nal_units(AVCodecParserContext *s, p->ps.sps = p->ps.pps->sps; sps = p->ps.sps; - // heuristic to detect non marked keyframes - if (p->ps.sps->ref_frame_count <= 1 && p->ps.pps->ref_count[0] <= 1 && s->pict_type == AV_PICTURE_TYPE_I) - s->key_frame = 1; - p->poc.frame_num = get_bits(&nal.gb, sps->log2_max_frame_num); s->coded_width = 16 * sps->mb_width; diff --git a/tests/fate-run.sh b/tests/fate-run.sh index ba437dfbb8..2117ca387e 100755 --- a/tests/fate-run.sh +++ b/tests/fate-run.sh @@ -339,8 +339,8 @@ lavf_container_fate() outdir="tests/data/lavf-fate" file=${outdir}/lavf.$t input="${target_samples}/$1" - do_avconv $file -auto_conversion_filters $DEC_OPTS $2 -i "$input" "$ENC_OPTS -metadata title=lavftest" -vcodec copy -acodec copy - do_avconv_crc $file -auto_conversion_filters $DEC_OPTS -i $target_path/$file $3 + do_avconv $file -auto_conversion_filters $DEC_OPTS $2 -i "$input" "$ENC_OPTS -metadata title=lavftest" -vcodec copy -acodec copy %3 + do_avconv_crc $file -auto_conversion_filters $DEC_OPTS -i $target_path/$file $4 } lavf_image(){ diff --git a/tests/fate/ffmpeg.mak b/tests/fate/ffmpeg.mak index 4dfb77d250..57d16fba6f 100644 --- a/tests/fate/ffmpeg.mak +++ b/tests/fate/ffmpeg.mak @@ -110,7 +110,7 @@ fate-copy-trac4914-avi: CMD = transcode mpegts $(TARGET_SAMPLES)/mpeg2/xdcam8mp2 FATE_STREAMCOPY-$(call ALLYES, H264_DEMUXER AVI_MUXER) += fate-copy-trac2211-avi fate-copy-trac2211-avi: $(SAMPLES)/h264/bbc2.sample.h264 fate-copy-trac2211-avi: CMD = transcode "h264 -r 14" $(TARGET_SAMPLES)/h264/bbc2.sample.h264\ - avi "-c:a copy -c:v copy" + avi "-c:a copy -c:v copy -copyinkf" FATE_STREAMCOPY-$(call ENCDEC, APNG, APNG) += fate-copy-apng fate-copy-apng: fate-lavf-apng diff --git a/tests/fate/lavf-container.mak b/tests/fate/lavf-container.mak index 9e0eed4851..40250badc1 100644 --- a/tests/fate/lavf-container.mak +++ b/tests/fate/lavf-container.mak @@ -71,13 +71,13 @@ FATE_LAVF_CONTAINER_FATE = $(FATE_LAVF_CONTAINER_FATE-yes:%=fate-lavf-fate-%) $(FATE_LAVF_CONTAINER_FATE): REF = $(SRC_PATH)/tests/ref/lavf-fate/$(@:fate-lavf-fate-%=%) $(FATE_LAVF_CONTAINER_FATE): $(AREF) $(VREF) -fate-lavf-fate-av1.mp4: CMD = lavf_container_fate "av1-test-vectors/av1-1-b8-05-mv.ivf" "" "-c:v copy" -fate-lavf-fate-av1.mkv: CMD = lavf_container_fate "av1-test-vectors/av1-1-b8-05-mv.ivf" "" "-c:v copy" -fate-lavf-fate-h264.mp4: CMD = lavf_container_fate "h264/intra_refresh.h264" "" "-c:v copy" +fate-lavf-fate-av1.mp4: CMD = lavf_container_fate "av1-test-vectors/av1-1-b8-05-mv.ivf" "" "" "-c:v copy" +fate-lavf-fate-av1.mkv: CMD = lavf_container_fate "av1-test-vectors/av1-1-b8-05-mv.ivf" "" "" "-c:v copy" +fate-lavf-fate-h264.mp4: CMD = lavf_container_fate "h264/intra_refresh.h264" "" "-copyinkf" "-c:v copy -copyinkf" fate-lavf-fate-vp3.ogg: CMD = lavf_container_fate "vp3/coeff_level64.mkv" "-idct auto" -fate-lavf-fate-vp8.ogg: CMD = lavf_container_fate "vp8/RRSF49-short.webm" "" "-acodec copy" -fate-lavf-fate-latm: CMD = lavf_container_fate "aac/al04_44.mp4" "" "-acodec copy" -fate-lavf-fate-mp3: CMD = lavf_container_fate "mp3-conformance/he_32khz.bit" "" "-acodec copy" +fate-lavf-fate-vp8.ogg: CMD = lavf_container_fate "vp8/RRSF49-short.webm" "" "" "-acodec copy" +fate-lavf-fate-latm: CMD = lavf_container_fate "aac/al04_44.mp4" "" "" "-acodec copy" +fate-lavf-fate-mp3: CMD = lavf_container_fate "mp3-conformance/he_32khz.bit" "" "" "-acodec copy" fate-lavf-fate-qtrle_mace6.mov: CMD = lavf_container_fate "qtrle/Animation-16Greys.mov" "-idct auto" fate-lavf-fate-cram.avi: CMD = lavf_container_fate "cram/toon.avi" "-idct auto" diff --git a/tests/fate/matroska.mak b/tests/fate/matroska.mak index ca7193a055..545a0d1d50 100644 --- a/tests/fate/matroska.mak +++ b/tests/fate/matroska.mak @@ -105,7 +105,7 @@ FATE_MATROSKA_FFMPEG_FFPROBE-$(call ALLYES, FILE_PROTOCOL MPEGTS_DEMUXER \ MATROSKA_DEMUXER H264_DECODER \ FRAMECRC_MUXER PIPE_PROTOCOL) \ += fate-matroska-h264-remux -fate-matroska-h264-remux: CMD = transcode mpegts $(TARGET_SAMPLES)/h264/h264_intra_first-small.ts matroska "-map 0:0 -map 0 -c:v copy -sar:0 3:4 -bsf:v:1 h264_metadata=aud=remove:delete_filler=1 -disposition:v +hearing_impaired -af aresample -c:a:0 pcm_s32le -c:a:1 pcm_s32be -disposition:a:0 original -metadata:s:a:0 title=swedish_silence -metadata:s:a:1 title=norwegian_silence -disposition:a:1 dub" "-map 0:v" "" "-show_entries stream=index,codec_name:stream_tags=title,language" +fate-matroska-h264-remux: CMD = transcode mpegts $(TARGET_SAMPLES)/h264/h264_intra_first-small.ts matroska "-map 0:0 -map 0 -c:v copy -copyinkf -sar:0 3:4 -bsf:v:1 h264_metadata=aud=remove:delete_filler=1 -disposition:v +hearing_impaired -af aresample -c:a:0 pcm_s32le -c:a:1 pcm_s32be -disposition:a:0 original -metadata:s:a:0 title=swedish_silence -metadata:s:a:1 title=norwegian_silence -disposition:a:1 dub" "-map 0:v" "" "-show_entries stream=index,codec_name:stream_tags=title,language" # Tests writing BlockAdditional and BlockGroups with ReferenceBlock elements; # it also tests setting a track as suitable for hearing impaired. diff --git a/tests/ref/fate/copy-trac2211-avi b/tests/ref/fate/copy-trac2211-avi index 06d81e537d..1f71ae65f2 100644 --- a/tests/ref/fate/copy-trac2211-avi +++ b/tests/ref/fate/copy-trac2211-avi @@ -1,4 +1,4 @@ -0920978f3f8196413c43f0033b55a5b6 *tests/data/fate/copy-trac2211-avi.avi +ee1e66eac40569ae3cf9552286900900 *tests/data/fate/copy-trac2211-avi.avi 1777956 tests/data/fate/copy-trac2211-avi.avi #tb 0: 1/14 #media_type 0: video diff --git a/tests/ref/fate/matroska-h264-remux b/tests/ref/fate/matroska-h264-remux index 14e6758fa0..7b852f8266 100644 --- a/tests/ref/fate/matroska-h264-remux +++ b/tests/ref/fate/matroska-h264-remux @@ -1,5 +1,5 @@ -ded6da7e46ce7df1232b116afb0b2f0a *tests/data/fate/matroska-h264-remux.matroska -2036083 tests/data/fate/matroska-h264-remux.matroska +d5fc08094380fc8aba485c09b596ceee *tests/data/fate/matroska-h264-remux.matroska +2371935 tests/data/fate/matroska-h264-remux.matroska #tb 0: 1/25 #media_type 0: video #codec_id 0: rawvideo diff --git a/tests/ref/fate/segment-mp4-to-ts b/tests/ref/fate/segment-mp4-to-ts index 8b0746fa92..5c456cd0bc 100644 --- a/tests/ref/fate/segment-mp4-to-ts +++ b/tests/ref/fate/segment-mp4-to-ts @@ -25,7 +25,7 @@ 0, 57600, 64800, 3600, 1182, 0xbe1a4847, F=0x0, S=1, 1 0, 61200, 61200, 3600, 809, 0x8d948a4e, F=0x0, S=1, 1 0, 64800, 68400, 3600, 656, 0x4fa03c2b, F=0x0, S=1, 1 -0, 68400, 86400, 3600, 26555, 0x5629b584, S=1, 1 +0, 68400, 86400, 3600, 26555, 0x5629b584, F=0x0, S=1, 1 0, 72000, 79200, 3600, 1141, 0x761b31e8, F=0x0, S=1, 1 0, 75600, 75600, 3600, 717, 0x57746351, F=0x0, S=1, 1 0, 79200, 82800, 3600, 693, 0x78b24263, F=0x0, S=1, 1 @@ -49,7 +49,7 @@ 0, 144000, 151200, 3600, 1271, 0x46006870, F=0x0, S=1, 1 0, 147600, 147600, 3600, 849, 0x94dc99c7, F=0x0, S=1, 1 0, 151200, 154800, 3600, 753, 0xf4236cab, F=0x0, S=1, 1 -0, 154800, 172800, 3600, 25825, 0xd5464dee, S=1, 1 +0, 154800, 172800, 3600, 25825, 0xd5464dee, F=0x0, S=1, 1 0, 158400, 165600, 3600, 1206, 0x8ce84344, F=0x0, S=1, 1 0, 162000, 162000, 3600, 867, 0x312fa07d, F=0x0, S=1, 1 0, 165600, 169200, 3600, 719, 0x810666d1, F=0x0, S=1, 1 @@ -73,7 +73,7 @@ 0, 230400, 237600, 3600, 1545, 0x0099fc98, F=0x0, S=1, 1 0, 234000, 234000, 3600, 929, 0xfd72d049, F=0x0, S=1, 1 0, 237600, 241200, 3600, 829, 0xcfda9e96, F=0x0, S=1, 1 -0, 241200, 259200, 3600, 24220, 0x5ca21d71, S=1, 1 +0, 241200, 259200, 3600, 24220, 0x5ca21d71, F=0x0, S=1, 1 0, 244800, 252000, 3600, 1422, 0xcde6cc34, F=0x0, S=1, 1 0, 248400, 248400, 3600, 883, 0xedacbe25, F=0x0, S=1, 1 0, 252000, 255600, 3600, 768, 0x89d774bc, F=0x0, S=1, 1 @@ -97,7 +97,7 @@ 0, 316800, 324000, 3600, 1501, 0xb3b8f001, F=0x0, S=1, 1 0, 320400, 320400, 3600, 941, 0x92b0cb18, F=0x0, S=1, 1 0, 324000, 327600, 3600, 823, 0x3d548355, F=0x0, S=1, 1 -0, 327600, 345600, 3600, 24042, 0x441e94fb, S=1, 1 +0, 327600, 345600, 3600, 24042, 0x441e94fb, F=0x0, S=1, 1 0, 331200, 338400, 3600, 1582, 0x4f5d1049, F=0x0, S=1, 1 0, 334800, 334800, 3600, 945, 0x4f3cc9e8, F=0x0, S=1, 1 0, 338400, 342000, 3600, 815, 0x0ca790a4, F=0x0, S=1, 1 @@ -121,7 +121,7 @@ 0, 403200, 410400, 3600, 359, 0x11bdae52, F=0x0, S=1, 1 0, 406800, 406800, 3600, 235, 0xbec26964, F=0x0, S=1, 1 0, 410400, 414000, 3600, 221, 0x8380682c, F=0x0, S=1, 1 -0, 414000, 432000, 3600, 22588, 0xf0ecf072, S=1, 1 +0, 414000, 432000, 3600, 22588, 0xf0ecf072, F=0x0, S=1, 1 0, 417600, 424800, 3600, 383, 0x4f3bb571, F=0x0, S=1, 1 0, 421200, 421200, 3600, 257, 0x22e87802, F=0x0, S=1, 1 0, 424800, 428400, 3600, 261, 0xdb988134, F=0x0, S=1, 1 diff --git a/tests/ref/lavf-fate/h264.mp4 b/tests/ref/lavf-fate/h264.mp4 index a9c3823c2c..54d8c407d2 100644 --- a/tests/ref/lavf-fate/h264.mp4 +++ b/tests/ref/lavf-fate/h264.mp4 @@ -1,3 +1,3 @@ -fe299ea5205b71a48281f917b1256a5d *tests/data/lavf-fate/lavf.h264.mp4 -547928 tests/data/lavf-fate/lavf.h264.mp4 +badb54efedaf0c7f725158b85339a8f4 *tests/data/lavf-fate/lavf.h264.mp4 +548177 tests/data/lavf-fate/lavf.h264.mp4 tests/data/lavf-fate/lavf.h264.mp4 CRC=0x9da2c999