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
> >> <[email protected]>
> >> ---
> >> 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.
Regards,
Arun
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index 96fd02aec..22de471b4 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -1619,7 +1619,7 @@ static int sink_reconfigure_cb(pa_sink *s, pa_sample_spec *spec, bool passthroug
if (!PA_SINK_IS_OPENED(s->state)) {
pa_log_info("Updating rate for device %s, new rate is %d", u->device_name, spec->rate);
- u->sink->sample_spec.rate = spec->rate;
+ u->sink->sample_spec = *spec;
return 0;
}
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index f1813b6d1..982091ac7 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -1456,7 +1456,7 @@ int pa_sink_reconfigure(pa_sink *s, pa_sample_spec *spec, bool passthrough) {
if (passthrough) {
/* We have to try to use the sink input rate */
- desired_spec.rate = spec->rate;
+ desired_spec = *spec;
} else if (avoid_resampling && (spec->rate >= default_rate || spec->rate >= alternate_rate)) {
/* We just try to set the sink input's sample rate if it's not too low */
_______________________________________________
pulseaudio-discuss mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss