From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 72C144DD3F for ; Thu, 24 Apr 2025 17:09:01 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3568F687D0F; Thu, 24 Apr 2025 20:08:57 +0300 (EEST) Received: from out203-205-221-164.mail.qq.com (out203-205-221-164.mail.qq.com [203.205.221.164]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 39A7F680BE2 for ; Thu, 24 Apr 2025 20:08:48 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1745514519; bh=YGb/pCPnfuoERVFgZXiu3U6AOZWWunSLVeo8vesj/jU=; h=From:To:Cc:Subject:Date; b=GWo2G+Cj7K3fvHOnugG/5kQlpr9inwwly4InGwfLr0OmfL48PBs2/OTnrTvCEzxqa 6+tfHS3rXoYXirTmw+7+rLlltvIlAkNdyRitt6ka1OHbelmPz7eIUvpKXrA0uzNt7L 405JWnWVPpAZsct8bxr1xhO/PKW8Q6nsfIKOEpUg= Received: from ZHILIZHAO-MB1.tencent.com ([240e:3b7:3270:16e0:ad54:7b97:b011:4fec]) by newxmesmtplogicsvrszb16-1.qq.com (NewEsmtp) with SMTP id 225AA40A; Fri, 25 Apr 2025 01:08:37 +0800 X-QQ-mid: xmsmtpt1745514517tg57mfpwy Message-ID: X-QQ-XMAILINFO: M9OMccYtVxgDVzmA+HqYJnRPwxsWs9C4EwLY3Fr/n7KD0uG0iYSCWktnn5TkPW F93rLrbq643opOrHKt/Jrlh5cxOPxWmEdJ5j2YWZyyqnhNZMap9TYLxf1ksxPmHbc4EZn9mUANfX mNBzf5qOBMwYw/dN6Zy+reH1IHjSR+vAtKkA+J5MLeH80FA/Vh1XNpe7a3OZZnqz2TXMBfmrenDv daq/clYeeY3XmBoUr1aPZ2tc4SH2CtuynS01Fvx7nFcIZaCkeVdJMT2ip2TYyipT6TfTXYCu+KZu Bs4jZ946JoFPUTyE9xictGUejP8y1tt4ehgN0f85p0rymrF1XYxUjlH4gBt35UUXHCTrmH9SfuIM jefyq/Yd+VrvbRP996LDaccfshq1DSp8w6XaT9aejXqJn362YiuOOgYrFzAdz/UsCf59VwqpBZ7O 4D2otDQ+J4SXtkf3ratDj4dciYOQp6MX5CZwAF2BEgXKyS5WjCpetV6+GVdLWJht2+20bxmHeNQn FOs9oy66cI27uC5uYrSKbjTqAbSjIltFw47gNNAzMY8OClxjZ1NC5sJD9IiYPbYk63r4yMa/Xc24 DQJ8qUuecUB20yaiPV1i8/2pMCJHdR+n9lD+g06XtE4T5ACiGfz/dwSF16GJc3tYihAOL3bumvhW 7GIc1liQGIxeX1BAKhFRZPxegpzCtgjVqMoN3o0Nf1MkwY9WwIAIZ6ZDPDOAQbOG9aOlU2xFv/ca fDS+Oh4APgcmkVOHuctAFsDIrUUQEt7AybDS6lptDcCbV+/aCf/hXqkptnkatjiVKAmb33M2t9YB M5t5tVfGODxho1X/cqiuWT99WhUt8arGe7KdFEYVdZNVF8dwX6Kfx3SzQexOWbt0iHz3vt3F3yYd fSDqCLuOkvGssg1YAxPl4zi3d54n+WGdZELiQ56/5dkiSsH2Ai0unzajTGPsI1r9Rf4hauNApDDC K7rUxwgW1hXqNOJ9/anEv04k/WwsOlFVtYqmuBgmgYiu52Azpnb+ParQ/1d+Jf5M0GVepZoCI= X-QQ-XMRINFO: MSVp+SPm3vtS1Vd6Y4Mggwc= From: Zhao Zhili To: ffmpeg-devel@ffmpeg.org Date: Fri, 25 Apr 2025 01:08:36 +0800 X-OQ-MSGID: <20250424170836.19254-1-quinkblack@foxmail.com> X-Mailer: git-send-email 2.46.0 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avcodec/bsf/h264_mp4toannexb: Fix mixed bitstream format 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: Zhao Zhili , jiangjie Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: From: Zhao Zhili This bsf converts AV_PKT_DATA_NEW_EXTRADATA side data in avcc format to in-band annexb format. However, the side data wasn't been removed and copied from input packet to output packet. So the output packet has mixed bitstream format. We don't support mixed bitstream format. For example, h264_metadata report error in the following case: ffmpeg -i foo.flv \ -bsf:v "h264_mp4toannexb,h264_metadata" \ -c copy -f null This patch removed NEW_EXTRADATA side data after process. This patch also add a check so only NEW_EXTRADATA in avcc format is processed. NEW_EXTRADATA in annexb format is copied to output as is. Reported-by: jiangjie --- libavcodec/bsf/h264_mp4toannexb.c | 22 ++++++++++++---------- tests/fate/h264.mak | 4 ++-- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/libavcodec/bsf/h264_mp4toannexb.c b/libavcodec/bsf/h264_mp4toannexb.c index dda064287e..36b09b4dd6 100644 --- a/libavcodec/bsf/h264_mp4toannexb.c +++ b/libavcodec/bsf/h264_mp4toannexb.c @@ -93,6 +93,11 @@ static int h264_extradata_to_annexb(AVBSFContext *ctx, const int padding = AV_INPUT_BUFFER_PADDING_SIZE; int length_size, pps_offset = 0; + if (extradata_size < 7) { + av_log(ctx, AV_LOG_ERROR, "Invalid extradata size: %d\n", extradata_size); + return AVERROR_INVALIDDATA; + } + bytestream2_init(gb, extradata, extradata_size); bytestream2_skipu(gb, 4); @@ -262,16 +267,11 @@ static int h264_mp4toannexb_init(AVBSFContext *ctx) (extra_size >= 4 && AV_RB32(ctx->par_in->extradata) == 1)) { av_log(ctx, AV_LOG_VERBOSE, "The input looks like it is Annex B already\n"); - } else if (extra_size >= 7) { - return h264_extradata_to_annexb(ctx, - ctx->par_in->extradata, - ctx->par_in->extradata_size); - } else { - av_log(ctx, AV_LOG_ERROR, "Invalid extradata size: %d\n", extra_size); - return AVERROR_INVALIDDATA; + return 0; } - - return 0; + return h264_extradata_to_annexb(ctx, + ctx->par_in->extradata, + ctx->par_in->extradata_size); } static int h264_mp4toannexb_filter(AVBSFContext *ctx, AVPacket *opkt) @@ -293,10 +293,12 @@ static int h264_mp4toannexb_filter(AVBSFContext *ctx, AVPacket *opkt) extradata = av_packet_get_side_data(in, AV_PKT_DATA_NEW_EXTRADATA, &extradata_size); - if (extradata) { + if (extradata && extradata[0] == 1) { ret = h264_extradata_to_annexb(ctx, extradata, extradata_size); if (ret < 0) goto fail; + av_packet_side_data_remove(in->side_data, &in->side_data_elems, + AV_PKT_DATA_NEW_EXTRADATA); } /* nothing to filter */ diff --git a/tests/fate/h264.mak b/tests/fate/h264.mak index 00b153cc93..8aa780ed4b 100644 --- a/tests/fate/h264.mak +++ b/tests/fate/h264.mak @@ -225,7 +225,7 @@ FATE_H264-$(call FRAMECRC, MOV, H264) += fate-h264-unescaped-extradata # this sample contains field-coded frames, with both fields in a single packet FATE_H264-$(call FRAMECRC, MOV, H264) += fate-h264-twofields-packet -FATE_H264-$(call DEMMUX, MOV, H264, H264_MP4TOANNEXB_BSF SCALE_FILTER) += fate-h264-bsf-mp4toannexb-new-extradata +FATE_H264-$(call DEMMUX, MOV, H264, H264_MP4TOANNEXB_BSF H264_METADATA_BSF SCALE_FILTER) += fate-h264-bsf-mp4toannexb-new-extradata FATE_H264-$(call DEMMUX, MOV, H264, H264_MP4TOANNEXB_BSF) += fate-h264-bsf-mp4toannexb \ fate-h264-bsf-mp4toannexb-2 \ @@ -440,7 +440,7 @@ fate-h264-bsf-mp4toannexb: CMD = md5 -i $(TARGET_SAMPLES) fate-h264-bsf-mp4toannexb-2: CMD = md5 -i $(TARGET_SAMPLES)/h264/ps_prefix_first_idr.mp4 -c:v copy -f h264 fate-h264-bsf-mp4toannexb-2: CMP = oneline fate-h264-bsf-mp4toannexb-2: REF = cffcfa6a2d0b58c9de1f5785f099f41d -fate-h264-bsf-mp4toannexb-new-extradata: CMD = stream_remux mov $(TARGET_SAMPLES)/h264/extradata-reload-multi-stsd.mov "" h264 "-map 0:v" +fate-h264-bsf-mp4toannexb-new-extradata: CMD = stream_remux mov $(TARGET_SAMPLES)/h264/extradata-reload-multi-stsd.mov "" h264 "-bsf h264_mp4toannexb,h264_metadata -map 0:v" fate-h264-bsf-dts2pts: CMD = transcode "h264" $(TARGET_SAMPLES)/h264-conformance/CAPAMA3_Sand_F.264 \ mov "-c:v copy -bsf:v dts2pts -frames:v 50" "-c:v copy" fate-h264_mp4toannexb_ticket5927: CMD = transcode "mp4" $(TARGET_SAMPLES)/h264/thezerotheorem-cut.mp4 \ -- 2.46.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".