From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 533154D374 for ; Mon, 30 Jun 2025 21:46:00 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 56DD968E8F5; Tue, 1 Jul 2025 00:45:56 +0300 (EEST) Received: from mail-yb1-f182.google.com (mail-yb1-f182.google.com [209.85.219.182]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id B4D4A68E865 for ; Tue, 1 Jul 2025 00:45:49 +0300 (EEST) Received: by mail-yb1-f182.google.com with SMTP id 3f1490d57ef6-e819ebc3144so4287437276.0 for ; Mon, 30 Jun 2025 14:45:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1751319948; x=1751924748; darn=ffmpeg.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id:from :to:cc:subject:date:message-id:reply-to; bh=+sJsiyvBt7pV0EXM1lLKWySPbhOqNM3bcoFZDjHhgC0=; b=jtmguy19Mi8AT7uWgGcibfj0eB9TrkAZwspMVtbV7Oc5jZ9/4V/IyMPWYd1Hnp6FT9 fll/piV42LBlz/730ENx2coAoXTiWybiNFGnGa6VlBOl9LbRZdblnq2CncuO+1LTnt9R CtuOAiJRat3ZM2nk1ip4nJIse6GS1FG1IdN20yMTrHSF5L9kKn0i5kz7NW+Zud1IZTOH r2CUjoLyK1fUCtUKfx+GgmfOzFYY6L/hAQjhW4zMeaQxDePKplzsDVH6LDEUGHOrDvQX ar+FaSQSCURB20AXJa/kFQ2dec3tU3+mWol6Eqn8Z+I5iINdFoQB3OMISEKtVi+9KEcT TI2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751319948; x=1751924748; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=+sJsiyvBt7pV0EXM1lLKWySPbhOqNM3bcoFZDjHhgC0=; b=Lwi7sdLBLUitLai8ph3xpJwGq+UbOr/uFYJvmwbqJyQJExgtSiABrukkoPmnd7AE5f xWmxwu6GBS39B1cgXU3o+QVkrCP9xHWPJtq9SE7dqmpfyHTanfiTobpqEwe41xS1gUK4 ghNnikPEFMhad6s+WY/NIMPTE6rNxh1iLKHOEpCBcvhSaDqvgwolOxq+hNqNeDItmodH iEPZzMTh/W39BD4xPgiIUHmMt+Gg5dBQnjX/AKuah4kfrb4Rf5eNtJXUrXBIU7cBihRk ifTNhJPRBb1q5N0LKLVpjy2G5FCv58Isstf8/Agj6HcN1sQ1kXBZy4luwkVE22srncGM atGA== X-Gm-Message-State: AOJu0YxGJV0jWqErJRR8uLlHoMJBUlijGtIdOEDR18GR+Zim8tu9UZ88 Ty5+3wz5rkaDW4jTurFDosr5GkcIpv0DP+af9mN/NlYPA04/GrqEnxf8+xaQBeOnHC4= X-Gm-Gg: ASbGncsLGdzc8e7KJiViDg8QUXJVVHkfO1naPAEi7sDJGtiY4pR4InUf6hkBwAXc6ra R1lQ3OtCMsXJK4E1BOwo1VS+AR5oeVeWBfSRqGggFH0nGUclJW7AJ/S41gfOqyddK9WJFyQv46h 4eY25X5i7ePZrv1YjRAuAJcjJYCNvOe6YIMUqtXxmsFlte7ZRuDHZI9YTMR6XDzgIo7EAunF83V EPSrp/iI4rMn++krW6HYX+QnYPtiL2njy+TETnA6w80DKt5IOhZNIpNf5D+8G42HTG2c2F2PsAz lKhm08xX/QXDct4IKNXFZwMF+LX3BbPjkzKqOOWvB2ByAKGVboF+mMc8ZryvkGu/+mVkbCyCigS 7s+Gxt7ci4ZRfviZW95eKDnnB2xIUawViVqYi9Bmidw== X-Google-Smtp-Source: AGHT+IE/4zbcZkeUkss33eW4ZCoW/u3bVaJLJcnOTGDhh2r6VuY18jDSUVGZLXPEA0JZ++EguC2qAw== X-Received: by 2002:a05:6902:298b:b0:e85:e09e:6fbb with SMTP id 3f1490d57ef6-e87a7be0380mr14346981276.38.1751319947928; Mon, 30 Jun 2025 14:45:47 -0700 (PDT) Received: from [192.168.1.20] (pool-96-241-231-64.washdc.fios.verizon.net. [96.241.231.64]) by smtp.gmail.com with ESMTPSA id 3f1490d57ef6-e87a6b4c9b9sm2586255276.8.2025.06.30.14.45.47 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 30 Jun 2025 14:45:47 -0700 (PDT) Message-ID: Date: Mon, 30 Jun 2025 17:45:46 -0400 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird To: ffmpeg-devel@ffmpeg.org References: <20250630035518.3622-1-pkoshevoy@gmail.com> Content-Language: en-US From: Scott Theisen In-Reply-To: <20250630035518.3622-1-pkoshevoy@gmail.com> Subject: Re: [FFmpeg-devel] [PATCH] avformat/mpegts: Add AVFMT_FLAG_ALLOW_CODEC_CHANGES (v2) 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 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: On 2025/06/29 23:55, Pavel Koshevoy wrote: > Make midstream AVStream.codecpar updates optional and disabled > by default, so that avformat API clients can enable this feature > explicitly when they add support for midstream codec changes. Is this signaled in any way or is the client expected to check if codecpar has changed? I ask because MythTV added checking and a callback for streams changing between PMT versions, including adding or removing streams. Thanks, Scott Theisen > --- > doc/APIchanges | 3 +++ > libavformat/avformat.h | 2 ++ > libavformat/mpegts.c | 4 +++- > libavformat/version.h | 4 ++-- > tests/ref/fate/ts-demux | 4 ++-- > 5 files changed, 12 insertions(+), 5 deletions(-) > > diff --git a/doc/APIchanges b/doc/APIchanges > index 91710bb27d..43172fbcdd 100644 > --- a/doc/APIchanges > +++ b/doc/APIchanges > @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2025-03-28 > > API changes, most recent first: > > +2025-06-17 - xxxxxxxxxx - lavf 62.2.100 - avformat.h > + Add AVFMT_FLAG_ALLOW_CODEC_CHANGES flag. > + > 2025-05-21 - xxxxxxxxxx - lavu 60.3.100 - avassert.h > Add av_unreachable() and av_assume() macros. > > diff --git a/libavformat/avformat.h b/libavformat/avformat.h > index b6c63e2237..2e5232c96d 100644 > --- a/libavformat/avformat.h > +++ b/libavformat/avformat.h > @@ -1436,6 +1436,8 @@ typedef struct AVFormatContext { > #define AVFMT_FLAG_FAST_SEEK 0x80000 ///< Enable fast, but inaccurate seeks for some formats > #define AVFMT_FLAG_AUTO_BSF 0x200000 ///< Add bitstream filters as requested by the muxer > > +#define AVFMT_FLAG_ALLOW_CODEC_CHANGES 0x400000 ///< Allow AVStream.codecpar to be updated midstream if input changes (e.g. MPEG-TS ES stream_type changes) > + > /** > * Maximum number of bytes read from input in order to determine stream > * properties. Used when reading the global header and in > diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c > index deb69a0548..ed4ff580e5 100644 > --- a/libavformat/mpegts.c > +++ b/libavformat/mpegts.c > @@ -2510,7 +2510,9 @@ static void pmt_cb(MpegTSFilter *filter, const uint8_t *section, int section_len > if (!st) > goto out; > > - if (pes && pes->stream_type != stream_type) > + if (pes && (!pes->stream_type || > + (pes->stream_type != stream_type && > + !!(ts->stream->flags & AVFMT_FLAG_ALLOW_CODEC_CHANGES)))) > mpegts_set_stream_info(st, pes, stream_type, prog_reg_desc); > > add_pid_to_program(prg, pid); > diff --git a/libavformat/version.h b/libavformat/version.h > index b32ddb3617..904e7f06aa 100644 > --- a/libavformat/version.h > +++ b/libavformat/version.h > @@ -31,8 +31,8 @@ > > #include "version_major.h" > > -#define LIBAVFORMAT_VERSION_MINOR 1 > -#define LIBAVFORMAT_VERSION_MICRO 101 > +#define LIBAVFORMAT_VERSION_MINOR 2 > +#define LIBAVFORMAT_VERSION_MICRO 100 > > #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \ > LIBAVFORMAT_VERSION_MINOR, \ > diff --git a/tests/ref/fate/ts-demux b/tests/ref/fate/ts-demux > index d56cc27937..6a830d0d99 100644 > --- a/tests/ref/fate/ts-demux > +++ b/tests/ref/fate/ts-demux > @@ -24,6 +24,6 @@ packet|codec_type=video|stream_index=0|pts=3912686363|pts_time=43474.292922|dts= > packet|codec_type=audio|stream_index=1|pts=3912644825|pts_time=43473.831389|dts=3912644825|dts_time=43473.831389|duration=2880|duration_time=0.032000|size=906|pos=474888|flags=K__|data_hash=CRC32:0893d398 > packet|codec_type=audio|stream_index=2|pts=3912645580|pts_time=43473.839778|dts=3912645580|dts_time=43473.839778|duration=2880|duration_time=0.032000|size=354|pos=491808|flags=K__|data_hash=CRC32:f5963fa6 > stream|index=0|codec_name=mpeg2video|profile=4|codec_type=video|codec_tag_string=[2][0][0][0]|codec_tag=0x0002|width=1280|height=720|coded_width=0|coded_height=0|has_b_frames=1|sample_aspect_ratio=1:1|display_aspect_ratio=16:9|pix_fmt=yuv420p|level=4|color_range=tv|color_space=unknown|color_transfer=unknown|color_primaries=unknown|chroma_location=left|field_order=progressive|refs=1|ts_id=32776|ts_packetsize=188|id=0x31|r_frame_rate=60000/1001|avg_frame_rate=60000/1001|time_base=1/90000|start_pts=3912669846|start_time=43474.109400|duration_ts=19519|duration=0.216878|bit_rate=15000000|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=15|extradata_size=150|extradata_hash=CRC32:53134fa8|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic =0| > disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|disposition:dependent=0|disposition:still_image=0|disposition:multilayer=0|side_datum/cpb_properties:side_data_type=CPB properties|side_datum/cpb_properties:max_bitrate=15000000|side_datum/cpb_properties:min_bitrate=0|side_datum/cpb_properties:avg_bitrate=0|side_datum/cpb_properties:buffer_size=9781248|side_datum/cpb_properties:vbv_delay=-1 > -stream|index=1|codec_name=ac3|profile=unknown|codec_type=audio|codec_tag_string=[6][0][0][0]|codec_tag=0x0006|sample_fmt=fltp|sample_rate=48000|channels=6|channel_layout=5.1(side)|bits_per_sample=0|initial_padding=0|dmix_mode=0|ltrt_cmixlev=0.000000|ltrt_surmixlev=0.000000|loro_cmixlev=0.000000|loro_surmixlev=0.000000|ts_id=32776|ts_packetsize=188|id=0x34|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/90000|start_pts=3912633305|start_time=43473.703389|duration_ts=14400|duration=0.160000|bit_rate=384000|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=5|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata= 0| > disposition:dependent=0|disposition:still_image=0|disposition:multilayer=0|tag:language=eng > -stream|index=2|codec_name=ac3|profile=unknown|codec_type=audio|codec_tag_string=[6][0][0][0]|codec_tag=0x0006|sample_fmt=fltp|sample_rate=48000|channels=2|channel_layout=stereo|bits_per_sample=0|initial_padding=0|dmix_mode=0|ltrt_cmixlev=0.000000|ltrt_surmixlev=0.000000|loro_cmixlev=0.000000|loro_surmixlev=0.000000|ts_id=32776|ts_packetsize=188|id=0x35|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/90000|start_pts=3912634060|start_time=43473.711778|duration_ts=14400|duration=0.160000|bit_rate=192000|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=5|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|d is > position:dependent=0|disposition:still_image=0|disposition:multilayer=0|tag:language=es > +stream|index=1|codec_name=ac3|profile=unknown|codec_type=audio|codec_tag_string=[4][0][0][0]|codec_tag=0x0004|sample_fmt=fltp|sample_rate=48000|channels=6|channel_layout=5.1(side)|bits_per_sample=0|initial_padding=0|dmix_mode=0|ltrt_cmixlev=0.000000|ltrt_surmixlev=0.000000|loro_cmixlev=0.000000|loro_surmixlev=0.000000|ts_id=32776|ts_packetsize=188|id=0x34|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/90000|start_pts=3912633305|start_time=43473.703389|duration_ts=14400|duration=0.160000|bit_rate=384000|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=5|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata= 0| > disposition:dependent=0|disposition:still_image=0|disposition:multilayer=0|tag:language=eng > +stream|index=2|codec_name=ac3|profile=unknown|codec_type=audio|codec_tag_string=[4][0][0][0]|codec_tag=0x0004|sample_fmt=fltp|sample_rate=48000|channels=2|channel_layout=stereo|bits_per_sample=0|initial_padding=0|dmix_mode=0|ltrt_cmixlev=0.000000|ltrt_surmixlev=0.000000|loro_cmixlev=0.000000|loro_surmixlev=0.000000|ts_id=32776|ts_packetsize=188|id=0x35|r_frame_rate=0/0|avg_frame_rate=0/0|time_base=1/90000|start_pts=3912634060|start_time=43473.711778|duration_ts=14400|duration=0.160000|bit_rate=192000|max_bit_rate=N/A|bits_per_raw_sample=N/A|nb_frames=N/A|nb_read_frames=N/A|nb_read_packets=5|disposition:default=0|disposition:dub=0|disposition:original=0|disposition:comment=0|disposition:lyrics=0|disposition:karaoke=0|disposition:forced=0|disposition:hearing_impaired=0|disposition:visual_impaired=0|disposition:clean_effects=0|disposition:attached_pic=0|disposition:timed_thumbnails=0|disposition:non_diegetic=0|disposition:captions=0|disposition:descriptions=0|disposition:metadata=0|d is > position:dependent=0|disposition:still_image=0|disposition:multilayer=0|tag:language=es > format|filename=mp3ac325-4864-small.ts|nb_streams=3|nb_programs=1|nb_stream_groups=0|format_name=mpegts|start_time=43473.703389|duration=0.622889|size=512000|bit_rate=6575810|probe_score=50 _______________________________________________ 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".