1*d9f75844SAndroid Build Coastguard Worker /* 2*d9f75844SAndroid Build Coastguard Worker * Copyright 2011 The WebRTC project authors. All Rights Reserved. 3*d9f75844SAndroid Build Coastguard Worker * 4*d9f75844SAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*d9f75844SAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*d9f75844SAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*d9f75844SAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*d9f75844SAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*d9f75844SAndroid Build Coastguard Worker */ 10*d9f75844SAndroid Build Coastguard Worker 11*d9f75844SAndroid Build Coastguard Worker #include "pc/audio_track.h" 12*d9f75844SAndroid Build Coastguard Worker 13*d9f75844SAndroid Build Coastguard Worker #include "rtc_base/checks.h" 14*d9f75844SAndroid Build Coastguard Worker 15*d9f75844SAndroid Build Coastguard Worker namespace webrtc { 16*d9f75844SAndroid Build Coastguard Worker 17*d9f75844SAndroid Build Coastguard Worker // static Create(absl::string_view id,const rtc::scoped_refptr<AudioSourceInterface> & source)18*d9f75844SAndroid Build Coastguard Workerrtc::scoped_refptr<AudioTrack> AudioTrack::Create( 19*d9f75844SAndroid Build Coastguard Worker absl::string_view id, 20*d9f75844SAndroid Build Coastguard Worker const rtc::scoped_refptr<AudioSourceInterface>& source) { 21*d9f75844SAndroid Build Coastguard Worker return rtc::make_ref_counted<AudioTrack>(id, source); 22*d9f75844SAndroid Build Coastguard Worker } 23*d9f75844SAndroid Build Coastguard Worker AudioTrack(absl::string_view label,const rtc::scoped_refptr<AudioSourceInterface> & source)24*d9f75844SAndroid Build Coastguard WorkerAudioTrack::AudioTrack(absl::string_view label, 25*d9f75844SAndroid Build Coastguard Worker const rtc::scoped_refptr<AudioSourceInterface>& source) 26*d9f75844SAndroid Build Coastguard Worker : MediaStreamTrack<AudioTrackInterface>(label), audio_source_(source) { 27*d9f75844SAndroid Build Coastguard Worker if (audio_source_) { 28*d9f75844SAndroid Build Coastguard Worker audio_source_->RegisterObserver(this); 29*d9f75844SAndroid Build Coastguard Worker OnChanged(); 30*d9f75844SAndroid Build Coastguard Worker } 31*d9f75844SAndroid Build Coastguard Worker } 32*d9f75844SAndroid Build Coastguard Worker ~AudioTrack()33*d9f75844SAndroid Build Coastguard WorkerAudioTrack::~AudioTrack() { 34*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK_RUN_ON(&signaling_thread_checker_); 35*d9f75844SAndroid Build Coastguard Worker set_state(MediaStreamTrackInterface::kEnded); 36*d9f75844SAndroid Build Coastguard Worker if (audio_source_) 37*d9f75844SAndroid Build Coastguard Worker audio_source_->UnregisterObserver(this); 38*d9f75844SAndroid Build Coastguard Worker } 39*d9f75844SAndroid Build Coastguard Worker kind() const40*d9f75844SAndroid Build Coastguard Workerstd::string AudioTrack::kind() const { 41*d9f75844SAndroid Build Coastguard Worker return kAudioKind; 42*d9f75844SAndroid Build Coastguard Worker } 43*d9f75844SAndroid Build Coastguard Worker GetSource() const44*d9f75844SAndroid Build Coastguard WorkerAudioSourceInterface* AudioTrack::GetSource() const { 45*d9f75844SAndroid Build Coastguard Worker // Callable from any thread. 46*d9f75844SAndroid Build Coastguard Worker return audio_source_.get(); 47*d9f75844SAndroid Build Coastguard Worker } 48*d9f75844SAndroid Build Coastguard Worker AddSink(AudioTrackSinkInterface * sink)49*d9f75844SAndroid Build Coastguard Workervoid AudioTrack::AddSink(AudioTrackSinkInterface* sink) { 50*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK_RUN_ON(&signaling_thread_checker_); 51*d9f75844SAndroid Build Coastguard Worker if (audio_source_) 52*d9f75844SAndroid Build Coastguard Worker audio_source_->AddSink(sink); 53*d9f75844SAndroid Build Coastguard Worker } 54*d9f75844SAndroid Build Coastguard Worker RemoveSink(AudioTrackSinkInterface * sink)55*d9f75844SAndroid Build Coastguard Workervoid AudioTrack::RemoveSink(AudioTrackSinkInterface* sink) { 56*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK_RUN_ON(&signaling_thread_checker_); 57*d9f75844SAndroid Build Coastguard Worker if (audio_source_) 58*d9f75844SAndroid Build Coastguard Worker audio_source_->RemoveSink(sink); 59*d9f75844SAndroid Build Coastguard Worker } 60*d9f75844SAndroid Build Coastguard Worker OnChanged()61*d9f75844SAndroid Build Coastguard Workervoid AudioTrack::OnChanged() { 62*d9f75844SAndroid Build Coastguard Worker RTC_DCHECK_RUN_ON(&signaling_thread_checker_); 63*d9f75844SAndroid Build Coastguard Worker if (audio_source_->state() == MediaSourceInterface::kEnded) { 64*d9f75844SAndroid Build Coastguard Worker set_state(kEnded); 65*d9f75844SAndroid Build Coastguard Worker } else { 66*d9f75844SAndroid Build Coastguard Worker set_state(kLive); 67*d9f75844SAndroid Build Coastguard Worker } 68*d9f75844SAndroid Build Coastguard Worker } 69*d9f75844SAndroid Build Coastguard Worker 70*d9f75844SAndroid Build Coastguard Worker } // namespace webrtc 71