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 A8FC04D30C for ; Wed, 17 Dec 2025 04:25:29 +0000 (UTC) Authentication-Results: ffbox; dkim=fail (body hash mismatch (got b'UpJr+AjGqsjH/pWmxQGeRST7ZNkTrDD70IE+7bVhuBw=', expected b'5XZK7KDbyGA5C3nRTzJFp/wnOulWYjajUGNzVzIz+lE=')) header.d=ffmpeg.org header.i=@ffmpeg.org header.a=rsa-sha256 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1765923825; h=mime-version : to : date : message-id : reply-to : subject : list-id : list-archive : list-archive : list-help : list-owner : list-post : list-subscribe : list-unsubscribe : from : cc : content-type : content-transfer-encoding : from; bh=UpJr+AjGqsjH/pWmxQGeRST7ZNkTrDD70IE+7bVhuBw=; b=H6qXaqMNGxHdiXVnSZhcXPx9cj4fMX/XVBjnWxy2GOVVG9B+95Cc5DKFYqu1XHiaYT/q0 mwyL01UGRTDK2twk0jwflnnIazStJrQ27TY4bPLEy1OC4Jl7Vu3Ws4MVDuPtmSHQz2lUJbM Xq08o3ajIs+fBlmm7NEqHigb5qsEz582Bf7EY66y7UTv1d8IrFn4v4RLRcS1cpTgOwI2K1s /m5vZXTnVhzd0X5IjYrqBWDzabT8/eOOIVkglP2bt84uu3IjcEveW2OhLMTO2M8boENSQfJ 0NqOaYTgtMRUsEpE7S0JdtPeb1hdwhwnHozTEWO0QomrExsaMAI3nuuODZaw== Received: from [172.20.0.2] (unknown [172.19.0.4]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id A26836908F8; Wed, 17 Dec 2025 00:23:45 +0200 (EET) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=ffmpeg.org; s=arc; t=1765923817; b=negKcRjn8VCRP8JjQX2iI5Ajn3qDRPbQqrbRIlWEc3iOFb2Vim9KgcTxGAL01AUbOSflo zjtG+kx3W5Xiro5h/YlAI2IZ3LE781d0+APN8tHeJnkVYj+nfz+ofLLm1UmIDKWmTF+FjuM CuL9PLIytzY4fHkU0pI+IoutDTewuvRz05aYcJS5yNMjtd+rY0Ske34UKX1kSq6bpYAiGqk ZhHowxZYsWbk1l40WbNxnGITXW1j7DkpBfZpd9ih+eVxS2pz0kfcyck/mBSOKJvpJxTh24b 8v2vm1gX1HGXe/2iHnM86+m+Vmq0tajt9Mdsw3pZwPA+AOdzetGJqj7lVFiw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=ffmpeg.org; s=arc; t=1765923817; h=from : sender : reply-to : subject : date : message-id : to : cc : mime-version : content-type : content-transfer-encoding : content-id : content-description : resent-date : resent-from : resent-sender : resent-to : resent-cc : resent-message-id : in-reply-to : references : list-id : list-help : list-unsubscribe : list-subscribe : list-post : list-owner : list-archive; bh=gECkcRWvQtoC07yU3UyAtgT9WOKKExs+DLvclHh3xJU=; b=G9/bJMc0mEC5PoUqVnxXEoG1mspezmPrFFBOezi+/FyC3vtZzbVTp1mYC0j2OdwMY+WbN 51+iIp2xYH4dMxXBfUDXqKjNeP4qiRlBt47Gh+0b4sSQfj36eLua3YpDHGrG0L2fDsI3/jp lUmu9JBabswgRBOCNJnaqUWY6U1bO2XR9gU3IWUxzAGkUMPyL689T5HiF4bqWjlNqZgx7no QTwGQClS5uzuKFPt4P16GyhBdZQX4fEbzVbbGXei5QWsuo/WLr/xLCzdQTGaQx3ZB3IRC5u FQIideZr9EEIFPjtPG+dETfnYw1xu7Bev3xyD6/R+PrKr3IKboyZG4WjOkPw== ARC-Authentication-Results: i=1; ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none; dmarc=pass header.from=ffmpeg.org policy.dmarc=quarantine Authentication-Results: ffmpeg.org; dkim=pass header.d=ffmpeg.org header.i=@ffmpeg.org; arc=none (Message is not ARC signed); dmarc=pass (Used From Domain Record) header.from=ffmpeg.org policy.dmarc=quarantine DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ffmpeg.org; i=@ffmpeg.org; q=dns/txt; s=mail; t=1765923808; h=content-type : mime-version : content-transfer-encoding : from : to : reply-to : subject : date : from; bh=5XZK7KDbyGA5C3nRTzJFp/wnOulWYjajUGNzVzIz+lE=; b=cA26NEiTZ2xq1e84xegAumohbWhNTkp8nVJiF6PrPG9CEnVVZTNyK1dW756qTtXu5IJ0n kdy24bKuek6//+AIPwRWXQ5lYYVby4T05P7Kzog8DQKNOZk1/nrGlEQs/eLICzwaBf2rXbo kZdGGUlCHswQ0ZSZxxv27ix6nkyG24btYTD9VEitSgjy3FGOuALOL/Yb9aNYtpAR4NNSKqa iTRWzMtcd6mOGefaAsJdKlwDbKgIZ/iVfApHm4/RBGoJEwEOgC/EIqT3ISng68/opqlyytg 4jnGaPoD029Ucj+hqrnk05D9JU8785UdqJYNsEvN+Y0kxih4Uayl1E8VPrGg== Received: from 55ca25703178 (code.ffmpeg.org [188.245.149.3]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id A00C16908D8 for ; Wed, 17 Dec 2025 00:23:28 +0200 (EET) MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Date: Tue, 16 Dec 2025 22:23:28 -0000 Message-ID: <176592380880.60.11954002838101028383@2cb04c0e5124> Message-ID-Hash: 3NZ4L4Z4SP7UTVZULXFI3T56VURR2ILB X-Message-ID-Hash: 3NZ4L4Z4SP7UTVZULXFI3T56VURR2ILB X-MailFrom: code@ffmpeg.org X-Mailman-Rule-Hits: nonmember-moderation X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-ffmpeg-devel.ffmpeg.org-0; header-match-ffmpeg-devel.ffmpeg.org-1; header-match-ffmpeg-devel.ffmpeg.org-2; header-match-ffmpeg-devel.ffmpeg.org-3; emergency; member-moderation X-Mailman-Version: 3.3.10 Precedence: list Reply-To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH] avformat/demux: ensure avformat_find_stream_info updates internal stream contexts (PR #21224) List-Id: FFmpeg development discussions and patches Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: James Almer via ffmpeg-devel Cc: James Almer Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Archived-At: List-Archive: List-Post: PR #21224 opened by James Almer (jamrial) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21224 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/21224.patch read_frame_internal() may result in a stream being modified without also returning a packet from it. Given said function only bothered to update the internal stream context for the returned packet, the result would be a desync between the stream's AVCodecParameters and the internal AVCodecContext. This change makes sure all streams are updated within the avformat_find_stream_info() loop. Fixes #YWH-PGM40646-20 This PR supersedes #21215. >>From 27fa209cf5f2b995828926e863ce11f1e531881f Mon Sep 17 00:00:00 2001 From: James Almer Date: Tue, 16 Dec 2025 19:20:40 -0300 Subject: [PATCH] avformat/demux: ensure avformat_find_stream_info updates internal stream contexts read_frame_internal() may result in a stream being modified without also returning a packet from it. Given said function only bothered to update the internal stream context for the returned packet, the result would be a desync between the stream's AVCodecParameters and the internal AVCodecContext. This change makes sure all streams are updated within the avformat_find_stream_info() loop. Fixes #YWH-PGM40646-20 Signed-off-by: James Almer --- libavformat/demux.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/libavformat/demux.c b/libavformat/demux.c index 934eb80553..b1918d2110 100644 --- a/libavformat/demux.c +++ b/libavformat/demux.c @@ -186,6 +186,8 @@ static int init_input(AVFormatContext *s, const char *filename, s, 0, s->format_probesize); } +static int codec_close(FFStream *sti); + static int update_stream_avctx(AVFormatContext *s) { int ret; @@ -196,6 +198,14 @@ static int update_stream_avctx(AVFormatContext *s) if (!sti->need_context_update) continue; + if (avcodec_is_open(sti->avctx)) { + av_log(s, AV_LOG_DEBUG, "Demuxer context update while decoder is open, closing and trying to re-open\n"); + ret = codec_close(sti); + sti->info->found_decoder = 0; + if (ret < 0) + return ret; + } + /* close parser, because it depends on the codec */ if (sti->parser && sti->avctx->codec_id != st->codecpar->codec_id) { av_parser_close(sti->parser); @@ -2682,6 +2692,13 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options) break; } + /* read_frame_internal() in a previous iteration of this loop may + * have made changes to streams without returning a packet for them. + * Handle that here. */ + ret = update_stream_avctx(ic); + if (ret < 0) + goto unref_then_goto_end; + /* check if one codec still needs to be handled */ for (i = 0; i < ic->nb_streams; i++) { AVStream *const st = ic->streams[i]; -- 2.49.1 _______________________________________________ ffmpeg-devel mailing list -- ffmpeg-devel@ffmpeg.org To unsubscribe send an email to ffmpeg-devel-leave@ffmpeg.org