diff options
author | Jörg Müller <nexyon@gmail.com> | 2019-11-17 11:02:18 +0300 |
---|---|---|
committer | Jörg Müller <nexyon@gmail.com> | 2019-11-17 11:02:18 +0300 |
commit | fb1cbbaf4677e871ed551a7b7858937721e29016 (patch) | |
tree | a683c06557408cf1f2603b14644c5860f1063613 /extern/audaspace | |
parent | e385bdb228acd3a4c64a886e6fee39f5fcb3cebf (diff) |
Fix T71322: Crash in Audaspace with some video file
Getting upstream audaspace fixes for audio files with more than 8
channels.
Diffstat (limited to 'extern/audaspace')
-rw-r--r-- | extern/audaspace/plugins/openal/OpenALDevice.cpp | 3 | ||||
-rw-r--r-- | extern/audaspace/src/respec/ChannelMapperReader.cpp | 19 |
2 files changed, 13 insertions, 9 deletions
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; |