OpenTera WebRTC API (C++) 1.2.5
AudioSource.h
1 #ifndef OPENTERA_WEBRTC_NATIVE_CLIENT_SOURCES_AUDIO_SOURCE_H
2 #define OPENTERA_WEBRTC_NATIVE_CLIENT_SOURCES_AUDIO_SOURCE_H
3 
4 #include <OpenteraWebrtcNativeClient/Configurations/AudioSourceConfiguration.h>
5 #include <OpenteraWebrtcNativeClient/OpenteraAudioDeviceModule.h>
6 #include <OpenteraWebrtcNativeClient/Utils/ClassMacro.h>
7 
8 #include <api/media_stream_interface.h>
9 #include <api/notifier.h>
10 
11 #include <mutex>
12 #include <set>
13 #include <vector>
14 
15 namespace opentera
16 {
17 
24  class AudioSource : public webrtc::Notifier<webrtc::AudioSourceInterface>
25  {
26  AudioSourceConfiguration m_configuration;
27  int m_bitsPerSample;
28  int m_sampleRate;
29  size_t m_numberOfChannels;
30  size_t m_bytesPerFrame;
31 
32  size_t m_dataIndex;
33  std::vector<uint8_t> m_data; // 10 ms audio frame
34  size_t m_dataNumberOfFrames;
35 
36  std::mutex m_audioDeviceModuleMutex;
37  rtc::scoped_refptr<OpenteraAudioDeviceModule> m_audioDeviceModule;
38 
39  public:
40  AudioSource(AudioSourceConfiguration configuration, int bitsPerSample, int sampleRate, size_t numberOfChannels);
41 
42  DECLARE_NOT_COPYABLE(AudioSource);
43  DECLARE_NOT_MOVABLE(AudioSource);
44 
45  void AddSink(webrtc::AudioTrackSinkInterface* sink) override;
46  void RemoveSink(webrtc::AudioTrackSinkInterface* sink) override;
47 
48  bool remote() const override;
49  SourceState state() const override;
50  const cricket::AudioOptions options() const override;
51 
53  size_t bytesPerSample() const;
54  size_t bytesPerFrame() const;
55 
56  void setAudioDeviceModule(const rtc::scoped_refptr<OpenteraAudioDeviceModule>& audioDeviceModule);
57  void sendFrame(const void* audioData, size_t numberOfFrames);
58  void sendFrame(const void* audioData, size_t numberOfFrames, bool isTyping);
59 
60  // Methods to fake a ref counted object, so the Python binding is easier to
61  // make because we can use a shared_ptr
62  void AddRef() const override;
63  rtc::RefCountReleaseStatus Release() const override;
64  };
65 
69  inline AudioSourceConfiguration AudioSource::configuration() const { return m_configuration; }
70 
76  inline void AudioSource::sendFrame(const void* audioData, size_t numberOfFrames)
77  {
78  sendFrame(audioData, numberOfFrames, false);
79  }
80 }
81 
82 #endif
Represents a configuration of an audio source that can be added to a WebRTC call.
Definition: AudioSourceConfiguration.h:13
Represents an audio source that can be added to a WebRTC call.
Definition: AudioSource.h:25
void sendFrame(const void *audioData, size_t numberOfFrames)
Definition: AudioSource.h:76
AudioSourceConfiguration configuration() const
Definition: AudioSource.h:69
AudioSource(AudioSourceConfiguration configuration, int bitsPerSample, int sampleRate, size_t numberOfChannels)
Creates an AudioSource.
Definition: AudioSource.cpp:39
const cricket::AudioOptions options() const override
Definition: AudioSource.cpp:86
size_t bytesPerFrame() const
Definition: AudioSource.cpp:102
size_t bytesPerSample() const
Definition: AudioSource.cpp:94
SourceState state() const override
Indicates if this source is live.
Definition: AudioSource.cpp:78
void AddSink(webrtc::AudioTrackSinkInterface *sink) override
Definition: AudioSource.cpp:58
bool remote() const override
Indicates if this source is remote.
Definition: AudioSource.cpp:69
void setAudioDeviceModule(const rtc::scoped_refptr< OpenteraAudioDeviceModule > &audioDeviceModule)
Definition: AudioSource.cpp:111
void RemoveSink(webrtc::AudioTrackSinkInterface *sink) override
Definition: AudioSource.cpp:63