OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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/webmediaplayer_impl.h" | 5 #include "content/renderer/media/webmediaplayer_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
50 #include "media/base/text_renderer.h" | 50 #include "media/base/text_renderer.h" |
51 #include "media/base/video_frame.h" | 51 #include "media/base/video_frame.h" |
52 #include "media/filters/audio_renderer_impl.h" | 52 #include "media/filters/audio_renderer_impl.h" |
53 #include "media/filters/chunk_demuxer.h" | 53 #include "media/filters/chunk_demuxer.h" |
54 #include "media/filters/ffmpeg_audio_decoder.h" | 54 #include "media/filters/ffmpeg_audio_decoder.h" |
55 #include "media/filters/ffmpeg_demuxer.h" | 55 #include "media/filters/ffmpeg_demuxer.h" |
56 #include "media/filters/ffmpeg_video_decoder.h" | 56 #include "media/filters/ffmpeg_video_decoder.h" |
57 #include "media/filters/gpu_video_accelerator_factories.h" | 57 #include "media/filters/gpu_video_accelerator_factories.h" |
58 #include "media/filters/gpu_video_decoder.h" | 58 #include "media/filters/gpu_video_decoder.h" |
59 #include "media/filters/opus_audio_decoder.h" | 59 #include "media/filters/opus_audio_decoder.h" |
60 #include "media/filters/video_frame_scheduler_impl.h" | |
61 #include "media/filters/video_frame_scheduler_proxy.h" | |
60 #include "media/filters/video_renderer_impl.h" | 62 #include "media/filters/video_renderer_impl.h" |
61 #include "media/filters/vpx_video_decoder.h" | 63 #include "media/filters/vpx_video_decoder.h" |
62 #include "third_party/WebKit/public/platform/WebContentDecryptionModule.h" | 64 #include "third_party/WebKit/public/platform/WebContentDecryptionModule.h" |
63 #include "third_party/WebKit/public/platform/WebMediaSource.h" | 65 #include "third_party/WebKit/public/platform/WebMediaSource.h" |
64 #include "third_party/WebKit/public/platform/WebRect.h" | 66 #include "third_party/WebKit/public/platform/WebRect.h" |
65 #include "third_party/WebKit/public/platform/WebSize.h" | 67 #include "third_party/WebKit/public/platform/WebSize.h" |
66 #include "third_party/WebKit/public/platform/WebString.h" | 68 #include "third_party/WebKit/public/platform/WebString.h" |
67 #include "third_party/WebKit/public/platform/WebURL.h" | 69 #include "third_party/WebKit/public/platform/WebURL.h" |
68 #include "third_party/WebKit/public/web/WebDocument.h" | 70 #include "third_party/WebKit/public/web/WebDocument.h" |
69 #include "third_party/WebKit/public/web/WebLocalFrame.h" | 71 #include "third_party/WebKit/public/web/WebLocalFrame.h" |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
164 client_(client), | 166 client_(client), |
165 delegate_(delegate), | 167 delegate_(delegate), |
166 defer_load_cb_(params.defer_load_cb()), | 168 defer_load_cb_(params.defer_load_cb()), |
167 accelerated_compositing_reported_(false), | 169 accelerated_compositing_reported_(false), |
168 incremented_externally_allocated_memory_(false), | 170 incremented_externally_allocated_memory_(false), |
169 gpu_factories_(RenderThreadImpl::current()->GetGpuFactories()), | 171 gpu_factories_(RenderThreadImpl::current()->GetGpuFactories()), |
170 is_local_source_(false), | 172 is_local_source_(false), |
171 supports_save_(true), | 173 supports_save_(true), |
172 starting_(false), | 174 starting_(false), |
173 chunk_demuxer_(NULL), | 175 chunk_demuxer_(NULL), |
174 compositor_( // Threaded compositing isn't enabled universally yet. | 176 // Threaded compositing isn't enabled universally yet. |
175 (RenderThreadImpl::current()->compositor_message_loop_proxy() | 177 compositor_runner_( |
176 ? RenderThreadImpl::current()->compositor_message_loop_proxy() | 178 RenderThreadImpl::current()->compositor_message_loop_proxy() |
177 : base::MessageLoopProxy::current()), | 179 ? RenderThreadImpl::current()->compositor_message_loop_proxy() |
180 : base::MessageLoopProxy::current()), | |
181 compositor_( | |
182 compositor_runner_, | |
178 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNaturalSizeChanged), | 183 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNaturalSizeChanged), |
179 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnOpacityChanged)), | 184 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnOpacityChanged)), |
185 scheduler_(NULL), | |
180 text_track_index_(0), | 186 text_track_index_(0), |
181 web_cdm_(NULL) { | 187 web_cdm_(NULL) { |
182 media_log_->AddEvent( | 188 media_log_->AddEvent( |
183 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); | 189 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); |
184 | 190 |
185 // |gpu_factories_| requires that its entry points be called on its | 191 // |gpu_factories_| requires that its entry points be called on its |
186 // |GetTaskRunner()|. Since |pipeline_| will own decoders created from the | 192 // |GetTaskRunner()|. Since |pipeline_| will own decoders created from the |
187 // factories, require that their message loops are identical. | 193 // factories, require that their message loops are identical. |
188 DCHECK(!gpu_factories_ || (gpu_factories_->GetTaskRunner() == media_loop_)); | 194 DCHECK(!gpu_factories_ || (gpu_factories_->GetTaskRunner() == media_loop_)); |
189 | 195 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
225 | 231 |
226 gpu_factories_ = NULL; | 232 gpu_factories_ = NULL; |
227 | 233 |
228 // Make sure to kill the pipeline so there's no more media threads running. | 234 // Make sure to kill the pipeline so there's no more media threads running. |
229 // Note: stopping the pipeline might block for a long time. | 235 // Note: stopping the pipeline might block for a long time. |
230 base::WaitableEvent waiter(false, false); | 236 base::WaitableEvent waiter(false, false); |
231 pipeline_.Stop( | 237 pipeline_.Stop( |
232 base::Bind(&base::WaitableEvent::Signal, base::Unretained(&waiter))); | 238 base::Bind(&base::WaitableEvent::Signal, base::Unretained(&waiter))); |
233 waiter.Wait(); | 239 waiter.Wait(); |
234 | 240 |
241 if (scheduler_) | |
242 compositor_runner_->DeleteSoon(FROM_HERE, scheduler_); | |
243 | |
235 // Let V8 know we are not using extra resources anymore. | 244 // Let V8 know we are not using extra resources anymore. |
236 if (incremented_externally_allocated_memory_) { | 245 if (incremented_externally_allocated_memory_) { |
237 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory( | 246 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory( |
238 -kPlayerExtraMemory); | 247 -kPlayerExtraMemory); |
239 incremented_externally_allocated_memory_ = false; | 248 incremented_externally_allocated_memory_ = false; |
240 } | 249 } |
241 } | 250 } |
242 | 251 |
243 namespace { | 252 namespace { |
244 | 253 |
(...skipping 953 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1198 video_decoders.push_back( | 1207 video_decoders.push_back( |
1199 new media::GpuVideoDecoder(gpu_factories_, media_log_)); | 1208 new media::GpuVideoDecoder(gpu_factories_, media_log_)); |
1200 } | 1209 } |
1201 | 1210 |
1202 #if !defined(MEDIA_DISABLE_LIBVPX) | 1211 #if !defined(MEDIA_DISABLE_LIBVPX) |
1203 video_decoders.push_back(new media::VpxVideoDecoder(media_loop_)); | 1212 video_decoders.push_back(new media::VpxVideoDecoder(media_loop_)); |
1204 #endif // !defined(MEDIA_DISABLE_LIBVPX) | 1213 #endif // !defined(MEDIA_DISABLE_LIBVPX) |
1205 | 1214 |
1206 video_decoders.push_back(new media::FFmpegVideoDecoder(media_loop_)); | 1215 video_decoders.push_back(new media::FFmpegVideoDecoder(media_loop_)); |
1207 | 1216 |
1208 scoped_ptr<media::VideoRenderer> video_renderer( | 1217 scheduler_ = new media::VideoFrameSchedulerImpl( |
1209 new media::VideoRendererImpl( | 1218 compositor_runner_, BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::FrameReady)); |
1210 media_loop_, | 1219 |
1211 video_decoders.Pass(), | 1220 scoped_ptr<media::VideoRenderer> video_renderer(new media::VideoRendererImpl( |
1212 set_decryptor_ready_cb, | 1221 media_loop_, |
1213 base::Bind(&WebMediaPlayerImpl::FrameReady, base::Unretained(this)), | 1222 scoped_ptr<media::VideoFrameScheduler>( |
1214 true)); | 1223 new media::VideoFrameSchedulerProxy( |
1224 media_loop_, compositor_runner_, scheduler_)), | |
acolwell GONE FROM CHROMIUM
2014/04/24 16:43:59
Any reason we can't simply have the proxy own the
scherkus (not reviewing)
2014/04/25 02:04:47
nope! done
| |
1225 video_decoders.Pass(), | |
1226 set_decryptor_ready_cb)); | |
1215 filter_collection->SetVideoRenderer(video_renderer.Pass()); | 1227 filter_collection->SetVideoRenderer(video_renderer.Pass()); |
1216 | 1228 |
1217 if (cmd_line->HasSwitch(switches::kEnableInbandTextTracks)) { | 1229 if (cmd_line->HasSwitch(switches::kEnableInbandTextTracks)) { |
1218 scoped_ptr<media::TextRenderer> text_renderer( | 1230 scoped_ptr<media::TextRenderer> text_renderer( |
1219 new media::TextRenderer( | 1231 new media::TextRenderer( |
1220 media_loop_, | 1232 media_loop_, |
1221 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnAddTextTrack))); | 1233 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnAddTextTrack))); |
1222 | 1234 |
1223 filter_collection->SetTextRenderer(text_renderer.Pass()); | 1235 filter_collection->SetTextRenderer(text_renderer.Pass()); |
1224 } | 1236 } |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1340 | 1352 |
1341 if (web_cdm_) { | 1353 if (web_cdm_) { |
1342 decryptor_ready_cb.Run(web_cdm_->GetDecryptor()); | 1354 decryptor_ready_cb.Run(web_cdm_->GetDecryptor()); |
1343 return; | 1355 return; |
1344 } | 1356 } |
1345 | 1357 |
1346 decryptor_ready_cb_ = decryptor_ready_cb; | 1358 decryptor_ready_cb_ = decryptor_ready_cb; |
1347 } | 1359 } |
1348 | 1360 |
1349 } // namespace content | 1361 } // namespace content |
OLD | NEW |