X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;f=xbmc%2Fcores%2FAudioEngine%2FUtils%2FAEChannelInfo.cpp;h=62da9af2edd773e5c52fb37256b7b4032f4922db;hb=7a250645d99d569f31b93a76e86b77b83de933d0;hp=69b37b470be94bc16bd17b71132b5bbea0b4f12c;hpb=32fc7ffcfbb0ffb4fe82a23aca6edd648a4ae1cf;p=vuplus_xbmc diff --git a/xbmc/cores/AudioEngine/Utils/AEChannelInfo.cpp b/xbmc/cores/AudioEngine/Utils/AEChannelInfo.cpp index 69b37b4..62da9af 100644 --- a/xbmc/cores/AudioEngine/Utils/AEChannelInfo.cpp +++ b/xbmc/cores/AudioEngine/Utils/AEChannelInfo.cpp @@ -55,11 +55,13 @@ void CAEChannelInfo::ResolveChannels(const CAEChannelInfo& rhs) bool srcHasSR = false; bool srcHasRL = false; bool srcHasRR = false; + bool srcHasBC = false; bool dstHasSL = false; bool dstHasSR = false; bool dstHasRL = false; bool dstHasRR = false; + bool dstHasBC = false; for (unsigned int c = 0; c < rhs.m_channelCount; ++c) switch(rhs.m_channels[c]) @@ -68,6 +70,7 @@ void CAEChannelInfo::ResolveChannels(const CAEChannelInfo& rhs) case AE_CH_SR: dstHasSR = true; break; case AE_CH_BL: dstHasRL = true; break; case AE_CH_BR: dstHasRR = true; break; + case AE_CH_BC: dstHasBC = true; break; default: break; } @@ -81,6 +84,7 @@ void CAEChannelInfo::ResolveChannels(const CAEChannelInfo& rhs) case AE_CH_SR: srcHasSR = true; break; case AE_CH_BL: srcHasRL = true; break; case AE_CH_BR: srcHasRR = true; break; + case AE_CH_BC: srcHasBC = true; break; default: break; } @@ -107,6 +111,21 @@ void CAEChannelInfo::ResolveChannels(const CAEChannelInfo& rhs) if (srcHasRR && !dstHasRR && dstHasSR) newInfo += AE_CH_SR; + // mix back center if not available in destination layout + // prefer mixing into backs if available + if (srcHasBC && !dstHasBC) + { + if (dstHasRL && !newInfo.HasChannel(AE_CH_BL)) + newInfo += AE_CH_BL; + else if (dstHasSL && !newInfo.HasChannel(AE_CH_SL)) + newInfo += AE_CH_SL; + + if (dstHasRR && !newInfo.HasChannel(AE_CH_BR)) + newInfo += AE_CH_BR; + else if (dstHasSR && !newInfo.HasChannel(AE_CH_SR)) + newInfo += AE_CH_SR; + } + *this = newInfo; }