blob: c2c9557c9e3ed56a7b1b66465e56ef93288ba245 [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 */
jlmiller@webrtc.org5f93d0a2015-01-20 21:36:13 +000010
Henrik Kjellander15583c12016-02-10 10:53:12 +010011#include "webrtc/api/audiotrack.h"
henrike@webrtc.org28e20752013-07-10 00:45:36 +000012
tommi6eca7e32015-12-15 04:27:11 -080013#include "webrtc/base/checks.h"
14
15using rtc::scoped_refptr;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000016
17namespace webrtc {
18
deadbeeffac06552015-11-25 11:26:01 -080019const char MediaStreamTrackInterface::kAudioKind[] = "audio";
henrike@webrtc.org28e20752013-07-10 00:45:36 +000020
tommi6eca7e32015-12-15 04:27:11 -080021// static
22scoped_refptr<AudioTrack> AudioTrack::Create(
23 const std::string& id,
24 const scoped_refptr<AudioSourceInterface>& source) {
25 return new rtc::RefCountedObject<AudioTrack>(id, source);
26}
27
henrike@webrtc.org28e20752013-07-10 00:45:36 +000028AudioTrack::AudioTrack(const std::string& label,
tommi6eca7e32015-12-15 04:27:11 -080029 const scoped_refptr<AudioSourceInterface>& source)
30 : MediaStreamTrack<AudioTrackInterface>(label), audio_source_(source) {
31 if (audio_source_) {
32 audio_source_->RegisterObserver(this);
33 OnChanged();
34 }
35}
36
37AudioTrack::~AudioTrack() {
38 RTC_DCHECK(thread_checker_.CalledOnValidThread());
39 set_state(MediaStreamTrackInterface::kEnded);
40 if (audio_source_)
41 audio_source_->UnregisterObserver(this);
henrike@webrtc.org28e20752013-07-10 00:45:36 +000042}
43
44std::string AudioTrack::kind() const {
tommi6eca7e32015-12-15 04:27:11 -080045 RTC_DCHECK(thread_checker_.CalledOnValidThread());
deadbeeffac06552015-11-25 11:26:01 -080046 return kAudioKind;
henrike@webrtc.org28e20752013-07-10 00:45:36 +000047}
48
tommi6eca7e32015-12-15 04:27:11 -080049AudioSourceInterface* AudioTrack::GetSource() const {
50 RTC_DCHECK(thread_checker_.CalledOnValidThread());
51 return audio_source_.get();
52}
53
54void AudioTrack::AddSink(AudioTrackSinkInterface* sink) {
55 RTC_DCHECK(thread_checker_.CalledOnValidThread());
56 if (audio_source_)
57 audio_source_->AddSink(sink);
58}
59
60void AudioTrack::RemoveSink(AudioTrackSinkInterface* sink) {
61 RTC_DCHECK(thread_checker_.CalledOnValidThread());
62 if (audio_source_)
63 audio_source_->RemoveSink(sink);
64}
65
66void AudioTrack::OnChanged() {
67 RTC_DCHECK(thread_checker_.CalledOnValidThread());
perkjc8f952d2016-03-23 00:33:56 -070068 if (audio_source_->state() == MediaSourceInterface::kEnded) {
69 set_state(kEnded);
70 } else {
71 set_state(kLive);
tommi6eca7e32015-12-15 04:27:11 -080072 }
henrike@webrtc.org28e20752013-07-10 00:45:36 +000073}
74
75} // namespace webrtc