blob: abb55f62a768442eb0c8935499fe4f8c241df7b2 [file] [log] [blame]
Henrik Kjellanderbd0ae452016-02-10 09:53:121/*
kjellander95ed4e62016-02-10 15:54:432 * Copyright 2014 The WebRTC project authors. All Rights Reserved.
Henrik Kjellanderbd0ae452016-02-10 09:53:123 *
kjellander95ed4e62016-02-10 15:54:434 * 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.
Henrik Kjellanderbd0ae452016-02-10 09:53:129 */
10
11#ifndef WEBRTC_API_REMOTEAUDIOSOURCE_H_
12#define WEBRTC_API_REMOTEAUDIOSOURCE_H_
13
14#include <list>
15#include <string>
16
17#include "webrtc/api/mediastreaminterface.h"
18#include "webrtc/api/notifier.h"
kjellander@webrtc.orgcaa81762016-02-26 21:46:0919#include "webrtc/audio_sink.h"
Henrik Kjellanderbd0ae452016-02-10 09:53:1220#include "webrtc/base/criticalsection.h"
Henrik Kjellanderbd0ae452016-02-10 09:53:1221
22namespace rtc {
23struct Message;
24class Thread;
25} // namespace rtc
26
27namespace webrtc {
28
29class AudioProviderInterface;
30
31// This class implements the audio source used by the remote audio track.
32class RemoteAudioSource : public Notifier<AudioSourceInterface> {
33 public:
34 // Creates an instance of RemoteAudioSource.
35 static rtc::scoped_refptr<RemoteAudioSource> Create(
36 uint32_t ssrc,
37 AudioProviderInterface* provider);
38
39 // MediaSourceInterface implementation.
40 MediaSourceInterface::SourceState state() const override;
41 bool remote() const override;
42
43 void AddSink(AudioTrackSinkInterface* sink) override;
44 void RemoveSink(AudioTrackSinkInterface* sink) override;
45
46 protected:
47 RemoteAudioSource();
48 ~RemoteAudioSource() override;
49
50 // Post construction initialize where we can do things like save a reference
51 // to ourselves (need to be fully constructed).
52 void Initialize(uint32_t ssrc, AudioProviderInterface* provider);
53
54 private:
55 typedef std::list<AudioObserver*> AudioObserverList;
56
57 // AudioSourceInterface implementation.
58 void SetVolume(double volume) override;
59 void RegisterAudioObserver(AudioObserver* observer) override;
60 void UnregisterAudioObserver(AudioObserver* observer) override;
61
62 class Sink;
63 void OnData(const AudioSinkInterface::Data& audio);
64 void OnAudioProviderGone();
65
66 class MessageHandler;
67 void OnMessage(rtc::Message* msg);
68
69 AudioObserverList audio_observers_;
70 rtc::CriticalSection sink_lock_;
71 std::list<AudioTrackSinkInterface*> sinks_;
72 rtc::Thread* const main_thread_;
73 SourceState state_;
74};
75
76} // namespace webrtc
77
78#endif // WEBRTC_API_REMOTEAUDIOSOURCE_H_