From patchwork Thu Mar 17 06:35:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xiang, Haihao" X-Patchwork-Id: 34803 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:3486:0:0:0:0 with SMTP id ek6csp640574nkb; Wed, 16 Mar 2022 23:36:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxnV4pf0Etot/V1s9kCG/xCpnjQSYN8/yVlunsL+FAA8rqV5Gy88sgg2tOhlJJbyihk9a6Z X-Received: by 2002:a05:6402:187:b0:415:c784:abe0 with SMTP id r7-20020a056402018700b00415c784abe0mr2856317edv.168.1647498971400; Wed, 16 Mar 2022 23:36:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1647498971; cv=none; d=google.com; s=arc-20160816; b=W+ai2PtyZRDqBaorbz7WKJWBAdBwY5ikCFuRu9H/gZfGOmJzNysmWMV26M2gmvH8ZE uMOeLe68hjPIwysSWqs1PjjXnW2yQY8i0ZP+Sh/ReXFSbG4XNkB8UfXnXK70nH8SI/9B TlD0I+Az90FrTRWpAVpZiEnJkKF18pU7XyrPultppO8+YlezciN4PpdhRqc32XPU5nNG rHLL3prJyipgcT8G2NOkmRL8JmpOrJqJ2zzeJm4XiJBdQ1yKBzl4i6GVIAU30cfcn7w3 8Iqo84b/wb8hfPpJQK0Y10lnRURGGEJx6Bc7zL+ozqxSRu+rgwH52fZ1eRjJSWJVBuQ9 l/Sg== 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:dkim-signature :delivered-to; bh=cPQs6BieQiFw4j9e1n0am/i9Xy78hlZnKBVgVH9fW8A=; b=RFeXpwRWG/sAWG7w3yA+zQTND+2pmYxC34NkzYI3F1XFKyyA4Oj75xXXL/JEeBnyEn +JcWfSecaWaihiqXNESMZAeIGsRgWXNSYub+b8YjZB/TeLPNJqcRSRD/zToHGPPnMTeI /xovVAHgOC7kTXAt375IZ7JaMUB4J40miee9hH8cOPMBNvubYTjl8zW/BUBAK7afHCZR cDZHC8vo1EoFDRJaSf5Np+Ir3c4azkZ/onEC7kSOtuaGOV+Ce52G9JF3bhvI5YlIWgA4 zQyCk9Kh13GljvGcgMQDByfFL7i7aOmV4Iycxr1VdvoLe31f+MYmV2XevlFpBANr/sy1 Y+IA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@intel.com header.s=Intel header.b="M1uqTJ/9"; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id y17-20020a1709063a9100b006a77ac0f260si2379239ejd.873.2022.03.16.23.36.10; Wed, 16 Mar 2022 23:36:11 -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=@intel.com header.s=Intel header.b="M1uqTJ/9"; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 72154689E10; Thu, 17 Mar 2022 08:36:06 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8EC53689E10 for ; Thu, 17 Mar 2022 08:35:59 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1647498964; x=1679034964; h=from:to:cc:subject:date:message-id; bh=SFbvSecbmH49u6mEBOlRb7QoWRD1ZHQ3DGB6i9DEk5I=; b=M1uqTJ/95pewu7BOhyS/jqrxGEENLmeLBi347LkxIPyMRprAlI4Rmcaz 8Ia2CYHZCrh+BVgsBB+MbW989VyzYcLHKp2A8Cs+gX/7u8uQdFRlXP9q4 T/Ggsa1NXGF3yLE5bQOFjfC5XodUoA//mWBBUUuJcobAMZkxQWctOKh7t 5a9pjvZXCY/GJjDgCa3V/mC9zsow/edu1hoJ12IlkRRYRcGgnkhhRG7Tb +Q20+yOjJ6sLvvz9E/r6kI8YAY5kMq599eD3nSvsVH7vYC78lZwurZF+d dACWJXTLFRfriYs9OazM1gmYRTdIVjgPvv49GK8EzQ1Tm58KUROdM1pSu A==; X-IronPort-AV: E=McAfee;i="6200,9189,10288"; a="255626315" X-IronPort-AV: E=Sophos;i="5.90,188,1643702400"; d="scan'208";a="255626315" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Mar 2022 23:35:57 -0700 X-IronPort-AV: E=Sophos;i="5.90,188,1643702400"; d="scan'208";a="690847544" Received: from xhh-dg164.sh.intel.com ([10.239.159.54]) by fmsmga001-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Mar 2022 23:35:56 -0700 From: "Xiang, Haihao" To: ffmpeg-devel@ffmpeg.org Date: Thu, 17 Mar 2022 14:35:46 +0800 Message-Id: <20220317063546.7429-1-haihao.xiang@intel.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH] libavcodec/hevc_mp4toannexb_bsf: insert extradata before non-AUD unit 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: t4+w1tszEmX9 From: Haihao Xiang It is possible that an IRAP frame in input AVPacket contains VPS, SPS and PPS, and these headers should take effect. However the prepended extradata might override these headers. This patch inserts extradata before non-AUD unit, hence VPS, SPS and PPS from the input AVPacket will take effect if they are present. This should fix #7799 Signed-off-by: Haihao Xiang --- libavcodec/hevc_mp4toannexb_bsf.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/libavcodec/hevc_mp4toannexb_bsf.c b/libavcodec/hevc_mp4toannexb_bsf.c index 790dfb0394..77551ba221 100644 --- a/libavcodec/hevc_mp4toannexb_bsf.c +++ b/libavcodec/hevc_mp4toannexb_bsf.c @@ -124,6 +124,7 @@ static int hevc_mp4toannexb_filter(AVBSFContext *ctx, AVPacket *out) int got_irap = 0; int i, ret = 0; + int prev_nalu_is_aud = 0, extradata_offset = 0; ret = ff_bsf_get_packet(ctx, &in); if (ret < 0) @@ -169,14 +170,21 @@ static int hevc_mp4toannexb_filter(AVBSFContext *ctx, AVPacket *out) prev_size = out->size; + if (prev_nalu_is_aud) + extradata_offset = prev_size; + ret = av_grow_packet(out, 4 + nalu_size + extra_size); if (ret < 0) goto fail; - if (extra_size) - memcpy(out->data + prev_size, ctx->par_out->extradata, extra_size); + if (extra_size) { + memmove(out->data + extradata_offset + extra_size, out->data + extradata_offset, prev_size - extradata_offset); + memcpy(out->data + extradata_offset, ctx->par_out->extradata, extra_size); + } + AV_WB32(out->data + prev_size + extra_size, 1); bytestream2_get_buffer(&gb, out->data + prev_size + 4 + extra_size, nalu_size); + prev_nalu_is_aud = nalu_type == HEVC_NAL_AUD; } ret = av_packet_copy_props(out, in);