Chromium Code Reviews| Index: talk/app/webrtc/remoteaudiotrack.cc |
| diff --git a/talk/app/webrtc/remoteaudiotrack.cc b/talk/app/webrtc/remoteaudiotrack.cc |
| index df27f05e4859b2f423a950485aef50915501dd41..8d0306f34697dc64f866c03eaee58438ed271fab 100644 |
| --- a/talk/app/webrtc/remoteaudiotrack.cc |
| +++ b/talk/app/webrtc/remoteaudiotrack.cc |
| @@ -26,3 +26,69 @@ |
| */ |
| #include "talk/app/webrtc/remoteaudiotrack.h" |
| + |
| +#include "talk/app/webrtc/remoteaudiosource.h" |
| + |
| +using rtc::scoped_refptr; |
| + |
| +namespace webrtc { |
| + |
| +// static |
| +scoped_refptr<RemoteAudioTrack> RemoteAudioTrack::Create( |
| + const std::string& id, |
| + const scoped_refptr<RemoteAudioSource>& source) { |
| + return new rtc::RefCountedObject<RemoteAudioTrack>(id, source); |
| +} |
| + |
| +RemoteAudioTrack::RemoteAudioTrack( |
| + const std::string& label, |
| + const scoped_refptr<RemoteAudioSource>& source) |
| + : MediaStreamTrack<AudioTrackInterface>(label), audio_source_(source) { |
| + audio_source_->RegisterObserver(this); |
| + TrackState new_state = kInitializing; |
| + switch (audio_source_->state()) { |
| + case MediaSourceInterface::kLive: |
| + case MediaSourceInterface::kMuted: |
| + new_state = kLive; |
| + break; |
| + case MediaSourceInterface::kEnded: |
| + new_state = kEnded; |
| + break; |
| + case MediaSourceInterface::kInitializing: |
| + default: |
|
the sun
2015/12/11 19:46:29
RTC_NOTREACHED()
tommi
2015/12/12 00:33:11
this is actually intended (i.e. kInitializing). A
|
| + break; |
| + } |
| + set_state(new_state); |
| +} |
| + |
| +RemoteAudioTrack::~RemoteAudioTrack() { |
| + set_state(MediaStreamTrackInterface::kEnded); |
| + audio_source_->UnregisterObserver(this); |
| +} |
| + |
| +std::string RemoteAudioTrack::kind() const { |
| + return MediaStreamTrackInterface::kAudioKind; |
| +} |
| + |
| +AudioSourceInterface* RemoteAudioTrack::GetSource() const { |
| + return audio_source_.get(); |
| +} |
| + |
| +void RemoteAudioTrack::AddSink(AudioTrackSinkInterface* sink) { |
| + audio_source_->AddSink(sink); |
| +} |
| + |
| +void RemoteAudioTrack::RemoveSink(AudioTrackSinkInterface* sink) { |
| + audio_source_->RemoveSink(sink); |
| +} |
| + |
| +bool RemoteAudioTrack::GetSignalLevel(int* level) { |
| + return false; |
| +} |
| + |
| +void RemoteAudioTrack::OnChanged() { |
| + if (audio_source_->state() == MediaSourceInterface::kEnded) |
| + set_state(MediaStreamTrackInterface::kEnded); |
| +} |
| + |
| +} // namespace webrtc |