blob: 14c16a79ccb44f56ad84a78dedd7a64dc213a80b [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
ossu25e4ac72017-01-23 12:56:2511#ifndef WEBRTC_PC_REMOTEAUDIOSOURCE_H_
12#define WEBRTC_PC_REMOTEAUDIOSOURCE_H_
Henrik Kjellanderbd0ae452016-02-10 09:53:1213
14#include <list>
15#include <string>
16
kjellandercf820622016-08-31 14:33:0517#include "webrtc/api/call/audio_sink.h"
Henrik Kjellanderbd0ae452016-02-10 09:53:1218#include "webrtc/api/notifier.h"
Taylor Brandstetterbc1f6bd2016-06-27 23:30:3519#include "webrtc/pc/channel.h"
Edward Lemur76de83e2017-07-06 17:44:3420#include "webrtc/rtc_base/criticalsection.h"
Henrik Kjellanderbd0ae452016-02-10 09:53:1221
22namespace rtc {
23struct Message;
24class Thread;
25} // namespace rtc
26
27namespace webrtc {
28
Henrik Kjellanderbd0ae452016-02-10 09:53:1229// This class implements the audio source used by the remote audio track.
30class RemoteAudioSource : public Notifier<AudioSourceInterface> {
31 public:
32 // Creates an instance of RemoteAudioSource.
33 static rtc::scoped_refptr<RemoteAudioSource> Create(
34 uint32_t ssrc,
Taylor Brandstetterbc1f6bd2016-06-27 23:30:3535 cricket::VoiceChannel* channel);
Henrik Kjellanderbd0ae452016-02-10 09:53:1236
37 // MediaSourceInterface implementation.
38 MediaSourceInterface::SourceState state() const override;
39 bool remote() const override;
40
41 void AddSink(AudioTrackSinkInterface* sink) override;
42 void RemoveSink(AudioTrackSinkInterface* sink) override;
43
44 protected:
45 RemoteAudioSource();
46 ~RemoteAudioSource() override;
47
48 // Post construction initialize where we can do things like save a reference
49 // to ourselves (need to be fully constructed).
Taylor Brandstetterbc1f6bd2016-06-27 23:30:3550 void Initialize(uint32_t ssrc, cricket::VoiceChannel* channel);
Henrik Kjellanderbd0ae452016-02-10 09:53:1251
52 private:
53 typedef std::list<AudioObserver*> AudioObserverList;
54
55 // AudioSourceInterface implementation.
56 void SetVolume(double volume) override;
57 void RegisterAudioObserver(AudioObserver* observer) override;
58 void UnregisterAudioObserver(AudioObserver* observer) override;
59
60 class Sink;
61 void OnData(const AudioSinkInterface::Data& audio);
Taylor Brandstetterbc1f6bd2016-06-27 23:30:3562 void OnAudioChannelGone();
Henrik Kjellanderbd0ae452016-02-10 09:53:1263
64 class MessageHandler;
65 void OnMessage(rtc::Message* msg);
66
67 AudioObserverList audio_observers_;
68 rtc::CriticalSection sink_lock_;
69 std::list<AudioTrackSinkInterface*> sinks_;
70 rtc::Thread* const main_thread_;
71 SourceState state_;
72};
73
74} // namespace webrtc
75
ossu25e4ac72017-01-23 12:56:2576#endif // WEBRTC_PC_REMOTEAUDIOSOURCE_H_