format: Add support for Dolby TrueHD and DTS-HD HBR passthrough
authorPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Tue, 15 Aug 2017 17:24:12 +0000 (12:24 -0500)
committerArun Raghavan <arun@arunraghavan.net>
Thu, 21 Jun 2018 00:59:32 +0000 (06:29 +0530)
Add definitions and fixups for channel count

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
src/pulse/format.c
src/pulse/format.h
src/pulsecore/core-format.c

index 8474978..07b4420 100644 (file)
@@ -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",
 };
 
index 2143bb5..584032f 100644 (file)
@@ -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 13.0 */
+
+    PA_ENCODING_DTSHD_IEC61937,
+    /**< DTS-HD Master Audio encapsulated in IEC 61937 header/padding. \since 13.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_TRUEHD_IEC61937 PA_ENCODING_TRUEHD_IEC61937
+#define PA_ENCODING_DTSHD_IEC61937 PA_ENCODING_DTSHD_IEC61937
 #define PA_ENCODING_MAX PA_ENCODING_MAX
 #define PA_ENCODING_INVALID PA_ENCODING_INVALID
 /** \endcond */
index 9d3c8d6..c3db267 100644 (file)
@@ -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);