[FFmpeg-devel] [PATCH] lavc: export flag for MPEG audio dual channel

James Almer jamrial at gmail.com
Wed Sep 21 22:51:29 EEST 2022


On 9/21/2022 4:44 PM, Rémi Denis-Courmont wrote:
> Le keskiviikkona 21. syyskuuta 2022, 22.26.11 EEST Scott Theisen a écrit :
>> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
>> index 7db5d1b1c5..bcf3a845a8 100644
>> --- a/libavcodec/avcodec.h
>> +++ b/libavcodec/avcodec.h
>> @@ -2076,6 +2076,17 @@ typedef struct AVCodecContext {
>>        *             The decoder can then override during decoding as needed.
>> */
>>       AVChannelLayout ch_layout;
>> +
>> +    /**
>> +     * Audio only.  This flag is set when MPEG audio mode dual channel has
>> been detected. +     * This signals that the audio is two independent mono
>> channels. +     *
>> +     * 0 normally, 1 if dual channel flag is set.
>> +     *
>> +     * - encoding: currently unused (functionally equivalent to stereo,
>> patch welcome) +     * - decoding: set by lavc
>> +     */
>> +    int mpeg_audio_mode_dual_channel;
>>   } AVCodecContext;
> 
> I agree that the dual mono flag should be exposed to the application somehow,
> but isn't this a slient ABI break?

It's not a break, but it's overkill for what's essentially a flag.

The proper way to do this would be to signal such a layout as an actual 
channel layout, using a custom order one where both channels are set as 
Front Center. But i don't know if until the old channel layout API 
fields are gone we should have decoders setting something only new API 
users will understand. Old API field users would look at channels and 
see a 2, and channel_layout and see it's empty, but then old and new API 
values would technically conflict, so I'd like to hear some opinions.

An alternative could be signaling this using an AVFormatContext.metadata 
entry called "dualmono", and ensuring the channel layout is 2 channels 
of UNSPEC order.


More information about the ffmpeg-devel mailing list