Make Atmos content work more like other content. Now its MXFs
[dcpomatic.git] / src / lib / ffmpeg_encoder.cc
index 61e489f071c112e6d092438430ba919e83654a2d..ee49a06461133e8d57dece989e5afb4572cdbc7a 100644 (file)
@@ -104,12 +104,24 @@ FFmpegEncoder::FFmpegEncoder (
                map = AudioMapping (ch, 2);
                float const overall_gain = 2 / (4 + sqrt(2));
                float const minus_3dB = 1 / sqrt(2);
-               map.set (dcp::LEFT,   0, overall_gain);
-               map.set (dcp::RIGHT,  1, overall_gain);
-               map.set (dcp::CENTRE, 0, overall_gain * minus_3dB);
-               map.set (dcp::CENTRE, 1, overall_gain * minus_3dB);
-               map.set (dcp::LS,     0, overall_gain);
-               map.set (dcp::RS,     1, overall_gain);
+               if (ch == 2) {
+                       map.set (dcp::LEFT, 0, 1);
+                       map.set (dcp::RIGHT, 1, 1);
+               } else if (ch == 4) {
+                       map.set (dcp::LEFT,   0, overall_gain);
+                       map.set (dcp::RIGHT,  1, overall_gain);
+                       map.set (dcp::CENTRE, 0, overall_gain * minus_3dB);
+                       map.set (dcp::CENTRE, 1, overall_gain * minus_3dB);
+                       map.set (dcp::LS,     0, overall_gain);
+               } else if (ch >= 6) {
+                       map.set (dcp::LEFT,   0, overall_gain);
+                       map.set (dcp::RIGHT,  1, overall_gain);
+                       map.set (dcp::CENTRE, 0, overall_gain * minus_3dB);
+                       map.set (dcp::CENTRE, 1, overall_gain * minus_3dB);
+                       map.set (dcp::LS,     0, overall_gain);
+                       map.set (dcp::RS,     1, overall_gain);
+               }
+               /* XXX: maybe we should do something better for >6 channel DCPs */
        } else {
                _output_audio_channels = ch;
                map = AudioMapping (ch, ch);