Index: webrtc/modules/audio_mixer/audio_mixer.h |
diff --git a/webrtc/modules/audio_mixer/audio_mixer.h b/webrtc/modules/audio_mixer/audio_mixer.h |
index f422f935490b102056ca3169e53457935b77599f..080fc141d87e1d9ee82e563bf3ea9104b52e7c6e 100644 |
--- a/webrtc/modules/audio_mixer/audio_mixer.h |
+++ b/webrtc/modules/audio_mixer/audio_mixer.h |
@@ -1,5 +1,5 @@ |
/* |
- * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
+ * Copyright (c) 2011 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 |
@@ -13,108 +13,64 @@ |
#include <memory> |
-#include "webrtc/base/criticalsection.h" |
-#include "webrtc/common_audio/resampler/include/push_resampler.h" |
-#include "webrtc/common_types.h" |
-#include "webrtc/modules/audio_mixer/new_audio_conference_mixer.h" |
#include "webrtc/modules/audio_mixer/audio_mixer_defines.h" |
-#include "webrtc/modules/utility/include/file_recorder.h" |
-#include "webrtc/voice_engine/level_indicator.h" |
-#include "webrtc/voice_engine/voice_engine_defines.h" |
+#include "webrtc/modules/include/module.h" |
+#include "webrtc/modules/include/module_common_types.h" |
namespace webrtc { |
+class MixerAudioSource; |
-class AudioProcessing; |
-class FileWrapper; |
-class VoEMediaProcess; |
- |
-namespace voe { |
-class Statistics; |
- |
-// Note: this class is in the process of being rewritten and merged |
-// with AudioConferenceMixer. Expect inheritance chains to be changed, |
-// member functions removed or renamed. |
-class AudioMixer : public FileCallback { |
+class AudioMixer { |
public: |
- static int32_t Create(AudioMixer*& mixer, uint32_t instanceId); // NOLINT |
- |
- static void Destroy(AudioMixer*& mixer); // NOLINT |
- |
- int32_t SetEngineInformation(Statistics& engineStatistics); // NOLINT |
- |
- int32_t SetAudioProcessingModule(AudioProcessing* audioProcessingModule); |
- |
- // VoEExternalMedia |
- int RegisterExternalMediaProcessing(VoEMediaProcess& // NOLINT |
- proccess_object); |
- |
- int DeRegisterExternalMediaProcessing(); |
- |
- int32_t DoOperationsOnCombinedSignal(bool feed_data_to_apm); |
- |
- int32_t SetMixabilityStatus(MixerAudioSource& audio_source, // NOLINT |
- bool mixable); |
- |
- int32_t SetAnonymousMixabilityStatus( |
- MixerAudioSource& audio_source, // NOLINT |
- bool mixable); |
- |
- int GetMixedAudio(int sample_rate_hz, |
- size_t num_channels, |
- AudioFrame* audioFrame); |
- |
- // VoEVolumeControl |
- int GetSpeechOutputLevel(uint32_t& level); // NOLINT |
- |
- int GetSpeechOutputLevelFullRange(uint32_t& level); // NOLINT |
- |
- int SetOutputVolumePan(float left, float right); |
- |
- int GetOutputVolumePan(float& left, float& right); // NOLINT |
- |
- // VoEFile |
- int StartRecordingPlayout(const char* fileName, const CodecInst* codecInst); |
- |
- int StartRecordingPlayout(OutStream* stream, const CodecInst* codecInst); |
- int StopRecordingPlayout(); |
- |
- virtual ~AudioMixer(); |
- |
- // For file recording |
- void PlayNotification(int32_t id, uint32_t durationMs); |
- |
- void RecordNotification(int32_t id, uint32_t durationMs); |
- |
- void PlayFileEnded(int32_t id); |
- void RecordFileEnded(int32_t id); |
- |
- private: |
- explicit AudioMixer(uint32_t instanceId); |
- |
- // uses |
- Statistics* _engineStatisticsPtr; |
- AudioProcessing* _audioProcessingModulePtr; |
- |
- rtc::CriticalSection _callbackCritSect; |
- // protect the _outputFileRecorderPtr and _outputFileRecording |
- rtc::CriticalSection _fileCritSect; |
- NewAudioConferenceMixer& _mixerModule; |
- AudioFrame _audioFrame; |
- // Converts mixed audio to the audio processing rate. |
- PushResampler<int16_t> audioproc_resampler_; |
- AudioLevel _audioLevel; // measures audio level for the combined signal |
- int _instanceId; |
- VoEMediaProcess* _externalMediaCallbackPtr; |
- bool _externalMedia; |
- float _panLeft; |
- float _panRight; |
- int _mixingFrequencyHz; |
- std::unique_ptr<FileRecorder> _outputFileRecorderPtr; |
- bool _outputFileRecording; |
+ static const int kMaximumAmountOfMixedAudioSources = 3; |
+ enum Frequency { |
+ kNbInHz = 8000, |
+ kWbInHz = 16000, |
+ kSwbInHz = 32000, |
+ kFbInHz = 48000, |
+ kLowestPossible = -1, |
+ kDefaultFrequency = kWbInHz |
+ }; |
+ |
+ // Factory method. Constructor disabled. |
+ static std::unique_ptr<AudioMixer> Create(int id); |
+ virtual ~AudioMixer() {} |
+ |
+ // Add/remove audio sources as candidates for mixing. |
+ virtual int32_t SetMixabilityStatus(MixerAudioSource* audio_source, |
+ bool mixable) = 0; |
+ // Returns true if an audio source is a candidate for mixing. |
+ virtual bool MixabilityStatus(const MixerAudioSource& audio_source) const = 0; |
+ |
+ // Inform the mixer that the audio source should always be mixed and not |
+ // count toward the number of mixed audio sources. Note that an audio source |
+ // must have been added to the mixer (by calling SetMixabilityStatus()) |
+ // before this function can be successfully called. |
+ virtual int32_t SetAnonymousMixabilityStatus(MixerAudioSource* audio_source, |
+ bool mixable) = 0; |
+ |
+ // Performs mixing by asking registered audio sources for audio. The |
+ // mixed result is placed in the provided AudioFrame. Can only be |
+ // called from a single thread. The rate and channels arguments |
+ // specify the rate and number of channels of the mix result. |
+ virtual void Mix(int sample_rate, |
+ size_t number_of_channels, |
+ AudioFrame* audio_frame_for_mixing) = 0; |
+ |
+ // Returns true if the audio source is mixed anonymously. |
+ virtual bool AnonymousMixabilityStatus( |
+ const MixerAudioSource& audio_source) const = 0; |
+ |
+ // Output level functions for VoEVolumeControl. Return value |
+ // between 0 and 9 is returned by voe::AudioLevel. |
+ virtual int GetOutputAudioLevel() = 0; |
+ |
+ // Return value between 0 and 0x7fff is returned by voe::AudioLevel. |
+ virtual int GetOutputAudioLevelFullRange() = 0; |
+ |
+ protected: |
+ AudioMixer() {} |
}; |
- |
-} // namespace voe |
- |
} // namespace webrtc |
#endif // WEBRTC_MODULES_AUDIO_MIXER_AUDIO_MIXER_H_ |