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 |