Commit: fb1cbbaf4677e871ed551a7b7858937721e29016
Author: Jörg Müller
Date:   Sun Nov 17 09:02:18 2019 +0100
Branches: master
https://developer.blender.org/rBfb1cbbaf4677e871ed551a7b7858937721e29016

Fix T71322: Crash in Audaspace with some video file

Getting upstream audaspace fixes for audio files with more than 8
channels.

===================================================================

M       extern/audaspace/plugins/openal/OpenALDevice.cpp
M       extern/audaspace/src/respec/ChannelMapperReader.cpp

===================================================================

diff --git a/extern/audaspace/plugins/openal/OpenALDevice.cpp 
b/extern/audaspace/plugins/openal/OpenALDevice.cpp
index 6ad87c183aa..f41e9c6bef8 100644
--- a/extern/audaspace/plugins/openal/OpenALDevice.cpp
+++ b/extern/audaspace/plugins/openal/OpenALDevice.cpp
@@ -1167,7 +1167,8 @@ OpenALDevice::OpenALDevice(DeviceSpecs specs, int 
buffersize, std::string name)
 
        if((!m_useMC && specs.channels > CHANNELS_STEREO) ||
                        specs.channels == CHANNELS_STEREO_LFE ||
-                       specs.channels == CHANNELS_SURROUND5)
+                       specs.channels == CHANNELS_SURROUND5 ||
+                       specs.channels > CHANNELS_SURROUND71)
                specs.channels = CHANNELS_STEREO;
 
        alGetError();
diff --git a/extern/audaspace/src/respec/ChannelMapperReader.cpp 
b/extern/audaspace/src/respec/ChannelMapperReader.cpp
index 1af5e70bfc8..e0063d5c4a2 100644
--- a/extern/audaspace/src/respec/ChannelMapperReader.cpp
+++ b/extern/audaspace/src/respec/ChannelMapperReader.cpp
@@ -97,12 +97,15 @@ void ChannelMapperReader::calculateMapping()
        for(int i = 0; i < m_source_channels * m_target_channels; i++)
                m_mapping[i] = 0;
 
-       const Channel* source_channels = CHANNEL_MAPS[m_source_channels - 1];
-       const Channel* target_channels = CHANNEL_MAPS[m_target_channels - 1];
+       const Channels source_channel_count = std::min(m_source_channels, 
CHANNELS_SURROUND71);
+       const Channels target_channel_count = std::min(m_target_channels, 
CHANNELS_SURROUND71);
+
+       const Channel* source_channels = CHANNEL_MAPS[source_channel_count - 1];
+       const Channel* target_channels = CHANNEL_MAPS[target_channel_count - 1];
 
        int lfe = -1;
 
-       for(int i = 0; i < m_target_channels; i++)
+       for(int i = 0; i < target_channel_count; i++)
        {
                if(target_channels[i] == CHANNEL_LFE)
                {
@@ -111,16 +114,16 @@ void ChannelMapperReader::calculateMapping()
                }
        }
 
-       const float* source_angles = CHANNEL_ANGLES[m_source_channels - 1];
-       const float* target_angles = CHANNEL_ANGLES[m_target_channels - 1];
+       const float* source_angles = CHANNEL_ANGLES[source_channel_count - 1];
+       const float* target_angles = CHANNEL_ANGLES[target_channel_count - 1];
 
-       if(m_source_channels == CHANNELS_MONO)
+       if(source_channel_count == CHANNELS_MONO)
                source_angles = &m_mono_angle;
 
        int channel_left, channel_right;
        float angle_left, angle_right, angle;
 
-       for(int i = 0; i < m_source_channels; i++)
+       for(int i = 0; i < source_channel_count; i++)
        {
                if(source_channels[i] == CHANNEL_LFE)
                {
@@ -134,7 +137,7 @@ void ChannelMapperReader::calculateMapping()
                angle_left = -2 * M_PI;
                angle_right = 2 * M_PI;
 
-               for(int j = 0; j < m_target_channels; j++)
+               for(int j = 0; j < target_channel_count; j++)
                {
                        if(j == lfe)
                                continue;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to