12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /*
- * Copyright (c) 2019 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
- #ifndef AUDIO_UTILITY_CHANNEL_MIXING_MATRIX_H_
- #define AUDIO_UTILITY_CHANNEL_MIXING_MATRIX_H_
- #include <vector>
- #include "api/audio/channel_layout.h"
- namespace webrtc {
- class ChannelMixingMatrix {
- public:
- ChannelMixingMatrix(ChannelLayout input_layout,
- int input_channels,
- ChannelLayout output_layout,
- int output_channels);
- ~ChannelMixingMatrix();
- // Create the transformation matrix of input channels to output channels.
- // Updates the empty matrix with the transformation, and returns true
- // if the transformation is just a remapping of channels (no mixing).
- // The size of |matrix| is |output_channels| x |input_channels|, i.e., the
- // number of rows equals the number of output channels and the number of
- // columns corresponds to the number of input channels.
- // This file is derived from Chromium's media/base/channel_mixing_matrix.h.
- bool CreateTransformationMatrix(std::vector<std::vector<float>>* matrix);
- private:
- const bool use_voip_channel_mapping_adjustments_;
- // Result transformation of input channels to output channels
- std::vector<std::vector<float>>* matrix_;
- // Input and output channel layout provided during construction.
- ChannelLayout input_layout_;
- int input_channels_;
- ChannelLayout output_layout_;
- int output_channels_;
- // Helper variable for tracking which inputs are currently unaccounted,
- // should be empty after construction completes.
- std::vector<Channels> unaccounted_inputs_;
- // Helper methods for managing unaccounted input channels.
- void AccountFor(Channels ch);
- bool IsUnaccounted(Channels ch) const;
- // Helper methods for checking if |ch| exists in either |input_layout_| or
- // |output_layout_| respectively.
- bool HasInputChannel(Channels ch) const;
- bool HasOutputChannel(Channels ch) const;
- // Helper methods for updating |matrix_| with the proper value for
- // mixing |input_ch| into |output_ch|. MixWithoutAccounting() does not
- // remove the channel from |unaccounted_inputs_|.
- void Mix(Channels input_ch, Channels output_ch, float scale);
- void MixWithoutAccounting(Channels input_ch, Channels output_ch, float scale);
- // Delete the copy constructor and assignment operator.
- ChannelMixingMatrix(const ChannelMixingMatrix& other) = delete;
- ChannelMixingMatrix& operator=(const ChannelMixingMatrix& other) = delete;
- };
- } // namespace webrtc
- #endif // AUDIO_UTILITY_CHANNEL_MIXING_MATRIX_H_
|