diff options
author | huceke <ebsi4711@gmail.com> | 2013-11-14 05:38:49 -0800 |
---|---|---|
committer | huceke <ebsi4711@gmail.com> | 2013-11-14 05:38:49 -0800 |
commit | 8365d61b0e614ede8ae2b29a22115272dd9062b1 (patch) | |
tree | 6479c960eb31c5fad90f7b55450de4af40fc72d4 | |
parent | ce402c8c274f0f9d2678301a42c8294d499222e7 (diff) | |
parent | 94dc9a195c74054393ed5b1dbaba54dca0208590 (diff) |
Merge pull request #3637 from popcornmix/audio_analog
[rbp/omxplayer] Ignore speaker layout for analogue
-rw-r--r-- | xbmc/cores/omxplayer/OMXAudio.cpp | 8 | ||||
-rw-r--r-- | xbmc/cores/omxplayer/PCMRemap.cpp | 4 | ||||
-rw-r--r-- | xbmc/cores/omxplayer/PCMRemap.h | 2 |
3 files changed, 9 insertions, 5 deletions
diff --git a/xbmc/cores/omxplayer/OMXAudio.cpp b/xbmc/cores/omxplayer/OMXAudio.cpp index e4d725d123..9634c81c32 100644 --- a/xbmc/cores/omxplayer/OMXAudio.cpp +++ b/xbmc/cores/omxplayer/OMXAudio.cpp @@ -423,7 +423,6 @@ bool COMXAudio::Initialize(AEAudioFormat format, OMXClock *clock, CDVDStreamInfo m_InputChannels = count_bits(channelMap); m_format = format; - enum PCMLayout layout = (enum PCMLayout)std::max(0, CSettings::Get().GetInt("audiooutput.channels")-1); if(m_InputChannels == 0) return false; @@ -470,6 +469,11 @@ bool COMXAudio::Initialize(AEAudioFormat format, OMXClock *clock, CDVDStreamInfo { enum PCMChannels inLayout[OMX_AUDIO_MAXCHANNELS]; enum PCMChannels outLayout[OMX_AUDIO_MAXCHANNELS]; + enum PCMLayout layout = (enum PCMLayout)std::max(0, CSettings::Get().GetInt("audiooutput.channels")-1); + // ignore layout setting for analogue + if (CSettings::Get().GetBool("audiooutput.dualaudio") || CSettings::Get().GetString("audiooutput.audiodevice") == "Analogue") + layout = PCM_LAYOUT_2_0; + // force out layout to stereo if input is not multichannel - it gives the receiver a chance to upmix if (channelMap == (AV_CH_FRONT_LEFT | AV_CH_FRONT_RIGHT) || channelMap == AV_CH_FRONT_CENTER) layout = PCM_LAYOUT_2_0; @@ -477,7 +481,7 @@ bool COMXAudio::Initialize(AEAudioFormat format, OMXClock *clock, CDVDStreamInfo m_OutputChannels = BuildChannelMapCEA(outLayout, GetChannelLayout(layout)); CPCMRemap m_remap; m_remap.Reset(); - /*outLayout = */m_remap.SetInputFormat (m_InputChannels, inLayout, CAEUtil::DataFormatToBits(m_format.m_dataFormat) / 8, m_format.m_sampleRate); + /*outLayout = */m_remap.SetInputFormat (m_InputChannels, inLayout, CAEUtil::DataFormatToBits(m_format.m_dataFormat) / 8, m_format.m_sampleRate, layout); m_remap.SetOutputFormat(m_OutputChannels, outLayout); m_remap.GetDownmixMatrix(m_downmix_matrix); m_wave_header.dwChannelMask = channelMap; diff --git a/xbmc/cores/omxplayer/PCMRemap.cpp b/xbmc/cores/omxplayer/PCMRemap.cpp index 68ae12f37e..8f8aed3784 100644 --- a/xbmc/cores/omxplayer/PCMRemap.cpp +++ b/xbmc/cores/omxplayer/PCMRemap.cpp @@ -447,7 +447,7 @@ void CPCMRemap::Reset() } /* sets the input format, and returns the requested channel layout */ -enum PCMChannels *CPCMRemap::SetInputFormat(unsigned int channels, enum PCMChannels *channelMap, unsigned int sampleSize, unsigned int sampleRate) +enum PCMChannels *CPCMRemap::SetInputFormat(unsigned int channels, enum PCMChannels *channelMap, unsigned int sampleSize, unsigned int sampleRate, PCMLayout layout) { m_inChannels = channels; m_inSampleSize = sampleSize; @@ -457,7 +457,7 @@ enum PCMChannels *CPCMRemap::SetInputFormat(unsigned int channels, enum PCMChann memcpy(m_inMap, channelMap, sizeof(enum PCMChannels) * channels); /* get the audio layout, and count the channels in it */ - m_channelLayout = (enum PCMLayout)std::max(0, CSettings::Get().GetInt("audiooutput.channels")-1); + m_channelLayout = layout; if (m_channelLayout >= PCM_MAX_LAYOUT) m_channelLayout = PCM_LAYOUT_2_0; diff --git a/xbmc/cores/omxplayer/PCMRemap.h b/xbmc/cores/omxplayer/PCMRemap.h index bbf8d29b10..d60b04c026 100644 --- a/xbmc/cores/omxplayer/PCMRemap.h +++ b/xbmc/cores/omxplayer/PCMRemap.h @@ -134,7 +134,7 @@ public: ~CPCMRemap(); void Reset(); - enum PCMChannels *SetInputFormat (unsigned int channels, enum PCMChannels *channelMap, unsigned int sampleSize, unsigned int sampleRate); + enum PCMChannels *SetInputFormat (unsigned int channels, enum PCMChannels *channelMap, unsigned int sampleSize, unsigned int sampleRate, PCMLayout layout); void SetOutputFormat(unsigned int channels, enum PCMChannels *channelMap, bool ignoreLayout = false); #if 0 void Remap(void *data, void *out, unsigned int samples, long drc); |