| 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 "media/blink/webmediaplayer_impl.h" | 5 #include "media/blink/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 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 : new NullAudioSink(media_task_runner_)); | 190 : new NullAudioSink(media_task_runner_)); |
| 191 } | 191 } |
| 192 | 192 |
| 193 WebMediaPlayerImpl::~WebMediaPlayerImpl() { | 193 WebMediaPlayerImpl::~WebMediaPlayerImpl() { |
| 194 client_->setWebLayer(NULL); | 194 client_->setWebLayer(NULL); |
| 195 | 195 |
| 196 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 196 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 197 media_log_->AddEvent( | 197 media_log_->AddEvent( |
| 198 media_log_->CreateEvent(MediaLogEvent::WEBMEDIAPLAYER_DESTROYED)); | 198 media_log_->CreateEvent(MediaLogEvent::WEBMEDIAPLAYER_DESTROYED)); |
| 199 | 199 |
| 200 if (delegate_.get()) | 200 if (delegate_) |
| 201 delegate_->PlayerGone(this); | 201 delegate_->PlayerGone(this); |
| 202 | 202 |
| 203 // Abort any pending IO so stopping the pipeline doesn't get blocked. | 203 // Abort any pending IO so stopping the pipeline doesn't get blocked. |
| 204 if (data_source_) | 204 if (data_source_) |
| 205 data_source_->Abort(); | 205 data_source_->Abort(); |
| 206 if (chunk_demuxer_) { | 206 if (chunk_demuxer_) { |
| 207 chunk_demuxer_->Shutdown(); | 207 chunk_demuxer_->Shutdown(); |
| 208 chunk_demuxer_ = NULL; | 208 chunk_demuxer_ = NULL; |
| 209 } | 209 } |
| 210 | 210 |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 274 DVLOG(1) << __FUNCTION__; | 274 DVLOG(1) << __FUNCTION__; |
| 275 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 275 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 276 | 276 |
| 277 paused_ = false; | 277 paused_ = false; |
| 278 pipeline_.SetPlaybackRate(playback_rate_); | 278 pipeline_.SetPlaybackRate(playback_rate_); |
| 279 if (data_source_) | 279 if (data_source_) |
| 280 data_source_->MediaIsPlaying(); | 280 data_source_->MediaIsPlaying(); |
| 281 | 281 |
| 282 media_log_->AddEvent(media_log_->CreateEvent(MediaLogEvent::PLAY)); | 282 media_log_->AddEvent(media_log_->CreateEvent(MediaLogEvent::PLAY)); |
| 283 | 283 |
| 284 if (delegate_.get()) | 284 if (delegate_ && playback_rate_ > 0) |
| 285 delegate_->DidPlay(this); | 285 delegate_->DidPlay(this); |
| 286 } | 286 } |
| 287 | 287 |
| 288 void WebMediaPlayerImpl::pause() { | 288 void WebMediaPlayerImpl::pause() { |
| 289 DVLOG(1) << __FUNCTION__; | 289 DVLOG(1) << __FUNCTION__; |
| 290 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 290 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 291 | 291 |
| 292 const bool was_already_paused = paused_ || playback_rate_ == 0; |
| 292 paused_ = true; | 293 paused_ = true; |
| 293 pipeline_.SetPlaybackRate(0.0f); | 294 pipeline_.SetPlaybackRate(0.0f); |
| 294 if (data_source_) | 295 if (data_source_) |
| 295 data_source_->MediaIsPaused(); | 296 data_source_->MediaIsPaused(); |
| 296 paused_time_ = pipeline_.GetMediaTime(); | 297 paused_time_ = pipeline_.GetMediaTime(); |
| 297 | 298 |
| 298 media_log_->AddEvent(media_log_->CreateEvent(MediaLogEvent::PAUSE)); | 299 media_log_->AddEvent(media_log_->CreateEvent(MediaLogEvent::PAUSE)); |
| 299 | 300 |
| 300 if (delegate_.get()) | 301 if (!was_already_paused && delegate_) |
| 301 delegate_->DidPause(this); | 302 delegate_->DidPause(this); |
| 302 } | 303 } |
| 303 | 304 |
| 304 bool WebMediaPlayerImpl::supportsSave() const { | 305 bool WebMediaPlayerImpl::supportsSave() const { |
| 305 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 306 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 306 return supports_save_; | 307 return supports_save_; |
| 307 } | 308 } |
| 308 | 309 |
| 309 void WebMediaPlayerImpl::seek(double seconds) { | 310 void WebMediaPlayerImpl::seek(double seconds) { |
| 310 DVLOG(1) << __FUNCTION__ << "(" << seconds << ")"; | 311 DVLOG(1) << __FUNCTION__ << "(" << seconds << ")"; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 350 // following checks so rewind uses reasonable values also. | 351 // following checks so rewind uses reasonable values also. |
| 351 if (rate < 0.0) | 352 if (rate < 0.0) |
| 352 return; | 353 return; |
| 353 | 354 |
| 354 // Limit rates to reasonable values by clamping. | 355 // Limit rates to reasonable values by clamping. |
| 355 if (rate != 0.0) { | 356 if (rate != 0.0) { |
| 356 if (rate < kMinRate) | 357 if (rate < kMinRate) |
| 357 rate = kMinRate; | 358 rate = kMinRate; |
| 358 else if (rate > kMaxRate) | 359 else if (rate > kMaxRate) |
| 359 rate = kMaxRate; | 360 rate = kMaxRate; |
| 361 if (playback_rate_ == 0 && delegate_) |
| 362 delegate_->DidPlay(this); |
| 363 } else if (playback_rate_ != 0 && delegate_) { |
| 364 delegate_->DidPause(this); |
| 360 } | 365 } |
| 361 | 366 |
| 362 playback_rate_ = rate; | 367 playback_rate_ = rate; |
| 363 if (!paused_) { | 368 if (!paused_) { |
| 364 pipeline_.SetPlaybackRate(rate); | 369 pipeline_.SetPlaybackRate(rate); |
| 365 if (data_source_) | 370 if (data_source_) |
| 366 data_source_->MediaPlaybackRateChanged(rate); | 371 data_source_->MediaPlaybackRateChanged(rate); |
| 367 } | 372 } |
| 368 } | 373 } |
| 369 | 374 |
| (...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1024 compositor_task_runner_->PostTask(FROM_HERE, | 1029 compositor_task_runner_->PostTask(FROM_HERE, |
| 1025 base::Bind(&GetCurrentFrameAndSignal, | 1030 base::Bind(&GetCurrentFrameAndSignal, |
| 1026 base::Unretained(compositor_), | 1031 base::Unretained(compositor_), |
| 1027 &video_frame, | 1032 &video_frame, |
| 1028 &event)); | 1033 &event)); |
| 1029 event.Wait(); | 1034 event.Wait(); |
| 1030 return video_frame; | 1035 return video_frame; |
| 1031 } | 1036 } |
| 1032 | 1037 |
| 1033 } // namespace media | 1038 } // namespace media |
| OLD | NEW |