diff options
Diffstat (limited to 'chromium/media/audio/cras/cras_unified.cc')
-rw-r--r-- | chromium/media/audio/cras/cras_unified.cc | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/chromium/media/audio/cras/cras_unified.cc b/chromium/media/audio/cras/cras_unified.cc index a7741864b31..c85cf59dd5f 100644 --- a/chromium/media/audio/cras/cras_unified.cc +++ b/chromium/media/audio/cras/cras_unified.cc @@ -8,9 +8,8 @@ #include "base/command_line.h" #include "base/logging.h" -#include "media/audio/audio_util.h" +#include "media/audio/alsa/alsa_util.h" #include "media/audio/cras/audio_manager_cras.h" -#include "media/audio/linux/alsa_util.h" namespace media { @@ -162,6 +161,23 @@ void CrasUnifiedStream::Close() { void CrasUnifiedStream::Start(AudioSourceCallback* callback) { CHECK(callback); + + // Channel map to CRAS_CHANNEL, values in the same order of + // corresponding source in Chromium defined Channels. + static const int kChannelMap[] = { + CRAS_CH_FL, + CRAS_CH_FR, + CRAS_CH_FC, + CRAS_CH_LFE, + CRAS_CH_RL, + CRAS_CH_RR, + CRAS_CH_FLC, + CRAS_CH_FRC, + CRAS_CH_RC, + CRAS_CH_SL, + CRAS_CH_SR + }; + source_callback_ = callback; // Only start if we can enter the playing state. @@ -180,6 +196,22 @@ void CrasUnifiedStream::Start(AudioSourceCallback* callback) { return; } + // Initialize channel layout to all -1 to indicate that none of + // the channels is set in the layout. + int8 layout[CRAS_CH_MAX] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; + + // Converts to CRAS defined channels. ChannelOrder will return -1 + // for channels that does not present in params_.channel_layout(). + for (size_t i = 0; i < arraysize(kChannelMap); ++i) + layout[kChannelMap[i]] = ChannelOrder(params_.channel_layout(), + static_cast<Channels>(i)); + + if (cras_audio_format_set_channel_layout(audio_format, layout)) { + LOG(WARNING) << "Error setting channel layout."; + callback->OnError(this); + return; + } + cras_stream_params* stream_params = cras_client_unified_params_create( stream_direction_, params_.frames_per_buffer(), |