blob: 920bb948bafc8b158a655d020ac0be5330e9da4b [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"
Harald Alvestrand9cb42c82020-10-11 13:03:47 +000017#include "api/media_stream_track.h"
Mirko Bonadeid9708072019-01-25 20:26:48 +010018#include "api/scoped_refptr.h"
Artem Titovd15a5752021-02-10 14:31:24 +010019#include "api/sequence_checker.h"
Tomas Gunnarssonfe328ca2022-02-16 20:02:12 +010020#include "rtc_base/system/no_unique_address.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000021
22namespace webrtc {
23
Tommi09f57132022-02-17 13:19:55 +010024// TODO(tommi): Instead of inheriting from `MediaStreamTrack<>`, implement the
25// properties directly in this class. `MediaStreamTrack` doesn't guard against
26// conflicting access, so we'd need to override those methods anyway in this
27// class in order to make sure things are correctly checked.
tommi6eca7e32015-12-15 04:27:11 -080028class AudioTrack : public MediaStreamTrack<AudioTrackInterface>,
29 public ObserverInterface {
30 protected:
31 // Protected ctor to force use of factory method.
32 AudioTrack(const std::string& label,
33 const rtc::scoped_refptr<AudioSourceInterface>& source);
Niels Möllerde953292020-09-29 09:46:21 +020034
35 AudioTrack() = delete;
36 AudioTrack(const AudioTrack&) = delete;
37 AudioTrack& operator=(const AudioTrack&) = delete;
38
tommi6eca7e32015-12-15 04:27:11 -080039 ~AudioTrack() override;
40
henrike@webrtc.org28e20752013-07-10 00:45:36 +000041 public:
buildbot@webrtc.orgd4e598d2014-07-29 17:36:52 +000042 static rtc::scoped_refptr<AudioTrack> Create(
tommi6eca7e32015-12-15 04:27:11 -080043 const std::string& id,
44 const rtc::scoped_refptr<AudioSourceInterface>& source);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000045
henrike@webrtc.org40b3b682014-03-03 18:30:11 +000046 // MediaStreamTrack implementation.
kjellander@webrtc.org14665ff2015-03-04 12:58:35 +000047 std::string kind() const override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000048
tommi6eca7e32015-12-15 04:27:11 -080049 // AudioTrackInterface implementation.
50 AudioSourceInterface* GetSource() const override;
51
52 void AddSink(AudioTrackSinkInterface* sink) override;
53 void RemoveSink(AudioTrackSinkInterface* sink) override;
54
Tommi816134a2021-05-24 16:54:41 +020055 private:
tommi6eca7e32015-12-15 04:27:11 -080056 // ObserverInterface implementation.
57 void OnChanged() override;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000058
59 private:
tommi6eca7e32015-12-15 04:27:11 -080060 const rtc::scoped_refptr<AudioSourceInterface> audio_source_;
Tomas Gunnarssonfe328ca2022-02-16 20:02:12 +010061 RTC_NO_UNIQUE_ADDRESS webrtc::SequenceChecker signaling_thread_checker_;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000062};
63
64} // namespace webrtc
65
Steve Anton10542f22019-01-11 09:11:00 -080066#endif // PC_AUDIO_TRACK_H_