[FFmpeg-devel] [PATCH] libavcodec/mpegaudio_parser.c: differentiate MPEG audio dual mono

Scott Theisen scott.the.elm at gmail.com
Tue Dec 10 22:42:06 EET 2024


On 12/9/24 02:31, Anton Khirnov wrote:
> Quoting Scott Theisen (2024-11-30 08:38:54)
>> On 11/25/24 00:42, Anton Khirnov wrote:
>>> Quoting Scott Theisen (2024-11-14 05:37:49)
>>>> @@ -85,7 +85,13 @@ static int mpegaudio_parse(AVCodecParserContext *s1,
>>>>                        if (s->header_count > header_threshold) {
>>>>                            avctx->sample_rate= sr;
>>>>                            av_channel_layout_uninit(&avctx->ch_layout);
>>>> -                        av_channel_layout_default(&avctx->ch_layout, channels);
>>>> +                        if (dual_mono) {
>>>> +                            av_channel_layout_custom_init(&avctx->ch_layout, 2);
>>> This can fail - the return code should be checked.
>>>
>> It can only fail if av_calloc() fails to allocate 48 bytes.  Should it
>> return buf_size or just use the default order?
> Memory allocation failure should always propagate back to the caller.
>

The parsers can't return error codes, though.  See line 105 in 
libavcodec/mpegaudio_parser.c
```
return buf_size; /* parsers must not return error codes */
```

and lines 2911-2916 in libavcodec/avcodec.h
```
/* This callback never returns an error, a negative value means that
  * the frame start was in a previous packet. */
int (*parser_parse)(AVCodecParserContext *s,
                     AVCodecContext *avctx,
                     const uint8_t **poutbuf, int *poutbuf_size,
                     const uint8_t *buf, int buf_size);
```

Regards,

Scott Theisen


More information about the ffmpeg-devel mailing list