| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/base/android/media_source_player.h" | 5 #include "media/base/android/media_source_player.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/android/jni_android.h" | 9 #include "base/android/jni_android.h" |
| 10 #include "base/android/jni_string.h" | 10 #include "base/android/jni_string.h" |
| 11 #include "base/barrier_closure.h" | 11 #include "base/barrier_closure.h" |
| 12 #include "base/basictypes.h" | 12 #include "base/basictypes.h" |
| 13 #include "base/bind.h" | 13 #include "base/bind.h" |
| 14 #include "base/callback_helpers.h" | 14 #include "base/callback_helpers.h" |
| 15 #include "base/logging.h" | 15 #include "base/logging.h" |
| 16 #include "base/strings/string_number_conversions.h" | 16 #include "base/strings/string_number_conversions.h" |
| 17 #include "base/trace_event/trace_event.h" | 17 #include "base/trace_event/trace_event.h" |
| 18 #include "media/base/android/audio_decoder_job.h" | 18 #include "media/base/android/audio_decoder_job.h" |
| 19 #include "media/base/android/media_player_manager.h" | 19 #include "media/base/android/media_player_manager.h" |
| 20 #include "media/base/android/video_decoder_job.h" | 20 #include "media/base/android/video_decoder_job.h" |
| 21 #include "media/base/bind_to_current_loop.h" |
| 21 #include "media/base/timestamp_constants.h" | 22 #include "media/base/timestamp_constants.h" |
| 22 | 23 |
| 23 namespace media { | 24 namespace media { |
| 24 | 25 |
| 25 MediaSourcePlayer::MediaSourcePlayer( | 26 MediaSourcePlayer::MediaSourcePlayer( |
| 26 int player_id, | 27 int player_id, |
| 27 MediaPlayerManager* manager, | 28 MediaPlayerManager* manager, |
| 28 const RequestMediaResourcesCB& request_media_resources_cb, | 29 const RequestMediaResourcesCB& request_media_resources_cb, |
| 29 scoped_ptr<DemuxerAndroid> demuxer, | 30 scoped_ptr<DemuxerAndroid> demuxer, |
| 30 const GURL& frame_url) | 31 const GURL& frame_url) |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 251 if (data.type == DemuxerStream::AUDIO) | 252 if (data.type == DemuxerStream::AUDIO) |
| 252 audio_decoder_job_->OnDataReceived(data); | 253 audio_decoder_job_->OnDataReceived(data); |
| 253 else if (data.type == DemuxerStream::VIDEO) | 254 else if (data.type == DemuxerStream::VIDEO) |
| 254 video_decoder_job_->OnDataReceived(data); | 255 video_decoder_job_->OnDataReceived(data); |
| 255 } | 256 } |
| 256 | 257 |
| 257 void MediaSourcePlayer::OnDemuxerDurationChanged(base::TimeDelta duration) { | 258 void MediaSourcePlayer::OnDemuxerDurationChanged(base::TimeDelta duration) { |
| 258 duration_ = duration; | 259 duration_ = duration; |
| 259 } | 260 } |
| 260 | 261 |
| 261 void MediaSourcePlayer::OnMediaCryptoReady() { | 262 void MediaSourcePlayer::OnMediaCryptoReady( |
| 263 MediaDrmBridge::JavaObjectPtr /* media_crypto */, |
| 264 bool /* needs_protected_surface */) { |
| 265 // Callback parameters are ignored in this player. They are intended for |
| 266 // MediaCodecPlayer which uses a different threading scheme. |
| 262 DCHECK(!drm_bridge_->GetMediaCrypto().is_null()); | 267 DCHECK(!drm_bridge_->GetMediaCrypto().is_null()); |
| 263 drm_bridge_->SetMediaCryptoReadyCB(base::Closure()); | 268 drm_bridge_->SetMediaCryptoReadyCB(MediaDrmBridge::MediaCryptoReadyCB()); |
| 264 | 269 |
| 265 // Retry decoder creation if the decoders are waiting for MediaCrypto. | 270 // Retry decoder creation if the decoders are waiting for MediaCrypto. |
| 266 RetryDecoderCreation(true, true); | 271 RetryDecoderCreation(true, true); |
| 267 } | 272 } |
| 268 | 273 |
| 269 void MediaSourcePlayer::SetCdm(BrowserCdm* cdm) { | 274 void MediaSourcePlayer::SetCdm(BrowserCdm* cdm) { |
| 270 // Currently we don't support DRM change during the middle of playback, even | 275 // Currently we don't support DRM change during the middle of playback, even |
| 271 // if the player is paused. | 276 // if the player is paused. |
| 272 // TODO(qinmin): support DRM change after playback has started. | 277 // TODO(qinmin): support DRM change after playback has started. |
| 273 // http://crbug.com/253792. | 278 // http://crbug.com/253792. |
| (...skipping 11 matching lines...) Expand all Loading... |
| 285 drm_bridge_ = static_cast<MediaDrmBridge*>(cdm); | 290 drm_bridge_ = static_cast<MediaDrmBridge*>(cdm); |
| 286 | 291 |
| 287 cdm_registration_id_ = drm_bridge_->RegisterPlayer( | 292 cdm_registration_id_ = drm_bridge_->RegisterPlayer( |
| 288 base::Bind(&MediaSourcePlayer::OnKeyAdded, weak_this_), | 293 base::Bind(&MediaSourcePlayer::OnKeyAdded, weak_this_), |
| 289 base::Bind(&MediaSourcePlayer::OnCdmUnset, weak_this_)); | 294 base::Bind(&MediaSourcePlayer::OnCdmUnset, weak_this_)); |
| 290 | 295 |
| 291 audio_decoder_job_->SetDrmBridge(drm_bridge_); | 296 audio_decoder_job_->SetDrmBridge(drm_bridge_); |
| 292 video_decoder_job_->SetDrmBridge(drm_bridge_); | 297 video_decoder_job_->SetDrmBridge(drm_bridge_); |
| 293 | 298 |
| 294 if (drm_bridge_->GetMediaCrypto().is_null()) { | 299 if (drm_bridge_->GetMediaCrypto().is_null()) { |
| 295 drm_bridge_->SetMediaCryptoReadyCB( | 300 MediaDrmBridge::MediaCryptoReadyCB cb = BindToCurrentLoop( |
| 296 base::Bind(&MediaSourcePlayer::OnMediaCryptoReady, weak_this_)); | 301 base::Bind(&MediaSourcePlayer::OnMediaCryptoReady, weak_this_)); |
| 302 drm_bridge_->SetMediaCryptoReadyCB(cb); |
| 297 return; | 303 return; |
| 298 } | 304 } |
| 299 | 305 |
| 300 // If the player is previously waiting for CDM, retry decoder creation. | 306 // If the player is previously waiting for CDM, retry decoder creation. |
| 301 RetryDecoderCreation(true, true); | 307 RetryDecoderCreation(true, true); |
| 302 } | 308 } |
| 303 | 309 |
| 304 void MediaSourcePlayer::OnDemuxerSeekDone( | 310 void MediaSourcePlayer::OnDemuxerSeekDone( |
| 305 base::TimeDelta actual_browser_seek_time) { | 311 base::TimeDelta actual_browser_seek_time) { |
| 306 DVLOG(1) << __FUNCTION__; | 312 DVLOG(1) << __FUNCTION__; |
| (...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 812 // support setMediaKeys(0) (see http://crbug.com/330324), or when we release | 818 // support setMediaKeys(0) (see http://crbug.com/330324), or when we release |
| 813 // MediaDrm when the video is paused, or when the device goes to sleep (see | 819 // MediaDrm when the video is paused, or when the device goes to sleep (see |
| 814 // http://crbug.com/272421). | 820 // http://crbug.com/272421). |
| 815 audio_decoder_job_->SetDrmBridge(NULL); | 821 audio_decoder_job_->SetDrmBridge(NULL); |
| 816 video_decoder_job_->SetDrmBridge(NULL); | 822 video_decoder_job_->SetDrmBridge(NULL); |
| 817 cdm_registration_id_ = 0; | 823 cdm_registration_id_ = 0; |
| 818 drm_bridge_ = NULL; | 824 drm_bridge_ = NULL; |
| 819 } | 825 } |
| 820 | 826 |
| 821 } // namespace media | 827 } // namespace media |
| OLD | NEW |