blob: f89bbcdd1dea1862480a51efbca3899e14f51a76 [file] [log] [blame]
henrike@webrtc.org28e20752013-07-10 00:45:36 +00001/*
kjellanderb24317b2016-02-10 07:54:43 -08002 * Copyright 2011 The WebRTC project authors. All Rights Reserved.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00003 *
kjellanderb24317b2016-02-10 07:54:43 -08004 * 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.
henrike@webrtc.org28e20752013-07-10 00:45:36 +00009 */
10
Steve Anton10542f22019-01-11 09:11:00 -080011#ifndef PC_AUDIO_TRACK_H_
12#define PC_AUDIO_TRACK_H_
henrike@webrtc.org28e20752013-07-10 00:45:36 +000013
tommi6eca7e32015-12-15 04:27:11 -080014#include <string>
15
Steve Anton10542f22019-01-11 09:11:00 -080016#include "api/media_stream_interface.h"
Mirko Bonadeid9708072019-01-25 20:26:48 +010017#include "api/scoped_refptr.h"
Steve Anton10542f22019-01-11 09:11:00 -080018#include "pc/media_stream_track.h"
19#include "rtc_base/constructor_magic.h"
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020020#include "rtc_base/thread_checker.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000021
22namespace webrtc {
23
tommi6eca7e32015-12-15 04:27:11 -080024class AudioTrack : public MediaStreamTrack<AudioTrackInterface>,
25 public ObserverInterface {
26 protected:
27 // Protected ctor to force use of factory method.
28 AudioTrack(const std::string& label,
29 const rtc::scoped_refptr<AudioSourceInterface>& source);
30 ~AudioTrack() override;
31
henrike@webrtc.org28e20752013-07-10 00:45:36 +000032 public:
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +000033 static rtc::scoped_refptr<AudioTrack> Create(
tommi6eca7e32015-12-15 04:27:11 -080034 const std::string& id,
35 const rtc::scoped_refptr<AudioSourceInterface>& source);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000036
tommi6eca7e32015-12-15 04:27:11 -080037 private:
henrike@webrtc.org40b3b682014-03-03 18:30:11 +000038 // MediaStreamTrack implementation.
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +000039 std::string kind() const override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000040
tommi6eca7e32015-12-15 04:27:11 -080041 // AudioTrackInterface implementation.
42 AudioSourceInterface* GetSource() const override;
43
44 void AddSink(AudioTrackSinkInterface* sink) override;
45 void RemoveSink(AudioTrackSinkInterface* sink) override;
46
47 // ObserverInterface implementation.
48 void OnChanged() override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000049
50 private:
tommi6eca7e32015-12-15 04:27:11 -080051 const rtc::scoped_refptr<AudioSourceInterface> audio_source_;
52 rtc::ThreadChecker thread_checker_;
53 RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(AudioTrack);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000054};
55
56} // namespace webrtc
57
Steve Anton10542f22019-01-11 09:11:00 -080058#endif // PC_AUDIO_TRACK_H_