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

Carl Eugen Hoyos ceffmpeg at gmail.com
Sun Jan 26 22:55:46 EET 2020


Am So., 26. Jan. 2020 um 21:44 Uhr schrieb Federico Simoncelli
<federico.simoncelli at gmail.com>:
>
> 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).

The command line input option channel_layout does not work
with pulse input?

Could you do me a favour and provide a command line
using pulse? I may be able to reproduce but don't
remember how pulse is supposed to work...

Carl Eugen


More information about the ffmpeg-devel mailing list