[FFmpeg-devel] [PATCH] avfilter/src_movie: support unknown channel layouts

James Almer jamrial at gmail.com
Mon Oct 31 21:40:16 EET 2022



On 10/31/2022 9:15 AM, Andreas Rheinhardt wrote:
> Paul B Mahol:
>> -        av_log(log_ctx, AV_LOG_ERROR,
>> +        char *cl_name;
>> +
>> +        av_log(log_ctx, AV_LOG_WARNING,
>>                  "Channel layout is not set in stream %d, and could not "
>>                  "be guessed from the number of channels (%d)\n",
>>                  st_index, dec_par->ch_layout.nb_channels);
>> -        return AVERROR(EINVAL);
>> +        cl_name = av_asprintf("%dC", dec_par->ch_layout.nb_channels);
>> +        av_channel_layout_from_string(&chl, cl_name);
>> +        free(cl_name);
> 
> 1. Wrong deallocator.
> 2. The allocation is completely unnecessary: One can just use snprintf
> with a big enough (yet still small) buffer.
> 3. But even that is unnecessary: Just set chl = (AVChannelLayout){
> .order = AV_CHANNEL_ORDER_UNSPEC, .nb_channels =
> dec_par->ch_layout.nb_channels }.

He doesn't even need to do that because it's already set. 
av_channel_layout_default() will give set the output layout as an UNSPEC 
one with nb_channels amount of channels if it can't find a named native 
layout for it.

There is however a problem with this patch as is, and it's the next 
printed warning now that he removed the return. After this change it 
will mention a layout was guessed when one wasn't. So this patch should 
simply change the "return AVERROR(EINVAL)" into another "return 
av_channel_layout_copy(&dec_par->ch_layout, &chl);"


More information about the ffmpeg-devel mailing list