| Index: media/audio/mac/audio_output_mac.cc
|
| diff --git a/media/audio/mac/audio_output_mac.cc b/media/audio/mac/audio_output_mac.cc
|
| index 0a0c321d33371bf2e076c497635088db8b9fe46c..32fff73e0d919db7de989841a7c1df86aee31bbe 100644
|
| --- a/media/audio/mac/audio_output_mac.cc
|
| +++ b/media/audio/mac/audio_output_mac.cc
|
| @@ -138,8 +138,9 @@ bool PCMQueueOutAudioOutputStream::Open() {
|
| return false;
|
| }
|
|
|
| - num_core_channels_ =
|
| - static_cast<int>(core_channel_layout->mNumberChannelDescriptions);
|
| + num_core_channels_ = std::min(
|
| + static_cast<int>(CHANNELS_MAX),
|
| + static_cast<int>(core_channel_layout->mNumberChannelDescriptions));
|
| if (num_core_channels_ == 2 &&
|
| ChannelLayoutToChannelCount(source_layout_) > 2) {
|
| should_down_mix_ = true;
|
| @@ -190,47 +191,47 @@ bool PCMQueueOutAudioOutputStream::Open() {
|
| switch (label) {
|
| case kAudioChannelLabel_Left:
|
| core_channel_orderings_[LEFT] = i;
|
| - channel_remap_[i] = kChannelOrderings[source_layout_][LEFT];
|
| + channel_remap_[i] = ChannelOrder(source_layout_, LEFT);
|
| break;
|
| case kAudioChannelLabel_Right:
|
| core_channel_orderings_[RIGHT] = i;
|
| - channel_remap_[i] = kChannelOrderings[source_layout_][RIGHT];
|
| + channel_remap_[i] = ChannelOrder(source_layout_, RIGHT);
|
| break;
|
| case kAudioChannelLabel_Center:
|
| core_channel_orderings_[CENTER] = i;
|
| - channel_remap_[i] = kChannelOrderings[source_layout_][CENTER];
|
| + channel_remap_[i] = ChannelOrder(source_layout_, CENTER);
|
| break;
|
| case kAudioChannelLabel_LFEScreen:
|
| core_channel_orderings_[LFE] = i;
|
| - channel_remap_[i] = kChannelOrderings[source_layout_][LFE];
|
| + channel_remap_[i] = ChannelOrder(source_layout_, LFE);
|
| break;
|
| case kAudioChannelLabel_LeftSurround:
|
| core_channel_orderings_[SIDE_LEFT] = i;
|
| - channel_remap_[i] = kChannelOrderings[source_layout_][SIDE_LEFT];
|
| + channel_remap_[i] = ChannelOrder(source_layout_, SIDE_LEFT);
|
| break;
|
| case kAudioChannelLabel_RightSurround:
|
| core_channel_orderings_[SIDE_RIGHT] = i;
|
| - channel_remap_[i] = kChannelOrderings[source_layout_][SIDE_RIGHT];
|
| + channel_remap_[i] = ChannelOrder(source_layout_, SIDE_RIGHT);
|
| break;
|
| case kAudioChannelLabel_LeftCenter:
|
| core_channel_orderings_[LEFT_OF_CENTER] = i;
|
| - channel_remap_[i] = kChannelOrderings[source_layout_][LEFT_OF_CENTER];
|
| + channel_remap_[i] = ChannelOrder(source_layout_, LEFT_OF_CENTER);
|
| break;
|
| case kAudioChannelLabel_RightCenter:
|
| core_channel_orderings_[RIGHT_OF_CENTER] = i;
|
| - channel_remap_[i] = kChannelOrderings[source_layout_][RIGHT_OF_CENTER];
|
| + channel_remap_[i] = ChannelOrder(source_layout_, RIGHT_OF_CENTER);
|
| break;
|
| case kAudioChannelLabel_CenterSurround:
|
| core_channel_orderings_[BACK_CENTER] = i;
|
| - channel_remap_[i] = kChannelOrderings[source_layout_][BACK_CENTER];
|
| + channel_remap_[i] = ChannelOrder(source_layout_, BACK_CENTER);
|
| break;
|
| case kAudioChannelLabel_RearSurroundLeft:
|
| core_channel_orderings_[BACK_LEFT] = i;
|
| - channel_remap_[i] = kChannelOrderings[source_layout_][BACK_LEFT];
|
| + channel_remap_[i] = ChannelOrder(source_layout_, BACK_LEFT);
|
| break;
|
| case kAudioChannelLabel_RearSurroundRight:
|
| core_channel_orderings_[BACK_RIGHT] = i;
|
| - channel_remap_[i] = kChannelOrderings[source_layout_][BACK_RIGHT];
|
| + channel_remap_[i] = ChannelOrder(source_layout_, BACK_RIGHT);
|
| break;
|
| default:
|
| DLOG(WARNING) << "Channel label not supported";
|
| @@ -272,7 +273,8 @@ bool PCMQueueOutAudioOutputStream::Open() {
|
| // Check if we will need to swizzle from source to device layout (maybe not!).
|
| should_swizzle_ = false;
|
| for (int i = 0; i < num_core_channels_; ++i) {
|
| - if (kChannelOrderings[source_layout_][i] != core_channel_orderings_[i]) {
|
| + if (ChannelOrder(source_layout_, static_cast<Channels>(i)) !=
|
| + core_channel_orderings_[i]) {
|
| should_swizzle_ = true;
|
| break;
|
| }
|
| @@ -359,10 +361,10 @@ bool PCMQueueOutAudioOutputStream::CheckForAdjustedLayout(
|
| Channels output_channel) {
|
| if (core_channel_orderings_[output_channel] > kEmptyChannel &&
|
| core_channel_orderings_[input_channel] == kEmptyChannel &&
|
| - kChannelOrderings[source_layout_][input_channel] > kEmptyChannel &&
|
| - kChannelOrderings[source_layout_][output_channel] == kEmptyChannel) {
|
| + ChannelOrder(source_layout_, input_channel) > kEmptyChannel &&
|
| + ChannelOrder(source_layout_, output_channel) == kEmptyChannel) {
|
| channel_remap_[core_channel_orderings_[output_channel]] =
|
| - kChannelOrderings[source_layout_][input_channel];
|
| + ChannelOrder(source_layout_, input_channel);
|
| return true;
|
| }
|
| return false;
|
|
|