[vlc-devel] [RFC] audio: let VLC decode more than 9 audio channels

Jean-Baptiste Kempf jb at videolan.org
Wed Oct 7 10:42:16 CEST 2015


On 06 Oct, Emeric Grange wrote :
> These channels doesn't have to correspond to "real" output speakers, so the code
> related to new speakers from the WAVE_FORMAT_PCM is just here to avoid VLC
> segfaulting when playing these files directly.

Then you need to work on object-based audio.

> -    AOUT_CHAN_CENTER, AOUT_CHAN_LFE, 0
> +    AOUT_CHAN_CENTER, AOUT_CHAN_LFE,
> +
> +    AOUT_CHAN_SIDE_LEFT,
> +    AOUT_CHAN_SIDE_RIGHT,

This is MIDDLE_LEFT, MIDDLE_RIGHT.

> +    AOUT_CHAN_TOP_CENTER,
> +    AOUT_CHAN_TOP_FRONT_CENTER,
> +    AOUT_CHAN_TOP_FRONT_LEFT,
> +    AOUT_CHAN_TOP_FRONT_RIGHT,
> +    AOUT_CHAN_TOP_BACK_CENTER,
> +    AOUT_CHAN_TOP_BACK_LEFT,
> +    AOUT_CHAN_TOP_BACK_RIGHT,
> +
> +    0
>  };
> 
>  #define AOUT_RESTART_FILTERS 1
> diff --git a/include/vlc_es.h b/include/vlc_es.h
> index 97cdb78..bf0bc11 100644
> --- a/include/vlc_es.h
> +++ b/include/vlc_es.h
> @@ -108,13 +108,28 @@ struct audio_format_t
>  #define AOUT_CHAN_REARRIGHT         0x40
>  #define AOUT_CHAN_MIDDLELEFT        0x100
>  #define AOUT_CHAN_MIDDLERIGHT       0x200
> -#define AOUT_CHAN_LFE               0x1000
> +
> +#define AOUT_CHAN_SIDE_LEFT         0x100
> +#define AOUT_CHAN_SIDE_RIGHT        0x200

See above.

> +#define AOUT_CHAN_TOP_CENTER        0x400
> +#define AOUT_CHAN_TOP_FRONT_CENTER  0x800
> +#define AOUT_CHAN_TOP_FRONT_LEFT    0x1000
> +#define AOUT_CHAN_TOP_FRONT_RIGHT   0x2000
> +#define AOUT_CHAN_TOP_BACK_CENTER   0x4000
> +#define AOUT_CHAN_TOP_BACK_LEFT     0x8000
> +#define AOUT_CHAN_TOP_BACK_RIGHT    0x10000
> +
> +#define AOUT_CHAN_LFE               0x80000

OK.

> 
>  #define AOUT_CHANS_FRONT  (AOUT_CHAN_LEFT       | AOUT_CHAN_RIGHT)
>  #define AOUT_CHANS_MIDDLE (AOUT_CHAN_MIDDLELEFT | AOUT_CHAN_MIDDLERIGHT)
>  #define AOUT_CHANS_REAR   (AOUT_CHAN_REARLEFT   | AOUT_CHAN_REARRIGHT)
>  #define AOUT_CHANS_CENTER (AOUT_CHAN_CENTER     | AOUT_CHAN_REARCENTER)
> 
> +#define AOUT_CHANS_TOP_FRONT  (AOUT_CHAN_TOP_FRONT_LEFT | AOUT_CHAN_TOP_FRONT_RIGHT)
> +#define AOUT_CHANS_TOP_REAR   (AOUT_CHAN_TOP_BACK_LEFT  | AOUT_CHAN_TOP_BACK_LEFT)
> +#define AOUT_CHANS_TOP_CENTER (AOUT_CHAN_TOP_CENTER     | AOUT_CHAN_TOP_FRONT_CENTER | AOUT_CHAN_TOP_BACK_CENTER)
> +
>  #define AOUT_CHANS_STEREO AOUT_CHANS_2_0
>  #define AOUT_CHANS_2_0    (AOUT_CHANS_FRONT)
>  #define AOUT_CHANS_2_1    (AOUT_CHANS_FRONT | AOUT_CHAN_LFE)
> @@ -128,6 +143,7 @@ struct audio_format_t
>  #define AOUT_CHANS_7_0    (AOUT_CHANS_6_0   | AOUT_CHAN_CENTER)
>  #define AOUT_CHANS_7_1    (AOUT_CHANS_5_1   | AOUT_CHANS_MIDDLE)
>  #define AOUT_CHANS_8_1    (AOUT_CHANS_7_1   | AOUT_CHAN_REARCENTER)
> +#define AOUT_CHANS_16_0   (AOUT_CHANS_8_1   | AOUT_CHANS_TOP_FRONT | AOUT_CHANS_TOP_REAR | AOUT_CHANS_TOP_CENTER)

This is incorrect.

>  #define AOUT_CHANS_4_0_MIDDLE (AOUT_CHANS_FRONT | AOUT_CHANS_MIDDLE)
>  #define AOUT_CHANS_4_CENTER_REAR (AOUT_CHANS_FRONT | AOUT_CHANS_CENTER)
> @@ -135,12 +151,12 @@ struct audio_format_t
>  #define AOUT_CHANS_6_1_MIDDLE (AOUT_CHANS_5_0_MIDDLE | AOUT_CHAN_REARCENTER | AOUT_CHAN_LFE)
> 
>  /* Values available for original channels only */
> -#define AOUT_CHAN_DOLBYSTEREO       0x10000
> -#define AOUT_CHAN_DUALMONO          0x20000
> -#define AOUT_CHAN_REVERSESTEREO     0x40000
> +#define AOUT_CHAN_DOLBYSTEREO       0x100000
> +#define AOUT_CHAN_DUALMONO          0x200000
> +#define AOUT_CHAN_REVERSESTEREO     0x400000

You cannot change that, without breaking all the existing plugins.

>  #define AOUT_CHAN_PHYSMASK          0xFFFF
> -#define AOUT_CHAN_MAX               9
> +#define AOUT_CHAN_MAX               18
With my kindest regards,

-- 
Jean-Baptiste Kempf
http://www.jbkempf.com/ - +33 672 704 734
Sent from my Electronic Device


More information about the vlc-devel mailing list