Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(172)

Side by Side Diff: media/base/android/media_source_player.cc

Issue 1341883003: Prepare MediaDrmBridge to work with MediaCodecPlayer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bug526755
Patch Set: Fixed MediaDrmBridgeTest unit tests Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « media/base/android/media_source_player.h ('k') | media/base/android/media_task_runner.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « media/base/android/media_source_player.h ('k') | media/base/android/media_task_runner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698