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/WebRuntimeFeatures.h" | 71 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h" |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 | 226 |
225 gpu_factories_ = NULL; | 227 gpu_factories_ = NULL; |
226 | 228 |
227 // Make sure to kill the pipeline so there's no more media threads running. | 229 // Make sure to kill the pipeline so there's no more media threads running. |
228 // Note: stopping the pipeline might block for a long time. | 230 // Note: stopping the pipeline might block for a long time. |
229 base::WaitableEvent waiter(false, false); | 231 base::WaitableEvent waiter(false, false); |
230 pipeline_.Stop( | 232 pipeline_.Stop( |
231 base::Bind(&base::WaitableEvent::Signal, base::Unretained(&waiter))); | 233 base::Bind(&base::WaitableEvent::Signal, base::Unretained(&waiter))); |
232 waiter.Wait(); | 234 waiter.Wait(); |
233 | 235 |
| 236 scheduler_runner_->DeleteSoon(FROM_HERE, scheduler_); |
| 237 |
234 // Let V8 know we are not using extra resources anymore. | 238 // Let V8 know we are not using extra resources anymore. |
235 if (incremented_externally_allocated_memory_) { | 239 if (incremented_externally_allocated_memory_) { |
236 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory( | 240 v8::Isolate::GetCurrent()->AdjustAmountOfExternalAllocatedMemory( |
237 -kPlayerExtraMemory); | 241 -kPlayerExtraMemory); |
238 incremented_externally_allocated_memory_ = false; | 242 incremented_externally_allocated_memory_ = false; |
239 } | 243 } |
240 } | 244 } |
241 | 245 |
242 namespace { | 246 namespace { |
243 | 247 |
(...skipping 953 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1197 video_decoders.push_back( | 1201 video_decoders.push_back( |
1198 new media::GpuVideoDecoder(gpu_factories_, media_log_)); | 1202 new media::GpuVideoDecoder(gpu_factories_, media_log_)); |
1199 } | 1203 } |
1200 | 1204 |
1201 #if !defined(MEDIA_DISABLE_LIBVPX) | 1205 #if !defined(MEDIA_DISABLE_LIBVPX) |
1202 video_decoders.push_back(new media::VpxVideoDecoder(media_loop_)); | 1206 video_decoders.push_back(new media::VpxVideoDecoder(media_loop_)); |
1203 #endif // !defined(MEDIA_DISABLE_LIBVPX) | 1207 #endif // !defined(MEDIA_DISABLE_LIBVPX) |
1204 | 1208 |
1205 video_decoders.push_back(new media::FFmpegVideoDecoder(media_loop_)); | 1209 video_decoders.push_back(new media::FFmpegVideoDecoder(media_loop_)); |
1206 | 1210 |
1207 scoped_ptr<media::VideoRenderer> video_renderer( | 1211 scheduler_runner_ = |
1208 new media::VideoRendererImpl( | 1212 RenderThreadImpl::current()->compositor_message_loop_proxy() |
1209 media_loop_, | 1213 ? RenderThreadImpl::current()->compositor_message_loop_proxy() |
1210 video_decoders.Pass(), | 1214 : base::MessageLoopProxy::current(); |
1211 set_decryptor_ready_cb, | 1215 scheduler_ = new media::VideoFrameSchedulerImpl( |
1212 base::Bind(&WebMediaPlayerImpl::FrameReady, base::Unretained(this)), | 1216 scheduler_runner_, |
1213 true)); | 1217 base::Bind(&WebMediaPlayerImpl::FrameReady, base::Unretained(this))); |
| 1218 |
| 1219 scoped_ptr<media::VideoRenderer> video_renderer(new media::VideoRendererImpl( |
| 1220 media_loop_, |
| 1221 scoped_ptr<media::VideoFrameScheduler>( |
| 1222 new media::VideoFrameSchedulerProxy( |
| 1223 media_loop_, scheduler_runner_, scheduler_)), |
| 1224 video_decoders.Pass(), |
| 1225 set_decryptor_ready_cb)); |
1214 filter_collection->SetVideoRenderer(video_renderer.Pass()); | 1226 filter_collection->SetVideoRenderer(video_renderer.Pass()); |
1215 | 1227 |
1216 if (cmd_line->HasSwitch(switches::kEnableInbandTextTracks)) { | 1228 if (cmd_line->HasSwitch(switches::kEnableInbandTextTracks)) { |
1217 scoped_ptr<media::TextRenderer> text_renderer( | 1229 scoped_ptr<media::TextRenderer> text_renderer( |
1218 new media::TextRenderer( | 1230 new media::TextRenderer( |
1219 media_loop_, | 1231 media_loop_, |
1220 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnAddTextTrack))); | 1232 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnAddTextTrack))); |
1221 | 1233 |
1222 filter_collection->SetTextRenderer(text_renderer.Pass()); | 1234 filter_collection->SetTextRenderer(text_renderer.Pass()); |
1223 } | 1235 } |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1339 | 1351 |
1340 if (web_cdm_) { | 1352 if (web_cdm_) { |
1341 decryptor_ready_cb.Run(web_cdm_->GetDecryptor()); | 1353 decryptor_ready_cb.Run(web_cdm_->GetDecryptor()); |
1342 return; | 1354 return; |
1343 } | 1355 } |
1344 | 1356 |
1345 decryptor_ready_cb_ = decryptor_ready_cb; | 1357 decryptor_ready_cb_ = decryptor_ready_cb; |
1346 } | 1358 } |
1347 | 1359 |
1348 } // namespace content | 1360 } // namespace content |
OLD | NEW |