| Index: media/audio/cras/cras_input.cc
|
| diff --git a/media/audio/cras/cras_input.cc b/media/audio/cras/cras_input.cc
|
| index afdabb21d1feb5a8fe50c419aca0952138b841c7..0b8644603f8996e670b988c282a1b234e4062ee0 100644
|
| --- a/media/audio/cras/cras_input.cc
|
| +++ b/media/audio/cras/cras_input.cc
|
| @@ -102,6 +102,24 @@ void CrasInputStream::Start(AudioInputCallback* callback) {
|
| DCHECK(client_);
|
| DCHECK(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
|
| + };
|
| + COMPILE_ASSERT(arraysize(kChannelMap) == CHANNELS_MAX + 1,
|
| + channel_map_size_do_not_match);
|
| +
|
| // If already playing, stop before re-starting.
|
| if (started_)
|
| return;
|
| @@ -123,6 +141,24 @@ void CrasInputStream::Start(AudioInputCallback* 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];
|
| + for (size_t i = 0; i < arraysize(layout); ++i)
|
| + layout[i] = -1;
|
| +
|
| + // Converts to CRAS defined channels. ChannelOrder will return -1
|
| + // for channels that are 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) != 0) {
|
| + DLOG(WARNING) << "Error setting channel layout.";
|
| + callback->OnError(this);
|
| + return;
|
| + }
|
| +
|
| unsigned int frames_per_packet = params_.frames_per_buffer();
|
| cras_stream_params* stream_params = cras_client_stream_params_create(
|
| stream_direction_,
|
|
|