[pulseaudio-discuss] [RFC PATCH 2/2] alsa: add support for Dolby TrueHD and DTS-HD HBR passthrough

Arun Raghavan arun at arunraghavan.net
Wed Sep 6 03:40:37 UTC 2017



On Tue, 5 Sep 2017, at 07:08 PM, Pierre-Louis Bossart wrote:
> On 9/4/17 11:10 PM, Arun Raghavan wrote:
> > On Tue, 5 Sep 2017, at 09:17 AM, Pierre-Louis Bossart wrote:
> >> On 9/3/17 12:59 AM, Arun Raghavan wrote:
> >>> On Tue, 29 Aug 2017, at 04:19 AM, Pierre-Louis Bossart wrote:
> >>>> Add definitions and fixups for channel count
> >>>>
> >>>> Signed-off-by: Pierre-Louis Bossart
> >>>> <pierre-louis.bossart at linux.intel.com>
> >>>> ---
> >>>>    src/pulse/format.c          | 2 ++
> >>>>    src/pulse/format.h          | 8 ++++++++
> >>>>    src/pulsecore/core-format.c | 6 +++++-
> >>>>    3 files changed, 15 insertions(+), 1 deletion(-)
> >>>>
> >>>> diff --git a/src/pulse/format.c b/src/pulse/format.c
> >>>> index 8474978..07b4420 100644
> >>>> --- a/src/pulse/format.c
> >>>> +++ b/src/pulse/format.c
> >>>> @@ -47,6 +47,8 @@ static const char* const _encoding_str_table[]= {
> >>>>        [PA_ENCODING_MPEG_IEC61937] = "mpeg-iec61937",
> >>>>        [PA_ENCODING_DTS_IEC61937] = "dts-iec61937",
> >>>>        [PA_ENCODING_MPEG2_AAC_IEC61937] = "mpeg2-aac-iec61937",
> >>>> +    [PA_ENCODING_TRUEHD_IEC61937] = "truehd-iec61937",
> >>>> +    [PA_ENCODING_DTSHD_IEC61937] = "dtshd-iec61937",
> >>>>        [PA_ENCODING_ANY] = "any",
> >>>>    };
> >>>>    
> >>>> diff --git a/src/pulse/format.h b/src/pulse/format.h
> >>>> index f606b3b..6122abe 100644
> >>>> --- a/src/pulse/format.h
> >>>> +++ b/src/pulse/format.h
> >>>> @@ -56,6 +56,12 @@ typedef enum pa_encoding {
> >>>>        PA_ENCODING_MPEG2_AAC_IEC61937,
> >>>>        /**< MPEG-2 AAC data encapsulated in IEC 61937 header/padding.
> >>>>        \since 4.0 */
> >>>>    
> >>>> +    PA_ENCODING_TRUEHD_IEC61937,
> >>>> +    /**< Dolby TrueHd data encapsulated in IEC 61937 header/padding.
> >>>> \since 11.0 */
> >>>> +
> >>>> +    PA_ENCODING_DTSHD_IEC61937,
> >>>> +    /**< DTS HD-MasterAudio encapsulated in IEC 61937 header/padding.
> >>>> \since 11.0 */
> >>>> +
> >>>>        PA_ENCODING_MAX,
> >>>>        /**< Valid encoding types must be less than this value */
> >>>>    
> >>>> @@ -71,6 +77,8 @@ typedef enum pa_encoding {
> >>>>    #define PA_ENCODING_MPEG_IEC61937 PA_ENCODING_MPEG_IEC61937
> >>>>    #define PA_ENCODING_DTS_IEC61937 PA_ENCODING_DTS_IEC61937
> >>>>    #define PA_ENCODING_MPEG2_AAC_IEC61937 PA_ENCODING_MPEG2_AAC_IEC61937
> >>>> +#define PA_ENCODING_DOLBY_TRUEHD_IEC61937
> >>>> PA_ENCODING_DOLBY_TRUEHD_IEC61937
> >>>> +#define PA_ENCODING_DTS_MA_IEC61937 PA_ENCODING_DTS_MA_IEC61937
> >>>>    #define PA_ENCODING_MAX PA_ENCODING_MAX
> >>>>    #define PA_ENCODING_INVALID PA_ENCODING_INVALID
> >>>>    /** \endcond */
> >>>> diff --git a/src/pulsecore/core-format.c b/src/pulsecore/core-format.c
> >>>> index 9d3c8d6..c3db267 100644
> >>>> --- a/src/pulsecore/core-format.c
> >>>> +++ b/src/pulsecore/core-format.c
> >>>> @@ -226,7 +226,11 @@ int pa_format_info_to_sample_spec_fake(const
> >>>> pa_format_info *f, pa_sample_spec *
> >>>>         * formats, this function should return a non-zero values for these.
> >>>>         */
> >>>>    
> >>>>        ss->format = PA_SAMPLE_S16LE;
> >>>> -    ss->channels = 2;
> >>>> +    if ((f->encoding == PA_ENCODING_TRUEHD_IEC61937) ||
> >>>> +       (f->encoding == PA_ENCODING_DTSHD_IEC61937))
> >>>> +       ss->channels = 8;
> >>>> +    else
> >>>> +       ss->channels = 2;
> >>>>    
> >>>>        if (map)
> >>>>            pa_channel_map_init_stereo(map);
> >>>> -- 
> >>>
> >>> I don't have access to any hardware that does this (my laptop no longer
> >>> has an S/PDIF out :)), but for EAC3, instead of quadrupling the channel
> >>> count, I we quadruple the sample rate. I'm guessing this won't work for
> >>> HBR because those already might have high sample rates?
> >>
> >> yep. ALSA needs 8ch at 192kHz + AES0=0x6 so enable HBR playback.
> > 
> > Okay, then we should be able to at least get changing the channel count
> > working on top of my last patch to replace update_rate() with
> > reconfigure(). Attaching a small WIP patch for that. If it works fine,
> > then we can figure out how to deal with the whole profile vs. channel
> > count thing.
> 
> Sorry, I can't find your previous patch to replace 'update_rate' with 
> 'reconfigure'. Was it shared?
> Better yet, do you have a branch I could directly look at? I am drowning 
> in emails.

Here you go --
https://cgit.freedesktop.org/~arun/pulseaudio/log/?h=passthrough-hbr

You'll still need your patches adding truehd/dts-hd support on top of
this.

-- Arun


More information about the pulseaudio-discuss mailing list