Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(306)

Unified Diff: media/base/channel_mixer.cc

Issue 12662038: Revert 187936 "Pass more detailed audio hardware configuration i..." (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1440/src/
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/base/channel_mixer.h ('k') | media/base/channel_mixer_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/channel_mixer.cc
===================================================================
--- media/base/channel_mixer.cc (revision 189875)
+++ media/base/channel_mixer.cc (working copy)
@@ -11,7 +11,6 @@
#include <cmath>
#include "base/logging.h"
-#include "media/audio/audio_parameters.h"
#include "media/base/audio_bus.h"
#include "media/base/vector_math.h"
@@ -21,11 +20,14 @@
// value for stereo -> mono and mono -> stereo mixes.
static const float kEqualPowerScale = static_cast<float>(M_SQRT1_2);
-static void ValidateLayout(ChannelLayout layout) {
+static int ValidateLayout(ChannelLayout layout) {
CHECK_NE(layout, CHANNEL_LAYOUT_NONE);
CHECK_NE(layout, CHANNEL_LAYOUT_MAX);
+
+ // TODO(dalecurtis, crogers): We will eventually handle unsupported layouts by
+ // simply copying the input channels to the output channels, similar to if the
+ // user requests identical input and output layouts today.
CHECK_NE(layout, CHANNEL_LAYOUT_UNSUPPORTED);
- CHECK_NE(layout, CHANNEL_LAYOUT_DISCRETE);
// Verify there's at least one channel. Should always be true here by virtue
// of not being one of the invalid layouts, but lets double check to be sure.
@@ -50,60 +52,24 @@
DCHECK_EQ(layout, CHANNEL_LAYOUT_MONO);
}
- return;
+ return channel_count;
}
-ChannelMixer::ChannelMixer(ChannelLayout input_layout,
- ChannelLayout output_layout) {
- Initialize(input_layout,
- ChannelLayoutToChannelCount(input_layout),
- output_layout,
- ChannelLayoutToChannelCount(output_layout));
-}
-
-ChannelMixer::ChannelMixer(
- const AudioParameters& input, const AudioParameters& output) {
- Initialize(input.channel_layout(),
- input.channels(),
- output.channel_layout(),
- output.channels());
-}
-
-void ChannelMixer::Initialize(
- ChannelLayout input_layout, int input_channels,
- ChannelLayout output_layout, int output_channels) {
- input_layout_ = input_layout;
- output_layout_ = output_layout;
- remapping_ = false;
-
+ChannelMixer::ChannelMixer(ChannelLayout input, ChannelLayout output)
+ : input_layout_(input),
+ output_layout_(output),
+ remapping_(false) {
// Stereo down mix should never be the output layout.
CHECK_NE(output_layout_, CHANNEL_LAYOUT_STEREO_DOWNMIX);
- if (input_layout_ != CHANNEL_LAYOUT_DISCRETE)
- ValidateLayout(input_layout_);
- if (output_layout_ != CHANNEL_LAYOUT_DISCRETE)
- ValidateLayout(output_layout_);
+ int input_channels = ValidateLayout(input_layout_);
+ int output_channels = ValidateLayout(output_layout_);
// Size out the initial matrix.
matrix_.reserve(output_channels);
for (int output_ch = 0; output_ch < output_channels; ++output_ch)
matrix_.push_back(std::vector<float>(input_channels, 0));
- // First check for discrete case.
- if (input_layout_ == CHANNEL_LAYOUT_DISCRETE ||
- output_layout_ == CHANNEL_LAYOUT_DISCRETE) {
- // If the number of input channels is more than output channels, then
- // copy as many as we can then drop the remaining input channels.
- // If the number of input channels is less than output channels, then
- // copy them all, then zero out the remaining output channels.
- int passthrough_channels = std::min(input_channels, output_channels);
- for (int i = 0; i < passthrough_channels; ++i)
- matrix_[i][i] = 1;
-
- remapping_ = true;
- return;
- }
-
// Route matching channels and figure out which ones aren't accounted for.
for (Channels ch = LEFT; ch < CHANNELS_MAX;
ch = static_cast<Channels>(ch + 1)) {
@@ -136,8 +102,7 @@
// When down mixing to mono from stereo, we need to be careful of full scale
// stereo mixes. Scaling by 1 / sqrt(2) here will likely lead to clipping
// so we use 1 / 2 instead.
- float scale =
- (output_layout_ == CHANNEL_LAYOUT_MONO && input_channels == 2) ?
+ float scale = (output == CHANNEL_LAYOUT_MONO && input_channels == 2) ?
0.5 : kEqualPowerScale;
Mix(LEFT, CENTER, scale);
Mix(RIGHT, CENTER, scale);
@@ -146,8 +111,7 @@
// Mix center into front LR.
if (IsUnaccounted(CENTER)) {
// When up mixing from mono, just do a copy to front LR.
- float scale =
- (input_layout_ == CHANNEL_LAYOUT_MONO) ? 1 : kEqualPowerScale;
+ float scale = (input == CHANNEL_LAYOUT_MONO) ? 1 : kEqualPowerScale;
MixWithoutAccounting(CENTER, LEFT, scale);
Mix(CENTER, RIGHT, scale);
}
@@ -164,7 +128,7 @@
// Mix back LR into back center.
Mix(BACK_LEFT, BACK_CENTER, kEqualPowerScale);
Mix(BACK_RIGHT, BACK_CENTER, kEqualPowerScale);
- } else if (output_layout_ > CHANNEL_LAYOUT_MONO) {
+ } else if (output > CHANNEL_LAYOUT_MONO) {
// Mix back LR into front LR.
Mix(BACK_LEFT, LEFT, kEqualPowerScale);
Mix(BACK_RIGHT, RIGHT, kEqualPowerScale);
@@ -187,7 +151,7 @@
// Mix side LR into back center.
Mix(SIDE_LEFT, BACK_CENTER, kEqualPowerScale);
Mix(SIDE_RIGHT, BACK_CENTER, kEqualPowerScale);
- } else if (output_layout_ > CHANNEL_LAYOUT_MONO) {
+ } else if (output > CHANNEL_LAYOUT_MONO) {
// Mix side LR into front LR.
Mix(SIDE_LEFT, LEFT, kEqualPowerScale);
Mix(SIDE_RIGHT, RIGHT, kEqualPowerScale);
@@ -208,7 +172,7 @@
// Mix back center into side LR.
MixWithoutAccounting(BACK_CENTER, SIDE_LEFT, kEqualPowerScale);
Mix(BACK_CENTER, SIDE_RIGHT, kEqualPowerScale);
- } else if (output_layout_ > CHANNEL_LAYOUT_MONO) {
+ } else if (output > CHANNEL_LAYOUT_MONO) {
// Mix back center into front LR.
// TODO(dalecurtis): Not sure about these values?
MixWithoutAccounting(BACK_CENTER, LEFT, kEqualPowerScale);
« no previous file with comments | « media/base/channel_mixer.h ('k') | media/base/channel_mixer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698