From patchwork Fri Sep 10 04:09:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 30103 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6602:2a4a:0:0:0:0 with SMTP id k10csp1152681iov; Thu, 9 Sep 2021 21:10:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwBmjMEIGSoFk8uf2WGDSMUmB+74/rL/k4cWEVBXTdyrAZ65OwLdpd3ibyKN3JQknthiPX6 X-Received: by 2002:a50:fe8b:: with SMTP id d11mr6693402edt.330.1631247022043; Thu, 09 Sep 2021 21:10:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631247022; cv=none; d=google.com; s=arc-20160816; b=cLmpbMy5E218uX3aMB/V3/L61ZbFOB+xVrQE5J0SKrXMCcBQ+L17yMQdHk58opQ3v8 xVPlLa3na0d3Tr0PQQHfXj62FXfXLWKcNsjnhgIbzflvfDkOFR8yjSS53UunbAL7ncSO HIBb9090GRnu21oTlCa8G00LHwEDtUTZ7mTLN26r4WtsR1wDEFC2WXZcrz2emZAb43Oa 4LhmGe7aJcf2qauILAH9GIiGZT+tnLr7mJXZNl1Xf4tibA0qmm25McPcfa72p936FAOb 7vskgJINl+/NJ8o4Ln8O8IQRVcahGLXVEYZyf7YuGkWQbGcNDCJaKzH7P6rWgaQeXcEf tN0A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:delivered-to; bh=gOnOPunubF0jP5QAII1sgFz/U7WuawHmORevk/XdXhw=; b=zRGNy5lhe+hb2oEJLGpMnULIaf5l8zpupY/BCg2+wAtGadPaPYNsEBf6+WCeIjXLLP cCiWzpVrXXEAm7KkdaJ39BwkaS8mISjG02aDzx/zMI8S/ViBUTD1vubGlS5vsBQHjbqa Q4D6xihLG7KOuxMVhbF7Z0KRJSKynCqkNS21le5HnWTPu0NCM3Bj31fBvDpuOqJK3YO6 8DNH+fW+jLNhv2LIORYnWvKCmcDowvPhaLDqbOjwvekhawukfKrI1s32X+m58fdMyVN9 JUrA84my2HMLGjyy5W0HFgH1HSMjzw1nRnIeFII/WHCUAiwzBjyBVpu0YSH988NTkQwu mkQA== ARC-Authentication-Results: i=1; mx.google.com; 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=NONE dis=NONE) header.from=intel.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id o2si4604066ejy.80.2021.09.09.21.10.13; Thu, 09 Sep 2021 21:10:22 -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; 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=NONE dis=NONE) header.from=intel.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7B235688081; Fri, 10 Sep 2021 07:10:09 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0F433688081 for ; Fri, 10 Sep 2021 07:10:01 +0300 (EEST) X-IronPort-AV: E=McAfee;i="6200,9189,10102"; a="221020067" X-IronPort-AV: E=Sophos;i="5.85,282,1624345200"; d="scan'208";a="221020067" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2021 21:09:59 -0700 X-IronPort-AV: E=Sophos;i="5.85,282,1624345200"; d="scan'208";a="470385296" Received: from xhh-dg164.sh.intel.com ([10.239.159.167]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2021 21:09:58 -0700 From: Haihao Xiang To: ffmpeg-devel@ffmpeg.org Date: Fri, 10 Sep 2021 12:09:48 +0800 Message-Id: <20210910040948.14186-1-haihao.xiang@intel.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH] libavcodec/hevc_mp4toannexb_bsf: ignore extra data if possible 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 Cc: Haihao Xiang MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: BOy0NI4tg5c9 It is possible that an IRAP frame in input AVPacket has SPS and PPS, and these headers should take effect. Hence we should not prepend extra data to IRAP frame in this case, otherwise an IRAP frame in output AVPacket will have 2 SPS/PPS when extra data also has SPS and PPS, the second SPS/PPS will override the first SPS/PPS and take effect. --- libavcodec/hevc_mp4toannexb_bsf.c | 7 +++++-- tests/fate/hevc.mak | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/libavcodec/hevc_mp4toannexb_bsf.c b/libavcodec/hevc_mp4toannexb_bsf.c index 790dfb0394..3b3732bbd0 100644 --- a/libavcodec/hevc_mp4toannexb_bsf.c +++ b/libavcodec/hevc_mp4toannexb_bsf.c @@ -121,7 +121,7 @@ static int hevc_mp4toannexb_filter(AVBSFContext *ctx, AVPacket *out) HEVCBSFContext *s = ctx->priv_data; AVPacket *in; GetByteContext gb; - + int has_sps = 0, has_pps = 0; int got_irap = 0; int i, ret = 0; @@ -155,10 +155,13 @@ static int hevc_mp4toannexb_filter(AVBSFContext *ctx, AVPacket *out) } nalu_type = (bytestream2_peek_byte(&gb) >> 1) & 0x3f; + has_sps = (has_sps || nalu_type == HEVC_NAL_SPS); + has_pps = (has_pps || nalu_type == HEVC_NAL_PPS); /* prepend extradata to IRAP frames */ is_irap = nalu_type >= 16 && nalu_type <= 23; - add_extradata = is_irap && !got_irap; + /* ignore the extradata if IRAP frame has sps and pps */ + add_extradata = is_irap && !got_irap && !(has_sps && has_pps); extra_size = add_extradata * ctx->par_out->extradata_size; got_irap |= is_irap; diff --git a/tests/fate/hevc.mak b/tests/fate/hevc.mak index f6ea1df9a5..a4dac99b6a 100644 --- a/tests/fate/hevc.mak +++ b/tests/fate/hevc.mak @@ -251,7 +251,7 @@ FATE_HEVC-$(call ALLYES, HEVC_DEMUXER MOV_DEMUXER HEVC_MP4TOANNEXB_BSF MOV_MUXER fate-hevc-bsf-mp4toannexb: tests/data/hevc-mp4.mov fate-hevc-bsf-mp4toannexb: CMD = md5 -i $(TARGET_PATH)/tests/data/hevc-mp4.mov -c:v copy -fflags +bitexact -f hevc fate-hevc-bsf-mp4toannexb: CMP = oneline -fate-hevc-bsf-mp4toannexb: REF = 1873662a3af1848c37e4eb25722c8df9 +fate-hevc-bsf-mp4toannexb: REF = 3c9d998a3aa2b9e0fb1c1f434952bf8b fate-hevc-skiploopfilter: CMD = framemd5 -skip_loop_filter nokey -i $(TARGET_SAMPLES)/hevc-conformance/SAO_D_Samsung_5.bit -sws_flags bitexact FATE_HEVC += fate-hevc-skiploopfilter