Hack pulseaudio channel map for 5.1 DCPs to see if it fixes multi-channel playback...
authorCarl Hetherington <cth@carlh.net>
Mon, 15 Apr 2019 11:44:27 +0000 (12:44 +0100)
committerCarl Hetherington <cth@carlh.net>
Mon, 15 Apr 2019 19:48:46 +0000 (20:48 +0100)
RtAudio.cpp

index bea68a88f717280e09b97be3f684693084a6d47a..64b15774c8642423fffb6492eac264469b930d60 100644 (file)
@@ -8974,7 +8974,38 @@ bool RtApiPulse::probeDeviceOpen( unsigned int device, StreamMode mode,
     }
     break;
   case OUTPUT:
-    pah->s_play = pa_simple_new( NULL, streamName.c_str(), PA_STREAM_PLAYBACK, NULL, "Playback", &ss, NULL, NULL, &error );
+    /* XXX: hard-coded for DCP-o-matic */
+    pa_channel_map map;
+    pa_channel_map_init(&map);
+    /* XXX: need to check 7.1 */
+    map.channels = channels;
+
+    if (channels > 0) {
+      map.map[0] = PA_CHANNEL_POSITION_FRONT_LEFT;
+    }
+    if (channels > 1) {
+      map.map[1] = PA_CHANNEL_POSITION_FRONT_RIGHT;
+    }
+    if (channels > 2) {
+      map.map[2] = PA_CHANNEL_POSITION_FRONT_CENTER;
+    }
+    if (channels > 3) {
+      map.map[3] = PA_CHANNEL_POSITION_LFE;
+    }
+    if (channels > 4) {
+      map.map[4] = PA_CHANNEL_POSITION_REAR_LEFT;
+    }
+    if (channels > 5) {
+      map.map[5] = PA_CHANNEL_POSITION_REAR_RIGHT;
+    }
+    if (channels > 6) {
+      map.map[6] = PA_CHANNEL_POSITION_SIDE_LEFT;
+    }
+    if (channels > 7) {
+      map.map[7] = PA_CHANNEL_POSITION_SIDE_RIGHT;
+    }
+
+    pah->s_play = pa_simple_new( NULL, streamName.c_str(), PA_STREAM_PLAYBACK, NULL, "Playback", &ss, &map, NULL, &error );
     if ( !pah->s_play ) {
       errorText_ = "RtApiPulse::probeDeviceOpen: error connecting output to PulseAudio server.";
       goto error;