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 |