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 f84fe8cfc75006e69cc9d2ace52481974728862e..1744fd5ed5d750e419704c5930885116b9d1f4bf 100644 |
--- a/webrtc/modules/audio_mixer/audio_mixer.h |
+++ b/webrtc/modules/audio_mixer/audio_mixer.h |
@@ -13,7 +13,6 @@ |
#include <memory> |
-#include "webrtc/modules/audio_mixer/audio_mixer_defines.h" |
#include "webrtc/modules/include/module.h" |
#include "webrtc/modules/include/module_common_types.h" |
@@ -30,21 +29,52 @@ class AudioMixer { |
kDefaultFrequency = kWbInHz |
}; |
+ // A callback class that all mixer participants must inherit from/implement. |
+ class Source { |
+ public: |
+ enum class AudioFrameInfo { |
+ kNormal, // The samples in audio_frame are valid and should be used. |
+ kMuted, // The samples in audio_frame should not be used, but should be |
+ // implicitly interpreted as zero. Other fields in audio_frame |
+ // may be read and should contain meaningful values. |
+ kError // audio_frame will not be used. |
+ }; |
+ |
+ struct AudioFrameWithInfo { |
+ AudioFrame* audio_frame; |
+ AudioFrameInfo audio_frame_info; |
+ }; |
+ |
+ // The implementation of GetAudioFrameWithInfo should update |
+ // audio_frame with new audio every time it's called. Implementing |
+ // classes are allowed to return the same AudioFrame pointer on |
+ // different calls. The pointer must stay valid until the next |
+ // mixing call or until this audio source is disconnected from the |
+ // mixer. The mixer may modify the contents of the passed |
+ // AudioFrame pointer at any time until the next call to |
+ // GetAudioFrameWithInfo, or until the source is removed from the |
+ // mixer. |
+ virtual AudioFrameWithInfo GetAudioFrameWithInfo(int32_t id, |
+ int sample_rate_hz) = 0; |
+ |
+ protected: |
+ virtual ~Source() {} |
+ }; |
+ |
// 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; |
+ virtual int32_t SetMixabilityStatus(Source* 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; |
+ virtual bool MixabilityStatus(const Source& 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, |
+ virtual int32_t SetAnonymousMixabilityStatus(Source* audio_source, |
bool mixable) = 0; |
// Performs mixing by asking registered audio sources for audio. The |
@@ -56,8 +86,7 @@ class AudioMixer { |
AudioFrame* audio_frame_for_mixing) = 0; |
// Returns true if the audio source is mixed anonymously. |
- virtual bool AnonymousMixabilityStatus( |
- const MixerAudioSource& audio_source) const = 0; |
+ virtual bool AnonymousMixabilityStatus(const Source& audio_source) const = 0; |
// Output level functions for VoEVolumeControl. Return value |
// between 0 and 9 is returned by voe::AudioLevel. |