Home | History | Annotate | Download | only in media
      1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "content/renderer/media/media_stream_source_observer.h"
      6 
      7 #include "base/logging.h"
      8 #include "content/renderer/media/media_stream_source_extra_data.h"
      9 
     10 namespace content {
     11 
     12 MediaStreamSourceObserver::MediaStreamSourceObserver(
     13     webrtc::MediaSourceInterface* webrtc_source,
     14     MediaStreamSourceExtraData* extra_data)
     15      : state_(webrtc_source->state()),
     16        webrtc_source_(webrtc_source),
     17        extra_data_(extra_data) {
     18   webrtc_source_->RegisterObserver(this);
     19 }
     20 
     21 MediaStreamSourceObserver::~MediaStreamSourceObserver() {
     22   DCHECK(CalledOnValidThread());
     23   if (webrtc_source_.get())
     24     webrtc_source_->UnregisterObserver(this);
     25 }
     26 
     27 void MediaStreamSourceObserver::OnChanged() {
     28   DCHECK(CalledOnValidThread());
     29   // There should be no more notification after kEnded.
     30   DCHECK(webrtc_source_.get() != NULL);
     31 
     32   webrtc::MediaSourceInterface::SourceState state = webrtc_source_->state();
     33   if (state == state_)
     34     return;
     35   state_ = state;
     36   WebKit::WebMediaStreamSource webkit_source(extra_data_->webkit_source());
     37 
     38   switch (state) {
     39     case webrtc::MediaSourceInterface::kInitializing:
     40       // Ignore the kInitializing state since there is no match in
     41       // WebMediaStreamSource::ReadyState.
     42       break;
     43     case webrtc::MediaSourceInterface::kLive:
     44       webkit_source.setReadyState(
     45           WebKit::WebMediaStreamSource::ReadyStateLive);
     46       break;
     47     case webrtc::MediaSourceInterface::kMuted:
     48       webkit_source.setReadyState(
     49           WebKit::WebMediaStreamSource::ReadyStateMuted);
     50       break;
     51     case webrtc::MediaSourceInterface::kEnded:
     52       webkit_source.setReadyState(
     53           WebKit::WebMediaStreamSource::ReadyStateEnded);
     54       webrtc_source_->UnregisterObserver(this);
     55       webrtc_source_ = NULL;
     56       break;
     57     default:
     58       NOTREACHED();
     59       break;
     60   }
     61 }
     62 
     63 }  // namespace content
     64