OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/media/remote_media_stream_impl.h" | 5 #include "content/renderer/media/remote_media_stream_impl.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
11 #include "content/renderer/media/media_stream_dependency_factory.h" | 11 #include "content/renderer/media/media_stream_dependency_factory.h" |
12 #include "content/renderer/media/media_stream_extra_data.h" | 12 #include "content/renderer/media/media_stream_extra_data.h" |
13 #include "third_party/WebKit/public/platform/WebString.h" | 13 #include "third_party/WebKit/public/platform/WebString.h" |
14 | 14 |
15 namespace content { | 15 namespace content { |
16 | 16 |
17 // RemoteMediaStreamTrackObserver is responsible for listening on change | 17 // RemoteMediaStreamTrackObserver is responsible for listening on change |
18 // notification on a remote webrtc MediaStreamTrack and notify WebKit. | 18 // notification on a remote webrtc MediaStreamTrack and notify WebKit. |
19 class RemoteMediaStreamTrackObserver | 19 class RemoteMediaStreamTrackObserver |
20 : NON_EXPORTED_BASE(public webrtc::ObserverInterface), | 20 : NON_EXPORTED_BASE(public webrtc::ObserverInterface), |
21 NON_EXPORTED_BASE(public base::NonThreadSafe) { | 21 NON_EXPORTED_BASE(public base::NonThreadSafe) { |
22 public: | 22 public: |
23 RemoteMediaStreamTrackObserver( | 23 RemoteMediaStreamTrackObserver( |
24 webrtc::MediaStreamTrackInterface* webrtc_track, | 24 webrtc::MediaStreamTrackInterface* webrtc_track, |
25 const WebKit::WebMediaStreamTrack& webkit_track); | 25 const blink::WebMediaStreamTrack& webkit_track); |
26 virtual ~RemoteMediaStreamTrackObserver(); | 26 virtual ~RemoteMediaStreamTrackObserver(); |
27 | 27 |
28 webrtc::MediaStreamTrackInterface* observered_track() { | 28 webrtc::MediaStreamTrackInterface* observered_track() { |
29 return webrtc_track_.get(); | 29 return webrtc_track_.get(); |
30 } | 30 } |
31 const WebKit::WebMediaStreamTrack& webkit_track() { return webkit_track_; } | 31 const blink::WebMediaStreamTrack& webkit_track() { return webkit_track_; } |
32 | 32 |
33 private: | 33 private: |
34 // webrtc::ObserverInterface implementation. | 34 // webrtc::ObserverInterface implementation. |
35 virtual void OnChanged() OVERRIDE; | 35 virtual void OnChanged() OVERRIDE; |
36 | 36 |
37 webrtc::MediaStreamTrackInterface::TrackState state_; | 37 webrtc::MediaStreamTrackInterface::TrackState state_; |
38 scoped_refptr<webrtc::MediaStreamTrackInterface> webrtc_track_; | 38 scoped_refptr<webrtc::MediaStreamTrackInterface> webrtc_track_; |
39 WebKit::WebMediaStreamTrack webkit_track_; | 39 blink::WebMediaStreamTrack webkit_track_; |
40 | 40 |
41 DISALLOW_COPY_AND_ASSIGN(RemoteMediaStreamTrackObserver); | 41 DISALLOW_COPY_AND_ASSIGN(RemoteMediaStreamTrackObserver); |
42 }; | 42 }; |
43 | 43 |
44 } // namespace content | 44 } // namespace content |
45 | 45 |
46 namespace { | 46 namespace { |
47 | 47 |
48 void InitializeWebkitTrack(webrtc::MediaStreamTrackInterface* track, | 48 void InitializeWebkitTrack(webrtc::MediaStreamTrackInterface* track, |
49 WebKit::WebMediaStreamTrack* webkit_track, | 49 blink::WebMediaStreamTrack* webkit_track, |
50 WebKit::WebMediaStreamSource::Type type) { | 50 blink::WebMediaStreamSource::Type type) { |
51 WebKit::WebMediaStreamSource webkit_source; | 51 blink::WebMediaStreamSource webkit_source; |
52 WebKit::WebString webkit_track_id(UTF8ToUTF16(track->id())); | 52 blink::WebString webkit_track_id(UTF8ToUTF16(track->id())); |
53 | 53 |
54 webkit_source.initialize(webkit_track_id, type, webkit_track_id); | 54 webkit_source.initialize(webkit_track_id, type, webkit_track_id); |
55 webkit_track->initialize(webkit_track_id, webkit_source); | 55 webkit_track->initialize(webkit_track_id, webkit_source); |
56 content::MediaStreamDependencyFactory::AddNativeTrackToBlinkTrack(track, | 56 content::MediaStreamDependencyFactory::AddNativeTrackToBlinkTrack(track, |
57 *webkit_track); | 57 *webkit_track); |
58 } | 58 } |
59 | 59 |
60 content::RemoteMediaStreamTrackObserver* FindTrackObserver( | 60 content::RemoteMediaStreamTrackObserver* FindTrackObserver( |
61 webrtc::MediaStreamTrackInterface* track, | 61 webrtc::MediaStreamTrackInterface* track, |
62 const ScopedVector<content::RemoteMediaStreamTrackObserver>& observers) { | 62 const ScopedVector<content::RemoteMediaStreamTrackObserver>& observers) { |
63 ScopedVector<content::RemoteMediaStreamTrackObserver>::const_iterator it = | 63 ScopedVector<content::RemoteMediaStreamTrackObserver>::const_iterator it = |
64 observers.begin(); | 64 observers.begin(); |
65 for (; it != observers.end(); ++it) { | 65 for (; it != observers.end(); ++it) { |
66 if ((*it)->observered_track() == track) | 66 if ((*it)->observered_track() == track) |
67 return *it; | 67 return *it; |
68 } | 68 } |
69 return NULL; | 69 return NULL; |
70 } | 70 } |
71 | 71 |
72 } // namespace anonymous | 72 } // namespace anonymous |
73 | 73 |
74 namespace content { | 74 namespace content { |
75 | 75 |
76 RemoteMediaStreamTrackObserver::RemoteMediaStreamTrackObserver( | 76 RemoteMediaStreamTrackObserver::RemoteMediaStreamTrackObserver( |
77 webrtc::MediaStreamTrackInterface* webrtc_track, | 77 webrtc::MediaStreamTrackInterface* webrtc_track, |
78 const WebKit::WebMediaStreamTrack& webkit_track) | 78 const blink::WebMediaStreamTrack& webkit_track) |
79 : state_(webrtc_track->state()), | 79 : state_(webrtc_track->state()), |
80 webrtc_track_(webrtc_track), | 80 webrtc_track_(webrtc_track), |
81 webkit_track_(webkit_track) { | 81 webkit_track_(webkit_track) { |
82 webrtc_track->RegisterObserver(this); | 82 webrtc_track->RegisterObserver(this); |
83 } | 83 } |
84 | 84 |
85 RemoteMediaStreamTrackObserver::~RemoteMediaStreamTrackObserver() { | 85 RemoteMediaStreamTrackObserver::~RemoteMediaStreamTrackObserver() { |
86 webrtc_track_->UnregisterObserver(this); | 86 webrtc_track_->UnregisterObserver(this); |
87 } | 87 } |
88 | 88 |
89 void RemoteMediaStreamTrackObserver::OnChanged() { | 89 void RemoteMediaStreamTrackObserver::OnChanged() { |
90 DCHECK(CalledOnValidThread()); | 90 DCHECK(CalledOnValidThread()); |
91 | 91 |
92 webrtc::MediaStreamTrackInterface::TrackState state = webrtc_track_->state(); | 92 webrtc::MediaStreamTrackInterface::TrackState state = webrtc_track_->state(); |
93 if (state == state_) | 93 if (state == state_) |
94 return; | 94 return; |
95 | 95 |
96 state_ = state; | 96 state_ = state; |
97 switch (state) { | 97 switch (state) { |
98 case webrtc::MediaStreamTrackInterface::kInitializing: | 98 case webrtc::MediaStreamTrackInterface::kInitializing: |
99 // Ignore the kInitializing state since there is no match in | 99 // Ignore the kInitializing state since there is no match in |
100 // WebMediaStreamSource::ReadyState. | 100 // WebMediaStreamSource::ReadyState. |
101 break; | 101 break; |
102 case webrtc::MediaStreamTrackInterface::kLive: | 102 case webrtc::MediaStreamTrackInterface::kLive: |
103 webkit_track_.source().setReadyState( | 103 webkit_track_.source().setReadyState( |
104 WebKit::WebMediaStreamSource::ReadyStateLive); | 104 blink::WebMediaStreamSource::ReadyStateLive); |
105 break; | 105 break; |
106 case webrtc::MediaStreamTrackInterface::kEnded: | 106 case webrtc::MediaStreamTrackInterface::kEnded: |
107 webkit_track_.source().setReadyState( | 107 webkit_track_.source().setReadyState( |
108 WebKit::WebMediaStreamSource::ReadyStateEnded); | 108 blink::WebMediaStreamSource::ReadyStateEnded); |
109 break; | 109 break; |
110 default: | 110 default: |
111 NOTREACHED(); | 111 NOTREACHED(); |
112 break; | 112 break; |
113 } | 113 } |
114 } | 114 } |
115 | 115 |
116 RemoteMediaStreamImpl::RemoteMediaStreamImpl( | 116 RemoteMediaStreamImpl::RemoteMediaStreamImpl( |
117 webrtc::MediaStreamInterface* webrtc_stream) | 117 webrtc::MediaStreamInterface* webrtc_stream) |
118 : webrtc_stream_(webrtc_stream) { | 118 : webrtc_stream_(webrtc_stream) { |
119 webrtc_stream_->RegisterObserver(this); | 119 webrtc_stream_->RegisterObserver(this); |
120 | 120 |
121 webrtc::AudioTrackVector webrtc_audio_tracks = | 121 webrtc::AudioTrackVector webrtc_audio_tracks = |
122 webrtc_stream_->GetAudioTracks(); | 122 webrtc_stream_->GetAudioTracks(); |
123 WebKit::WebVector<WebKit::WebMediaStreamTrack> webkit_audio_tracks( | 123 blink::WebVector<blink::WebMediaStreamTrack> webkit_audio_tracks( |
124 webrtc_audio_tracks.size()); | 124 webrtc_audio_tracks.size()); |
125 | 125 |
126 // Initialize WebKit audio tracks. | 126 // Initialize WebKit audio tracks. |
127 size_t i = 0; | 127 size_t i = 0; |
128 for (; i < webrtc_audio_tracks.size(); ++i) { | 128 for (; i < webrtc_audio_tracks.size(); ++i) { |
129 webrtc::AudioTrackInterface* audio_track = webrtc_audio_tracks[i]; | 129 webrtc::AudioTrackInterface* audio_track = webrtc_audio_tracks[i]; |
130 DCHECK(audio_track); | 130 DCHECK(audio_track); |
131 InitializeWebkitTrack(audio_track, &webkit_audio_tracks[i], | 131 InitializeWebkitTrack(audio_track, &webkit_audio_tracks[i], |
132 WebKit::WebMediaStreamSource::TypeAudio); | 132 blink::WebMediaStreamSource::TypeAudio); |
133 audio_track_observers_.push_back( | 133 audio_track_observers_.push_back( |
134 new RemoteMediaStreamTrackObserver(audio_track, | 134 new RemoteMediaStreamTrackObserver(audio_track, |
135 webkit_audio_tracks[i])); | 135 webkit_audio_tracks[i])); |
136 } | 136 } |
137 | 137 |
138 // Initialize WebKit video tracks. | 138 // Initialize WebKit video tracks. |
139 webrtc::VideoTrackVector webrtc_video_tracks = | 139 webrtc::VideoTrackVector webrtc_video_tracks = |
140 webrtc_stream_->GetVideoTracks(); | 140 webrtc_stream_->GetVideoTracks(); |
141 WebKit::WebVector<WebKit::WebMediaStreamTrack> webkit_video_tracks( | 141 blink::WebVector<blink::WebMediaStreamTrack> webkit_video_tracks( |
142 webrtc_video_tracks.size()); | 142 webrtc_video_tracks.size()); |
143 for (i = 0; i < webrtc_video_tracks.size(); ++i) { | 143 for (i = 0; i < webrtc_video_tracks.size(); ++i) { |
144 webrtc::VideoTrackInterface* video_track = webrtc_video_tracks[i]; | 144 webrtc::VideoTrackInterface* video_track = webrtc_video_tracks[i]; |
145 DCHECK(video_track); | 145 DCHECK(video_track); |
146 InitializeWebkitTrack(video_track, &webkit_video_tracks[i], | 146 InitializeWebkitTrack(video_track, &webkit_video_tracks[i], |
147 WebKit::WebMediaStreamSource::TypeVideo); | 147 blink::WebMediaStreamSource::TypeVideo); |
148 video_track_observers_.push_back( | 148 video_track_observers_.push_back( |
149 new RemoteMediaStreamTrackObserver(video_track, | 149 new RemoteMediaStreamTrackObserver(video_track, |
150 webkit_video_tracks[i])); | 150 webkit_video_tracks[i])); |
151 } | 151 } |
152 | 152 |
153 webkit_stream_.initialize(UTF8ToUTF16(webrtc_stream->label()), | 153 webkit_stream_.initialize(UTF8ToUTF16(webrtc_stream->label()), |
154 webkit_audio_tracks, webkit_video_tracks); | 154 webkit_audio_tracks, webkit_video_tracks); |
155 webkit_stream_.setExtraData(new MediaStreamExtraData(webrtc_stream, false)); | 155 webkit_stream_.setExtraData(new MediaStreamExtraData(webrtc_stream, false)); |
156 } | 156 } |
157 | 157 |
(...skipping 27 matching lines...) Expand all Loading... |
185 ++video_it; | 185 ++video_it; |
186 } | 186 } |
187 } | 187 } |
188 | 188 |
189 // Find added audio tracks. | 189 // Find added audio tracks. |
190 webrtc::AudioTrackVector webrtc_audio_tracks = | 190 webrtc::AudioTrackVector webrtc_audio_tracks = |
191 webrtc_stream_->GetAudioTracks(); | 191 webrtc_stream_->GetAudioTracks(); |
192 for (webrtc::AudioTrackVector::iterator it = webrtc_audio_tracks.begin(); | 192 for (webrtc::AudioTrackVector::iterator it = webrtc_audio_tracks.begin(); |
193 it != webrtc_audio_tracks.end(); ++it) { | 193 it != webrtc_audio_tracks.end(); ++it) { |
194 if (!FindTrackObserver(*it, audio_track_observers_)) { | 194 if (!FindTrackObserver(*it, audio_track_observers_)) { |
195 WebKit::WebMediaStreamTrack new_track; | 195 blink::WebMediaStreamTrack new_track; |
196 InitializeWebkitTrack(*it, &new_track, | 196 InitializeWebkitTrack(*it, &new_track, |
197 WebKit::WebMediaStreamSource::TypeAudio); | 197 blink::WebMediaStreamSource::TypeAudio); |
198 audio_track_observers_.push_back( | 198 audio_track_observers_.push_back( |
199 new RemoteMediaStreamTrackObserver(*it, new_track)); | 199 new RemoteMediaStreamTrackObserver(*it, new_track)); |
200 webkit_stream_.addTrack(new_track); | 200 webkit_stream_.addTrack(new_track); |
201 } | 201 } |
202 } | 202 } |
203 | 203 |
204 // Find added video tracks. | 204 // Find added video tracks. |
205 webrtc::VideoTrackVector webrtc_video_tracks = | 205 webrtc::VideoTrackVector webrtc_video_tracks = |
206 webrtc_stream_->GetVideoTracks(); | 206 webrtc_stream_->GetVideoTracks(); |
207 for (webrtc::VideoTrackVector::iterator it = webrtc_video_tracks.begin(); | 207 for (webrtc::VideoTrackVector::iterator it = webrtc_video_tracks.begin(); |
208 it != webrtc_video_tracks.end(); ++it) { | 208 it != webrtc_video_tracks.end(); ++it) { |
209 if (!FindTrackObserver(*it, video_track_observers_)) { | 209 if (!FindTrackObserver(*it, video_track_observers_)) { |
210 WebKit::WebMediaStreamTrack new_track; | 210 blink::WebMediaStreamTrack new_track; |
211 InitializeWebkitTrack(*it, &new_track, | 211 InitializeWebkitTrack(*it, &new_track, |
212 WebKit::WebMediaStreamSource::TypeVideo); | 212 blink::WebMediaStreamSource::TypeVideo); |
213 video_track_observers_.push_back( | 213 video_track_observers_.push_back( |
214 new RemoteMediaStreamTrackObserver(*it, new_track)); | 214 new RemoteMediaStreamTrackObserver(*it, new_track)); |
215 webkit_stream_.addTrack(new_track); | 215 webkit_stream_.addTrack(new_track); |
216 } | 216 } |
217 } | 217 } |
218 } | 218 } |
219 | 219 |
220 } // namespace content | 220 } // namespace content |
OLD | NEW |