summaryrefslogtreecommitdiff
path: root/src/wx
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-05-25 23:30:28 +0000
committerCarl Hetherington <cth@carlh.net>2019-05-25 23:30:28 +0000
commit677eaab5c03e9c614ae2bc417a43bd5c1295bb8d (patch)
tree1f3c192c5f4c48a4b354774f351b7308cfca9021 /src/wx
parent67bd9c7a2fad1568ac10b771a76a601937c20174 (diff)
Fix slightly unbelievable out-of-bounds array access when setting up the audio map for mixdown-to-stereo.v2.14.5
Diffstat (limited to 'src/wx')
-rw-r--r--src/wx/film_viewer.cc28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/wx/film_viewer.cc b/src/wx/film_viewer.cc
index 0fc338247..098fc2598 100644
--- a/src/wx/film_viewer.cc
+++ b/src/wx/film_viewer.cc
@@ -186,14 +186,26 @@ FilmViewer::recreate_butler ()
Map so that Lt = L(-3dB) + Ls(-3dB) + C(-6dB) + Lfe(-10dB)
Rt = R(-3dB) + Rs(-3dB) + C(-6dB) + Lfe(-10dB)
*/
- map.set (dcp::LEFT, 0, 1 / sqrt(2)); // L -> Lt
- map.set (dcp::RIGHT, 1, 1 / sqrt(2)); // R -> Rt
- map.set (dcp::CENTRE, 0, 1 / 2.0); // C -> Lt
- map.set (dcp::CENTRE, 1, 1 / 2.0); // C -> Rt
- map.set (dcp::LFE, 0, 1 / sqrt(10)); // Lfe -> Lt
- map.set (dcp::LFE, 1, 1 / sqrt(10)); // Lfe -> Rt
- map.set (dcp::LS, 0, 1 / sqrt(2)); // Ls -> Lt
- map.set (dcp::RS, 1, 1 / sqrt(2)); // Rs -> Rt
+ if (_film->audio_channels() > 0) {
+ map.set (dcp::LEFT, 0, 1 / sqrt(2)); // L -> Lt
+ }
+ if (_film->audio_channels() > 1) {
+ map.set (dcp::RIGHT, 1, 1 / sqrt(2)); // R -> Rt
+ }
+ if (_film->audio_channels() > 2) {
+ map.set (dcp::CENTRE, 0, 1 / 2.0); // C -> Lt
+ map.set (dcp::CENTRE, 1, 1 / 2.0); // C -> Rt
+ }
+ if (_film->audio_channels() > 3) {
+ map.set (dcp::LFE, 0, 1 / sqrt(10)); // Lfe -> Lt
+ map.set (dcp::LFE, 1, 1 / sqrt(10)); // Lfe -> Rt
+ }
+ if (_film->audio_channels() > 4) {
+ map.set (dcp::LS, 0, 1 / sqrt(2)); // Ls -> Lt
+ }
+ if (_film->audio_channels() > 5) {
+ map.set (dcp::RS, 1, 1 / sqrt(2)); // Rs -> Rt
+ }
}
_butler.reset (new Butler(_player, map, _audio_channels, bind(&PlayerVideo::force, _1, AV_PIX_FMT_RGB24), false, true));