105 lines
3.6 KiB
C
105 lines
3.6 KiB
C
|
/*
|
||
|
* 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_
|