From patchwork Sat Dec 4 07:45:07 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linjie Fu X-Patchwork-Id: 31956 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp1729171iog; Fri, 3 Dec 2021 23:45:28 -0800 (PST) X-Google-Smtp-Source: ABdhPJzPxqDDiR+EnWmafzEn5OSEk0m+ho+wUApDAwGiUu35WQlo1nXCOALW3M95wKLQEhmwDkLf X-Received: by 2002:a17:906:3745:: with SMTP id e5mr29421461ejc.400.1638603928342; Fri, 03 Dec 2021 23:45:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1638603928; cv=none; d=google.com; s=arc-20160816; b=zVRNXCIsVAR8+lnv59Yc9NJ9dmFadm4DMbf9eYVJsnMElXpBxadrPwe2HHKqFiQ0P+ SWqc13cvkL90Y+YfpuLdIMfUhheYx+PzZj+iG/Nuz+3d5VNZchY+SsNwBlrY2KT+wESf iEQoqUb9bMEE7A46sWz2gFRDNmbI97wHFLCatDeWc4TgYoi44nPoeAGyCPBw694agftZ ia2gleaYPACsObq6MQgajOSbnUB9I2qOv+/YmI+UnUCVIWnYUtJh8bu90XY8mGjyiX6f LD3LPF2HVQHO3+0DVa5isYkExnUolDTJhPxPhjW7gPleT1ZVneLs7HCAOu3byVV6q6Dj nJzg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:message-id:date:to:from :delivered-to; bh=xCwjFNv9/mkUDqaUHHKK7Z1vIXKPGfD26jklVu54zww=; b=g/FbrEYga0a/qchmybPHw4COisiFEoB/XaiAegC+3zwVjiBWZ76yneJS3GWq6SCH30 Du3FpNV56gpiuPjamWKylyXAkfdMsea/ZJaENy/kq3w71pbRFdwdGgiiuvYJi6bEPkoc yaQGKzzwGzhw9L6+gSZiNH+bqD9VnuEMqsZItf5Li2gmG/HQKX0jKBAMThrl/HV+dS6H ycGHeXcegCmw2yDyu589o3FVa8Lk3fWMTMZEbBf5yG0xewzCS2WmBrCB+BTfz5MUAzPM 6b8+MUGJieGfkCGye02Bli0BahRmwRPDfloJUYpA9MwdTj3Q3Wfo5ngRr+MsURr+ods8 FCvA== 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id r13si9072729edd.112.2021.12.03.23.45.27; Fri, 03 Dec 2021 23:45:28 -0800 (PST) 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B1CEC68A3DF; Sat, 4 Dec 2021 09:45:21 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from zg8tmty1ljiyny4xntqumjca.icoremail.net (zg8tmty1ljiyny4xntqumjca.icoremail.net [165.227.154.27]) by ffbox0-bg.mplayerhq.hu (Postfix) with SMTP id 3114B68A3DF for ; Sat, 4 Dec 2021 09:45:14 +0200 (EET) Received: from localhost.localdomain (unknown [223.167.246.70]) by mail-app2 (Coremail) with SMTP id by_KCgC3tFCtH6thV28AAA--.2920S2; Sat, 04 Dec 2021 15:58:37 +0800 (CST) From: Linjie Fu To: ffmpeg-devel@ffmpeg.org Date: Sat, 4 Dec 2021 15:45:07 +0800 Message-Id: <20211204074507.99950-1-fulinjie@zju.edu.cn> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 X-CM-TRANSID: by_KCgC3tFCtH6thV28AAA--.2920S2 X-Coremail-Antispam: 1UD129KBjvJXoW7Zw15JFy7KF1rWFWDKryrCrg_yoW8Zw1xpF y7Cr1agr17Jr1xCrn5Jw13X3Z3GrW8WFy2kas7WF1qkr1xtr48XFyUtrWFgFy09rykt3sI yw4DAF4UCwsFg3DanT9S1TB71UUUUU7qnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUkjb7Iv0xC_Cr1lb4IE77IF4wAFF20E14v26r1j6r4UM7CY07I2 0VC2zVCF04k26cxKx2IYs7xG6rWj6s0DM7CIcVAFz4kK6r1j6r18M28lY4IEw2IIxxk0rw A2F7IY1VAKz4vEj48ve4kI8wA2z4x0Y4vE2Ix0cI8IcVAFwI0_tr0E3s1l84ACjcxK6xII jxv20xvEc7CjxVAFwI0_GcCE3s1l84ACjcxK6I8E87Iv67AKxVW0oVCq3wA2z4x0Y4vEx4 A2jsIEc7CjxVAFwI0_GcCE3s1le2I262IYc4CY6c8Ij28IcVAaY2xG8wAqx4xG64xvF2IE w4CE5I8CrVC2j2WlYx0E2Ix0cI8IcVAFwI0_Jrv_JF1lYx0Ex4A2jsIE14v26r1j6r4UMc vjeVCFs4IE7xkEbVWUJVW8JwACjcxG0xvY0x0EwIxGrwCY02Avz4vE14v_GF4l42xK82IY c2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG67AKxVWUJVWUGwC20s 026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE14v26r1Y6r17MIIYrxkI7VAKI48JMIIF 0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I0E14v26r1j6r4UMIIF0x vE42xK8VAvwI8IcIk0rVWUJVWUCwCI42IY6I8E87Iv67AKxVWUJVW8JwCI42IY6I8E87Iv 6xkF7I0E14v26r1j6r4UYxBIdaVFxhVjvjDU0xZFpf9x07j5Z2-UUUUU= X-CM-SenderInfo: ysrvjiarsuq6lmxovvfxof0/ Subject: [FFmpeg-devel] [PATCH] libavcodec/hevc_mp4toannexb_bsf: update the extradata in codec par if change detected 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: Linjie Fu Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: rqQVRzAmz3/h From: Linjie Fu Container may support multiple sample descriptions in a single bitstream, like multiple stsd in mov, which introduces different sequence header(e.g.profile/bit_depth) in the middle of the bitstream. Update the extradata field in context parameter once packet with different extradata is got. Signed-off-by: Linjie Fu --- libavcodec/hevc_mp4toannexb_bsf.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/libavcodec/hevc_mp4toannexb_bsf.c b/libavcodec/hevc_mp4toannexb_bsf.c index 790dfb0394..36a83d0c95 100644 --- a/libavcodec/hevc_mp4toannexb_bsf.c +++ b/libavcodec/hevc_mp4toannexb_bsf.c @@ -125,6 +125,9 @@ static int hevc_mp4toannexb_filter(AVBSFContext *ctx, AVPacket *out) int got_irap = 0; int i, ret = 0; + uint8_t *extradata; + size_t extradata_size = 0; + ret = ff_bsf_get_packet(ctx, &in); if (ret < 0) return ret; @@ -135,6 +138,26 @@ static int hevc_mp4toannexb_filter(AVBSFContext *ctx, AVPacket *out) return 0; } + extradata = av_packet_get_side_data(in, AV_PKT_DATA_NEW_EXTRADATA, &extradata_size); + if (extradata && extradata_size && + (ctx->par_in->extradata_size != extradata_size || + memcmp(ctx->par_in->extradata, extradata, extradata_size))) { + av_log(ctx, AV_LOG_VERBOSE, "Update extradata, size = %zu\n", extradata_size); + /* Update extradata */ + av_freep(&ctx->par_in->extradata); + ctx->par_in->extradata_size = extradata_size; + ctx->par_in->extradata = av_mallocz(extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); + if (!ctx->par_in->extradata) + return AVERROR(ENOMEM); + memcpy(ctx->par_in->extradata, extradata, extradata_size); + /* Reinit */ + ret = hevc_extradata_to_annexb(ctx); + if (ret < 0) + return ret; + s->length_size = ret; + s->extradata_parsed = 1; + } + bytestream2_init(&gb, in->data, in->size); while (bytestream2_get_bytes_left(&gb)) {