[FFmpeg-devel] [PATCH] avdevice/pulse_audio_dec: identify channel layout

Federico Simoncelli federico.simoncelli at gmail.com
Sun Jan 26 22:37:20 EET 2020


On Sun, Jan 26, 2020 at 8:27 PM Carl Eugen Hoyos <ceffmpeg at gmail.com> wrote:
>
> Am So., 26. Jan. 2020 um 18:13 Uhr schrieb Federico Simoncelli
> <federico.simoncelli at gmail.com>:
> >
> > This patch adds the attempt to identify the pulseaudio channel map and
> > when possible set the relevant channel_layout parameter of the codec.
> >
> > The result is an improvement over the current behavior of guessing the
> > layout based on the number of channels (for more information see
> > guess_layout_max).
> > ---
> >  libavdevice/pulse_audio_dec.c | 40 +++++++++++++++++++++++++++++++----
> >  1 file changed, 36 insertions(+), 4 deletions(-)
> >
> > diff --git a/libavdevice/pulse_audio_dec.c b/libavdevice/pulse_audio_dec.c
> > index 50a3c971ae..12f2d15680 100644
> > --- a/libavdevice/pulse_audio_dec.c
> > +++ b/libavdevice/pulse_audio_dec.c
> > @@ -135,6 +135,37 @@ static av_cold int pulse_close(AVFormatContext *s)
> >      return 0;
> >  }
> >
> > +static int pulse_map_to_layout(pa_channel_map *cmap)
> > +{
> > +    const char *map_name = pa_channel_map_to_name(cmap);
> > +
> > +    if (map_name == NULL)
> > +        return 0;
> > +
> > +    if (strcmp(map_name, "mono") == 0)
> > +        return AV_CH_LAYOUT_MONO;
> > +
> > +    if (strcmp(map_name, "stereo") == 0)
> > +        return AV_CH_LAYOUT_STEREO;
> > +
> > +    if (strcmp(map_name, "surround-40") == 0)
> > +        return AV_CH_LAYOUT_4POINT0;
> > +
> > +    if (strcmp(map_name, "surround-41") == 0)
> > +        return AV_CH_LAYOUT_4POINT1;
> > +
> > +    if (strcmp(map_name, "surround-50") == 0)
> > +        return AV_CH_LAYOUT_5POINT0;
> > +
> > +    if (strcmp(map_name, "surround-51") == 0)
> > +        return AV_CH_LAYOUT_5POINT1;
> > +
> > +    if (strcmp(map_name, "surround-71") == 0)
> > +        return AV_CH_LAYOUT_7POINT1;
>
> Let me repeat my question:
> Am I correct that without your question, it is possible to set the
> channel_layout from the command line?

AFAIK from the command line you cannot set the layout (before and
after the patch), you can only set the number of channels.
You can then apply filters to modify and set a layout (also here no
effect from my patch).

> Is it still possible to overwrite above defaults with your patch?

Yes, you can still set the number of channels after the patch (also >= 3).
If pulse can provide a recognized layout for the requested number of
channels then with my patch it will be automatically set, otherwise
(as before) it will continue to be guessed.

-- 
Federico


More information about the ffmpeg-devel mailing list