On 3/20/2022 2:03 PM, James Almer wrote:
On 3/19/2022 10:47 AM, Anton Khirnov wrote:
Quoting James Almer (2022-03-19 04:04:07)
The function is not meant to clear codec parameters, and the lavf demux code
relies on this behavior.

Maybe it shouldn't?

Which code is it exactly?

The parser included by demux.c. That file calls avcodec_close() in certain situations, but the avctx is still used when calling av_parser_parse2() as it's expected that all the parameters are left intact, and all were until 327efa6633, where avctx->ch_layout started being uninitialized, and it shouldn't.

An alternative is

diff --git a/libavformat/demux.c b/libavformat/demux.c
index c1c9422ac0..c14e44cb07 100644
--- a/libavformat/demux.c
+++ b/libavformat/demux.c
@@ -2957,6 +2957,7 @@ find_stream_info_err:
             av_freep(&sti->info);
         }
         avcodec_close(sti->avctx);
+        avcodec_parameters_to_context(sti->avctx, st->codecpar);
         av_bsf_free(&sti->extract_extradata.bsf);
     }
     if (ic->pb) {

Which works around this specific issue, but either way, avcodec_close(avctx) should not nuke avctx->ch_layout.
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to