| Index: trunk/src/content/renderer/media/remote_media_stream_impl.cc
|
| ===================================================================
|
| --- trunk/src/content/renderer/media/remote_media_stream_impl.cc (revision 262817)
|
| +++ trunk/src/content/renderer/media/remote_media_stream_impl.cc (working copy)
|
| @@ -10,131 +10,86 @@
|
| #include "base/strings/utf_string_conversions.h"
|
| #include "content/renderer/media/media_stream.h"
|
| #include "content/renderer/media/media_stream_dependency_factory.h"
|
| -#include "content/renderer/media/media_stream_video_track.h"
|
| -#include "content/renderer/media/webrtc/media_stream_remote_video_source.h"
|
| -#include "content/renderer/render_thread_impl.h"
|
| #include "third_party/WebKit/public/platform/WebString.h"
|
|
|
| namespace content {
|
|
|
| -namespace {
|
| -
|
| -void InitializeWebkitTrack(webrtc::MediaStreamTrackInterface* track,
|
| - blink::WebMediaStreamTrack* webkit_track,
|
| - blink::WebMediaStreamSource::Type type) {
|
| - blink::WebMediaStreamSource webkit_source;
|
| - blink::WebString webkit_track_id(base::UTF8ToUTF16(track->id()));
|
| -
|
| - webkit_source.initialize(webkit_track_id, type, webkit_track_id);
|
| - webkit_track->initialize(webkit_track_id, webkit_source);
|
| -
|
| - MediaStreamDependencyFactory* factory = NULL;
|
| - // RenderThreadImpl::current() may be NULL in unit tests.
|
| - RenderThreadImpl* render_thread = RenderThreadImpl::current();
|
| - if (render_thread)
|
| - factory = render_thread->GetMediaStreamDependencyFactory();
|
| -
|
| - if (type == blink::WebMediaStreamSource::TypeVideo) {
|
| - MediaStreamRemoteVideoSource* video_source =
|
| - new MediaStreamRemoteVideoSource(
|
| - static_cast<webrtc::VideoTrackInterface*>(track));
|
| - webkit_source.setExtraData(video_source);
|
| - // Initial constraints must be provided to a MediaStreamVideoTrack. But
|
| - // no constraints are available initially on a remote video track.
|
| - blink::WebMediaConstraints constraints;
|
| - constraints.initialize();
|
| - webkit_track->setExtraData(
|
| - new MediaStreamVideoTrack(video_source, constraints,
|
| - MediaStreamVideoSource::ConstraintsCallback(),
|
| - track->enabled(), factory));
|
| - } else {
|
| - DCHECK(type == blink::WebMediaStreamSource::TypeAudio);
|
| - content::MediaStreamDependencyFactory::AddNativeAudioTrackToBlinkTrack(
|
| - track, *webkit_track, false);
|
| - }
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -// Base class used for mapping between webrtc and blink MediaStream tracks.
|
| -// An instance of a RemoteMediaStreamTrackAdapter is stored in
|
| -// RemoteMediaStreamImpl per remote audio and video track.
|
| -class RemoteMediaStreamTrackAdapter {
|
| +// RemoteMediaStreamTrackObserver is responsible for listening on change
|
| +// notification on a remote webrtc MediaStreamTrack and notify WebKit.
|
| +class RemoteMediaStreamTrackObserver
|
| + : NON_EXPORTED_BASE(public webrtc::ObserverInterface),
|
| + NON_EXPORTED_BASE(public base::NonThreadSafe) {
|
| public:
|
| - RemoteMediaStreamTrackAdapter(webrtc::MediaStreamTrackInterface* webrtc_track,
|
| - const blink::WebMediaStreamTrack& webkit_track)
|
| - : webrtc_track_(webrtc_track),
|
| - webkit_track_(webkit_track) {
|
| - }
|
| + RemoteMediaStreamTrackObserver(
|
| + webrtc::MediaStreamTrackInterface* webrtc_track,
|
| + const blink::WebMediaStreamTrack& webkit_track);
|
| + virtual ~RemoteMediaStreamTrackObserver();
|
|
|
| - virtual ~RemoteMediaStreamTrackAdapter() {
|
| - }
|
| -
|
| - webrtc::MediaStreamTrackInterface* observed_track() {
|
| + webrtc::MediaStreamTrackInterface* observered_track() {
|
| return webrtc_track_.get();
|
| }
|
| -
|
| const blink::WebMediaStreamTrack& webkit_track() { return webkit_track_; }
|
|
|
| private:
|
| + // webrtc::ObserverInterface implementation.
|
| + virtual void OnChanged() OVERRIDE;
|
| +
|
| + webrtc::MediaStreamTrackInterface::TrackState state_;
|
| scoped_refptr<webrtc::MediaStreamTrackInterface> webrtc_track_;
|
| blink::WebMediaStreamTrack webkit_track_;
|
| - bool sent_ended_message_;
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(RemoteMediaStreamTrackAdapter);
|
| + DISALLOW_COPY_AND_ASSIGN(RemoteMediaStreamTrackObserver);
|
| };
|
|
|
| -static content::RemoteMediaStreamTrackAdapter* FindTrackObserver(
|
| - webrtc::MediaStreamTrackInterface* track,
|
| - const ScopedVector<content::RemoteMediaStreamTrackAdapter>& observers) {
|
| - ScopedVector<content::RemoteMediaStreamTrackAdapter>::const_iterator it =
|
| +} // namespace content
|
| +
|
| +namespace {
|
| +
|
| +void InitializeWebkitTrack(webrtc::MediaStreamTrackInterface* track,
|
| + blink::WebMediaStreamTrack* webkit_track,
|
| + blink::WebMediaStreamSource::Type type) {
|
| + blink::WebMediaStreamSource webkit_source;
|
| + blink::WebString webkit_track_id(base::UTF8ToUTF16(track->id()));
|
| +
|
| + webkit_source.initialize(webkit_track_id, type, webkit_track_id);
|
| + webkit_track->initialize(webkit_track_id, webkit_source);
|
| + content::MediaStreamDependencyFactory::AddNativeTrackToBlinkTrack(
|
| + track, *webkit_track, false);
|
| +}
|
| +
|
| +content::RemoteMediaStreamTrackObserver* FindTrackObserver(
|
| + webrtc::MediaStreamTrackInterface* track,
|
| + const ScopedVector<content::RemoteMediaStreamTrackObserver>& observers) {
|
| + ScopedVector<content::RemoteMediaStreamTrackObserver>::const_iterator it =
|
| observers.begin();
|
| for (; it != observers.end(); ++it) {
|
| - if ((*it)->observed_track() == track)
|
| + if ((*it)->observered_track() == track)
|
| return *it;
|
| }
|
| return NULL;
|
| }
|
|
|
| -// RemoteAudioMediaStreamTrackAdapter is responsible for listening on state
|
| -// change notifications on a remote webrtc audio MediaStreamTracks and notify
|
| -// WebKit.
|
| -class RemoteAudioMediaStreamTrackAdapter
|
| - : public RemoteMediaStreamTrackAdapter,
|
| - public webrtc::ObserverInterface,
|
| - public base::NonThreadSafe {
|
| - public:
|
| - RemoteAudioMediaStreamTrackAdapter(
|
| - webrtc::MediaStreamTrackInterface* webrtc_track,
|
| - const blink::WebMediaStreamTrack& webkit_track);
|
| - virtual ~RemoteAudioMediaStreamTrackAdapter();
|
| +} // namespace anonymous
|
|
|
| - private:
|
| - // webrtc::ObserverInterface implementation.
|
| - virtual void OnChanged() OVERRIDE;
|
| +namespace content {
|
|
|
| - webrtc::MediaStreamTrackInterface::TrackState state_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(RemoteAudioMediaStreamTrackAdapter);
|
| -};
|
| -
|
| -RemoteAudioMediaStreamTrackAdapter::RemoteAudioMediaStreamTrackAdapter(
|
| +RemoteMediaStreamTrackObserver::RemoteMediaStreamTrackObserver(
|
| webrtc::MediaStreamTrackInterface* webrtc_track,
|
| const blink::WebMediaStreamTrack& webkit_track)
|
| - : RemoteMediaStreamTrackAdapter(webrtc_track, webkit_track),
|
| - state_(observed_track()->state()) {
|
| - observed_track()->RegisterObserver(this);
|
| + : state_(webrtc_track->state()),
|
| + webrtc_track_(webrtc_track),
|
| + webkit_track_(webkit_track) {
|
| + webrtc_track->RegisterObserver(this);
|
| }
|
|
|
| -RemoteAudioMediaStreamTrackAdapter::~RemoteAudioMediaStreamTrackAdapter() {
|
| - observed_track()->UnregisterObserver(this);
|
| +RemoteMediaStreamTrackObserver::~RemoteMediaStreamTrackObserver() {
|
| + webrtc_track_->UnregisterObserver(this);
|
| }
|
|
|
| -void RemoteAudioMediaStreamTrackAdapter::OnChanged() {
|
| +void RemoteMediaStreamTrackObserver::OnChanged() {
|
| DCHECK(CalledOnValidThread());
|
|
|
| - webrtc::MediaStreamTrackInterface::TrackState state =
|
| - observed_track()->state();
|
| + webrtc::MediaStreamTrackInterface::TrackState state = webrtc_track_->state();
|
| if (state == state_)
|
| return;
|
|
|
| @@ -145,11 +100,11 @@
|
| // WebMediaStreamSource::ReadyState.
|
| break;
|
| case webrtc::MediaStreamTrackInterface::kLive:
|
| - webkit_track().source().setReadyState(
|
| + webkit_track_.source().setReadyState(
|
| blink::WebMediaStreamSource::ReadyStateLive);
|
| break;
|
| case webrtc::MediaStreamTrackInterface::kEnded:
|
| - webkit_track().source().setReadyState(
|
| + webkit_track_.source().setReadyState(
|
| blink::WebMediaStreamSource::ReadyStateEnded);
|
| break;
|
| default:
|
| @@ -176,8 +131,8 @@
|
| InitializeWebkitTrack(audio_track, &webkit_audio_tracks[i],
|
| blink::WebMediaStreamSource::TypeAudio);
|
| audio_track_observers_.push_back(
|
| - new RemoteAudioMediaStreamTrackAdapter(audio_track,
|
| - webkit_audio_tracks[i]));
|
| + new RemoteMediaStreamTrackObserver(audio_track,
|
| + webkit_audio_tracks[i]));
|
| }
|
|
|
| // Initialize WebKit video tracks.
|
| @@ -191,8 +146,8 @@
|
| InitializeWebkitTrack(video_track, &webkit_video_tracks[i],
|
| blink::WebMediaStreamSource::TypeVideo);
|
| video_track_observers_.push_back(
|
| - new RemoteMediaStreamTrackAdapter(video_track,
|
| - webkit_video_tracks[i]));
|
| + new RemoteMediaStreamTrackObserver(video_track,
|
| + webkit_video_tracks[i]));
|
| }
|
|
|
| webkit_stream_.initialize(base::UTF8ToUTF16(webrtc_stream->label()),
|
| @@ -206,10 +161,10 @@
|
|
|
| void RemoteMediaStreamImpl::OnChanged() {
|
| // Find removed audio tracks.
|
| - ScopedVector<RemoteMediaStreamTrackAdapter>::iterator audio_it =
|
| + ScopedVector<RemoteMediaStreamTrackObserver>::iterator audio_it =
|
| audio_track_observers_.begin();
|
| while (audio_it != audio_track_observers_.end()) {
|
| - std::string track_id = (*audio_it)->observed_track()->id();
|
| + std::string track_id = (*audio_it)->observered_track()->id();
|
| if (webrtc_stream_->FindAudioTrack(track_id) == NULL) {
|
| webkit_stream_.removeTrack((*audio_it)->webkit_track());
|
| audio_it = audio_track_observers_.erase(audio_it);
|
| @@ -219,10 +174,10 @@
|
| }
|
|
|
| // Find removed video tracks.
|
| - ScopedVector<RemoteMediaStreamTrackAdapter>::iterator video_it =
|
| + ScopedVector<RemoteMediaStreamTrackObserver>::iterator video_it =
|
| video_track_observers_.begin();
|
| while (video_it != video_track_observers_.end()) {
|
| - std::string track_id = (*video_it)->observed_track()->id();
|
| + std::string track_id = (*video_it)->observered_track()->id();
|
| if (webrtc_stream_->FindVideoTrack(track_id) == NULL) {
|
| webkit_stream_.removeTrack((*video_it)->webkit_track());
|
| video_it = video_track_observers_.erase(video_it);
|
| @@ -241,7 +196,7 @@
|
| InitializeWebkitTrack(*it, &new_track,
|
| blink::WebMediaStreamSource::TypeAudio);
|
| audio_track_observers_.push_back(
|
| - new RemoteAudioMediaStreamTrackAdapter(*it, new_track));
|
| + new RemoteMediaStreamTrackObserver(*it, new_track));
|
| webkit_stream_.addTrack(new_track);
|
| }
|
| }
|
| @@ -256,7 +211,7 @@
|
| InitializeWebkitTrack(*it, &new_track,
|
| blink::WebMediaStreamSource::TypeVideo);
|
| video_track_observers_.push_back(
|
| - new RemoteMediaStreamTrackAdapter(*it, new_track));
|
| + new RemoteMediaStreamTrackObserver(*it, new_track));
|
| webkit_stream_.addTrack(new_track);
|
| }
|
| }
|
|
|