/* * 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 * 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 WEBRTC_MODULES_AUDIO_CONFERENCE_MIXER_INTERFACE_AUDIO_CONFERENCE_MIXER_DEFINES_H_ #define WEBRTC_MODULES_AUDIO_CONFERENCE_MIXER_INTERFACE_AUDIO_CONFERENCE_MIXER_DEFINES_H_ #include "map_wrapper.h" #include "module_common_types.h" #include "typedefs.h" namespace webrtc { class MixHistory; // A callback class that all mixer participants must inherit from/implement. class MixerParticipant { public: // The implementation of this function should update audioFrame with new // audio every time it's called. virtual WebRtc_Word32 GetAudioFrame(const WebRtc_Word32 id, AudioFrame& audioFrame) = 0; // mixed will be set to true if the participant was mixed this mix iteration WebRtc_Word32 IsMixed(bool& mixed) const; // This function specifies the sampling frequency needed for the AudioFrame // for future GetAudioFrame(..) calls. virtual WebRtc_Word32 NeededFrequency(const WebRtc_Word32 id) = 0; MixHistory* _mixHistory; protected: MixerParticipant(); virtual ~MixerParticipant(); }; // Container struct for participant statistics. struct ParticipantStatistics { WebRtc_Word32 participant; WebRtc_Word32 level; }; class AudioMixerStatusReceiver { public: // Callback function that provides an array of ParticipantStatistics for the // participants that were mixed last mix iteration. virtual void MixedParticipants( const WebRtc_Word32 id, const ParticipantStatistics* participantStatistics, const WebRtc_UWord32 size) = 0; // Callback function that provides an array of the ParticipantStatistics for // the participants that had a positiv VAD last mix iteration. virtual void VADPositiveParticipants( const WebRtc_Word32 id, const ParticipantStatistics* participantStatistics, const WebRtc_UWord32 size) = 0; // Callback function that provides the audio level of the mixed audio frame // from the last mix iteration. virtual void MixedAudioLevel( const WebRtc_Word32 id, const WebRtc_UWord32 level) = 0; protected: AudioMixerStatusReceiver() {} virtual ~AudioMixerStatusReceiver() {} }; class AudioMixerOutputReceiver { public: // This callback function provides the mixed audio for this mix iteration. // Note that uniqueAudioFrames is an array of AudioFrame pointers with the // size according to the size parameter. virtual void NewMixedAudio(const WebRtc_Word32 id, const AudioFrame& generalAudioFrame, const AudioFrame** uniqueAudioFrames, const WebRtc_UWord32 size) = 0; protected: AudioMixerOutputReceiver() {} virtual ~AudioMixerOutputReceiver() {} }; class AudioRelayReceiver { public: // This callback function provides the mix decision for this mix iteration. // mixerList is a list of elements of the type // [int,MixerParticipant*] virtual void NewAudioToRelay(const WebRtc_Word32 id, const MapWrapper& mixerList) = 0; protected: AudioRelayReceiver() {} virtual ~AudioRelayReceiver() {} }; } // namespace webrtc #endif // WEBRTC_MODULES_AUDIO_CONFERENCE_MIXER_INTERFACE_AUDIO_CONFERENCE_MIXER_DEFINES_H_