| 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 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 playback_rate_(0.0f), | 161 playback_rate_(0.0f), |
| 162 pending_seek_(false), | 162 pending_seek_(false), |
| 163 pending_seek_seconds_(0.0f), | 163 pending_seek_seconds_(0.0f), |
| 164 client_(client), | 164 client_(client), |
| 165 delegate_(delegate), | 165 delegate_(delegate), |
| 166 defer_load_cb_(params.defer_load_cb()), | 166 defer_load_cb_(params.defer_load_cb()), |
| 167 accelerated_compositing_reported_(false), | 167 accelerated_compositing_reported_(false), |
| 168 incremented_externally_allocated_memory_(false), | 168 incremented_externally_allocated_memory_(false), |
| 169 gpu_factories_(RenderThreadImpl::current()->GetGpuFactories()), | 169 gpu_factories_(RenderThreadImpl::current()->GetGpuFactories()), |
| 170 supports_save_(true), | 170 supports_save_(true), |
| 171 starting_(false), | |
| 172 chunk_demuxer_(NULL), | 171 chunk_demuxer_(NULL), |
| 173 // Threaded compositing isn't enabled universally yet. | 172 // Threaded compositing isn't enabled universally yet. |
| 174 compositor_task_runner_( | 173 compositor_task_runner_( |
| 175 RenderThreadImpl::current()->compositor_message_loop_proxy() | 174 RenderThreadImpl::current()->compositor_message_loop_proxy() |
| 176 ? RenderThreadImpl::current()->compositor_message_loop_proxy() | 175 ? RenderThreadImpl::current()->compositor_message_loop_proxy() |
| 177 : base::MessageLoopProxy::current()), | 176 : base::MessageLoopProxy::current()), |
| 178 compositor_(new VideoFrameCompositor( | 177 compositor_(new VideoFrameCompositor( |
| 179 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNaturalSizeChanged), | 178 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNaturalSizeChanged), |
| 180 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnOpacityChanged))), | 179 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnOpacityChanged))), |
| 181 text_track_index_(0), | 180 text_track_index_(0), |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 334 | 333 |
| 335 void WebMediaPlayerImpl::seek(double seconds) { | 334 void WebMediaPlayerImpl::seek(double seconds) { |
| 336 DVLOG(1) << __FUNCTION__ << "(" << seconds << ")"; | 335 DVLOG(1) << __FUNCTION__ << "(" << seconds << ")"; |
| 337 DCHECK(main_loop_->BelongsToCurrentThread()); | 336 DCHECK(main_loop_->BelongsToCurrentThread()); |
| 338 | 337 |
| 339 if (ready_state_ > WebMediaPlayer::ReadyStateHaveMetadata) | 338 if (ready_state_ > WebMediaPlayer::ReadyStateHaveMetadata) |
| 340 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); | 339 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); |
| 341 | 340 |
| 342 base::TimeDelta seek_time = ConvertSecondsToTimestamp(seconds); | 341 base::TimeDelta seek_time = ConvertSecondsToTimestamp(seconds); |
| 343 | 342 |
| 344 if (starting_ || seeking_) { | 343 if (seeking_) { |
| 345 pending_seek_ = true; | 344 pending_seek_ = true; |
| 346 pending_seek_seconds_ = seconds; | 345 pending_seek_seconds_ = seconds; |
| 347 if (chunk_demuxer_) | 346 if (chunk_demuxer_) |
| 348 chunk_demuxer_->CancelPendingSeek(seek_time); | 347 chunk_demuxer_->CancelPendingSeek(seek_time); |
| 349 return; | 348 return; |
| 350 } | 349 } |
| 351 | 350 |
| 352 media_log_->AddEvent(media_log_->CreateSeekEvent(seconds)); | 351 media_log_->AddEvent(media_log_->CreateSeekEvent(seconds)); |
| 353 | 352 |
| 354 // Update our paused time. | 353 // Update our paused time. |
| (...skipping 538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 893 void WebMediaPlayerImpl::InvalidateOnMainThread() { | 892 void WebMediaPlayerImpl::InvalidateOnMainThread() { |
| 894 DCHECK(main_loop_->BelongsToCurrentThread()); | 893 DCHECK(main_loop_->BelongsToCurrentThread()); |
| 895 TRACE_EVENT0("media", "WebMediaPlayerImpl::InvalidateOnMainThread"); | 894 TRACE_EVENT0("media", "WebMediaPlayerImpl::InvalidateOnMainThread"); |
| 896 | 895 |
| 897 client_->repaint(); | 896 client_->repaint(); |
| 898 } | 897 } |
| 899 | 898 |
| 900 void WebMediaPlayerImpl::OnPipelineSeek(PipelineStatus status) { | 899 void WebMediaPlayerImpl::OnPipelineSeek(PipelineStatus status) { |
| 901 DVLOG(1) << __FUNCTION__ << "(" << status << ")"; | 900 DVLOG(1) << __FUNCTION__ << "(" << status << ")"; |
| 902 DCHECK(main_loop_->BelongsToCurrentThread()); | 901 DCHECK(main_loop_->BelongsToCurrentThread()); |
| 903 starting_ = false; | |
| 904 seeking_ = false; | 902 seeking_ = false; |
| 905 if (pending_seek_) { | 903 if (pending_seek_) { |
| 906 pending_seek_ = false; | 904 pending_seek_ = false; |
| 907 seek(pending_seek_seconds_); | 905 seek(pending_seek_seconds_); |
| 908 return; | 906 return; |
| 909 } | 907 } |
| 910 | 908 |
| 911 if (status != media::PIPELINE_OK) { | 909 if (status != media::PIPELINE_OK) { |
| 912 OnPipelineError(status); | 910 OnPipelineError(status); |
| 913 return; | 911 return; |
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1190 if (cmd_line->HasSwitch(switches::kEnableInbandTextTracks)) { | 1188 if (cmd_line->HasSwitch(switches::kEnableInbandTextTracks)) { |
| 1191 scoped_ptr<media::TextRenderer> text_renderer( | 1189 scoped_ptr<media::TextRenderer> text_renderer( |
| 1192 new media::TextRenderer( | 1190 new media::TextRenderer( |
| 1193 media_loop_, | 1191 media_loop_, |
| 1194 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnAddTextTrack))); | 1192 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnAddTextTrack))); |
| 1195 | 1193 |
| 1196 filter_collection->SetTextRenderer(text_renderer.Pass()); | 1194 filter_collection->SetTextRenderer(text_renderer.Pass()); |
| 1197 } | 1195 } |
| 1198 | 1196 |
| 1199 // ... and we're ready to go! | 1197 // ... and we're ready to go! |
| 1200 starting_ = true; | 1198 seeking_ = true; |
| 1201 pipeline_.Start( | 1199 pipeline_.Start( |
| 1202 filter_collection.Pass(), | 1200 filter_collection.Pass(), |
| 1203 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineEnded), | 1201 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineEnded), |
| 1204 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineError), | 1202 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineError), |
| 1205 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineSeek), | 1203 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineSeek), |
| 1206 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineMetadata), | 1204 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineMetadata), |
| 1207 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelinePrerollCompleted), | 1205 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelinePrerollCompleted), |
| 1208 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDurationChanged)); | 1206 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDurationChanged)); |
| 1209 } | 1207 } |
| 1210 | 1208 |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1345 compositor_task_runner_->PostTask(FROM_HERE, | 1343 compositor_task_runner_->PostTask(FROM_HERE, |
| 1346 base::Bind(&GetCurrentFrameAndSignal, | 1344 base::Bind(&GetCurrentFrameAndSignal, |
| 1347 base::Unretained(compositor_), | 1345 base::Unretained(compositor_), |
| 1348 &video_frame, | 1346 &video_frame, |
| 1349 &event)); | 1347 &event)); |
| 1350 event.Wait(); | 1348 event.Wait(); |
| 1351 return video_frame; | 1349 return video_frame; |
| 1352 } | 1350 } |
| 1353 | 1351 |
| 1354 } // namespace content | 1352 } // namespace content |
| OLD | NEW |