Line data Source code
1 : /*
2 : * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
3 : *
4 : * Use of this source code is governed by a BSD-style license
5 : * that can be found in the LICENSE file in the root of the source
6 : * tree. An additional intellectual property rights grant can be found
7 : * in the file PATENTS. All contributing project authors may
8 : * be found in the AUTHORS file in the root of the source tree.
9 : */
10 :
11 : #ifndef WEBRTC_MODULES_AUDIO_CONFERENCE_MIXER_INCLUDE_AUDIO_CONFERENCE_MIXER_DEFINES_H_
12 : #define WEBRTC_MODULES_AUDIO_CONFERENCE_MIXER_INCLUDE_AUDIO_CONFERENCE_MIXER_DEFINES_H_
13 :
14 : #include "webrtc/base/checks.h"
15 : #include "webrtc/modules/include/module_common_types.h"
16 : #include "webrtc/typedefs.h"
17 :
18 : namespace webrtc {
19 : class MixHistory;
20 :
21 : // A callback class that all mixer participants must inherit from/implement.
22 : class MixerParticipant
23 : {
24 : public:
25 : // The implementation of this function should update audioFrame with new
26 : // audio every time it's called.
27 : //
28 : // If it returns -1, the frame will not be added to the mix.
29 : //
30 : // NOTE: This function should not be called. It will remain for a short
31 : // time so that subclasses can override it without getting warnings.
32 : // TODO(henrik.lundin) Remove this function.
33 0 : virtual int32_t GetAudioFrame(int32_t id,
34 : AudioFrame* audioFrame) {
35 0 : RTC_CHECK(false);
36 0 : return -1;
37 : }
38 :
39 :
40 : // The implementation of GetAudioFrameWithMuted should update audio_frame
41 : // with new audio every time it's called. The return value will be
42 : // interpreted as follows.
43 : enum class AudioFrameInfo {
44 : kNormal, // The samples in audio_frame are valid and should be used.
45 : kMuted, // The samples in audio_frame should not be used, but should be
46 : // implicitly interpreted as zero. Other fields in audio_frame
47 : // may be read and should contain meaningful values.
48 : kError // audio_frame will not be used.
49 : };
50 :
51 0 : virtual AudioFrameInfo GetAudioFrameWithMuted(int32_t id,
52 : AudioFrame* audio_frame) {
53 0 : return GetAudioFrame(id, audio_frame) == -1 ?
54 : AudioFrameInfo::kError :
55 0 : AudioFrameInfo::kNormal;
56 : }
57 :
58 : // Returns true if the participant was mixed this mix iteration.
59 : bool IsMixed() const;
60 :
61 : // This function specifies the sampling frequency needed for the AudioFrame
62 : // for future GetAudioFrame(..) calls.
63 : virtual int32_t NeededFrequency(int32_t id) const = 0;
64 :
65 : MixHistory* _mixHistory;
66 : protected:
67 : MixerParticipant();
68 : virtual ~MixerParticipant();
69 : };
70 :
71 : class AudioMixerOutputReceiver
72 : {
73 : public:
74 : // This callback function provides the mixed audio for this mix iteration.
75 : // Note that uniqueAudioFrames is an array of AudioFrame pointers with the
76 : // size according to the size parameter.
77 : virtual void NewMixedAudio(const int32_t id,
78 : const AudioFrame& generalAudioFrame,
79 : const AudioFrame** uniqueAudioFrames,
80 : const uint32_t size) = 0;
81 : protected:
82 0 : AudioMixerOutputReceiver() {}
83 0 : virtual ~AudioMixerOutputReceiver() {}
84 : };
85 : } // namespace webrtc
86 :
87 : #endif // WEBRTC_MODULES_AUDIO_CONFERENCE_MIXER_INCLUDE_AUDIO_CONFERENCE_MIXER_DEFINES_H_
|