Index: talk/app/webrtc/remoteaudiotrack.cc |
diff --git a/talk/app/webrtc/remoteaudiotrack.cc b/talk/app/webrtc/remoteaudiotrack.cc |
index df27f05e4859b2f423a950485aef50915501dd41..2c4481c80d71b8c9f6b5eeef0bbbef03bf3f848a 100644 |
--- a/talk/app/webrtc/remoteaudiotrack.cc |
+++ b/talk/app/webrtc/remoteaudiotrack.cc |
@@ -26,3 +26,70 @@ |
*/ |
#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: |
+ // kInitializing; |
+ 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 |