| 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 1125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1195 video_decoders.push_back( | 1197 video_decoders.push_back( |
| 1196 new media::GpuVideoDecoder(gpu_factories_, media_log_)); | 1198 new media::GpuVideoDecoder(gpu_factories_, media_log_)); |
| 1197 } | 1199 } |
| 1198 | 1200 |
| 1199 #if !defined(MEDIA_DISABLE_LIBVPX) | 1201 #if !defined(MEDIA_DISABLE_LIBVPX) |
| 1200 video_decoders.push_back(new media::VpxVideoDecoder(media_loop_)); | 1202 video_decoders.push_back(new media::VpxVideoDecoder(media_loop_)); |
| 1201 #endif // !defined(MEDIA_DISABLE_LIBVPX) | 1203 #endif // !defined(MEDIA_DISABLE_LIBVPX) |
| 1202 | 1204 |
| 1203 video_decoders.push_back(new media::FFmpegVideoDecoder(media_loop_)); | 1205 video_decoders.push_back(new media::FFmpegVideoDecoder(media_loop_)); |
| 1204 | 1206 |
| 1205 scoped_ptr<media::VideoRenderer> video_renderer( | 1207 // Use a proxy to deliver frames from the media thread to the real scheduler |
| 1206 new media::VideoRendererImpl( | 1208 // living on the compositor thread. |
| 1207 media_loop_, | 1209 scoped_ptr<media::VideoFrameScheduler> scheduler_impl( |
| 1208 video_decoders.Pass(), | 1210 new media::VideoFrameSchedulerImpl( |
| 1209 set_decryptor_ready_cb, | 1211 compositor_task_runner_, |
| 1210 base::Bind(&WebMediaPlayerImpl::FrameReady, base::Unretained(this)), | 1212 base::Bind(&VideoFrameCompositor::UpdateCurrentFrame, |
| 1211 true)); | 1213 base::Unretained(compositor_)))); |
| 1214 scoped_ptr<media::VideoFrameScheduler> scheduler_proxy( |
| 1215 new media::VideoFrameSchedulerProxy( |
| 1216 media_loop_, compositor_task_runner_, scheduler_impl.Pass())); |
| 1217 |
| 1218 scoped_ptr<media::VideoRenderer> video_renderer(new media::VideoRendererImpl( |
| 1219 media_loop_, |
| 1220 scheduler_proxy.Pass(), |
| 1221 video_decoders.Pass(), |
| 1222 set_decryptor_ready_cb)); |
| 1212 filter_collection->SetVideoRenderer(video_renderer.Pass()); | 1223 filter_collection->SetVideoRenderer(video_renderer.Pass()); |
| 1213 | 1224 |
| 1214 if (cmd_line->HasSwitch(switches::kEnableInbandTextTracks)) { | 1225 if (cmd_line->HasSwitch(switches::kEnableInbandTextTracks)) { |
| 1215 scoped_ptr<media::TextRenderer> text_renderer( | 1226 scoped_ptr<media::TextRenderer> text_renderer( |
| 1216 new media::TextRenderer( | 1227 new media::TextRenderer( |
| 1217 media_loop_, | 1228 media_loop_, |
| 1218 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnAddTextTrack))); | 1229 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnAddTextTrack))); |
| 1219 | 1230 |
| 1220 filter_collection->SetTextRenderer(text_renderer.Pass()); | 1231 filter_collection->SetTextRenderer(text_renderer.Pass()); |
| 1221 } | 1232 } |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1297 | 1308 |
| 1298 void WebMediaPlayerImpl::OnOpacityChanged(bool opaque) { | 1309 void WebMediaPlayerImpl::OnOpacityChanged(bool opaque) { |
| 1299 DCHECK(main_loop_->BelongsToCurrentThread()); | 1310 DCHECK(main_loop_->BelongsToCurrentThread()); |
| 1300 DCHECK_NE(ready_state_, WebMediaPlayer::ReadyStateHaveNothing); | 1311 DCHECK_NE(ready_state_, WebMediaPlayer::ReadyStateHaveNothing); |
| 1301 | 1312 |
| 1302 opaque_ = opaque; | 1313 opaque_ = opaque; |
| 1303 if (video_weblayer_) | 1314 if (video_weblayer_) |
| 1304 video_weblayer_->setOpaque(opaque_); | 1315 video_weblayer_->setOpaque(opaque_); |
| 1305 } | 1316 } |
| 1306 | 1317 |
| 1307 void WebMediaPlayerImpl::FrameReady( | |
| 1308 const scoped_refptr<media::VideoFrame>& frame) { | |
| 1309 compositor_task_runner_->PostTask( | |
| 1310 FROM_HERE, | |
| 1311 base::Bind(&VideoFrameCompositor::UpdateCurrentFrame, | |
| 1312 base::Unretained(compositor_), | |
| 1313 frame)); | |
| 1314 } | |
| 1315 | |
| 1316 void WebMediaPlayerImpl::SetDecryptorReadyCB( | 1318 void WebMediaPlayerImpl::SetDecryptorReadyCB( |
| 1317 const media::DecryptorReadyCB& decryptor_ready_cb) { | 1319 const media::DecryptorReadyCB& decryptor_ready_cb) { |
| 1318 DCHECK(main_loop_->BelongsToCurrentThread()); | 1320 DCHECK(main_loop_->BelongsToCurrentThread()); |
| 1319 | 1321 |
| 1320 // Cancels the previous decryptor request. | 1322 // Cancels the previous decryptor request. |
| 1321 if (decryptor_ready_cb.is_null()) { | 1323 if (decryptor_ready_cb.is_null()) { |
| 1322 if (!decryptor_ready_cb_.is_null()) | 1324 if (!decryptor_ready_cb_.is_null()) |
| 1323 base::ResetAndReturn(&decryptor_ready_cb_).Run(NULL); | 1325 base::ResetAndReturn(&decryptor_ready_cb_).Run(NULL); |
| 1324 return; | 1326 return; |
| 1325 } | 1327 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1341 | 1343 |
| 1342 if (web_cdm_) { | 1344 if (web_cdm_) { |
| 1343 decryptor_ready_cb.Run(web_cdm_->GetDecryptor()); | 1345 decryptor_ready_cb.Run(web_cdm_->GetDecryptor()); |
| 1344 return; | 1346 return; |
| 1345 } | 1347 } |
| 1346 | 1348 |
| 1347 decryptor_ready_cb_ = decryptor_ready_cb; | 1349 decryptor_ready_cb_ = decryptor_ready_cb; |
| 1348 } | 1350 } |
| 1349 | 1351 |
| 1350 } // namespace content | 1352 } // namespace content |
| OLD | NEW |