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

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

Issue 1372203002: Throttle media decoding after excessive Android media server crashes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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
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/timestamp_constants.h" 21 #include "media/base/timestamp_constants.h"
22 22
23 namespace media { 23 namespace media {
24 24
25 MediaSourcePlayer::MediaSourcePlayer( 25 MediaSourcePlayer::MediaSourcePlayer(
26 int player_id, 26 int player_id,
27 MediaPlayerManager* manager, 27 MediaPlayerManager* manager,
28 const RequestMediaResourcesCB& request_media_resources_cb, 28 const OnPlayerReleasedCB& on_player_released_cb,
29 scoped_ptr<DemuxerAndroid> demuxer, 29 scoped_ptr<DemuxerAndroid> demuxer,
30 const GURL& frame_url) 30 const GURL& frame_url)
31 : MediaPlayerAndroid(player_id, 31 : MediaPlayerAndroid(player_id,
32 manager, 32 manager,
33 request_media_resources_cb, 33 on_player_released_cb,
34 frame_url), 34 frame_url),
35 demuxer_(demuxer.Pass()), 35 demuxer_(demuxer.Pass()),
36 pending_event_(NO_EVENT_PENDING), 36 pending_event_(NO_EVENT_PENDING),
37 playing_(false), 37 playing_(false),
38 interpolator_(&default_tick_clock_), 38 interpolator_(&default_tick_clock_),
39 doing_browser_seek_(false), 39 doing_browser_seek_(false),
40 pending_seek_(false), 40 pending_seek_(false),
41 drm_bridge_(NULL), 41 drm_bridge_(NULL),
42 cdm_registration_id_(0), 42 cdm_registration_id_(0),
43 is_waiting_for_key_(false), 43 is_waiting_for_key_(false),
44 key_added_while_decode_pending_(false), 44 key_added_while_decode_pending_(false),
45 is_waiting_for_audio_decoder_(false), 45 is_waiting_for_audio_decoder_(false),
46 is_waiting_for_video_decoder_(false), 46 is_waiting_for_video_decoder_(false),
47 prerolling_(true), 47 prerolling_(true),
48 weak_factory_(this) { 48 weak_factory_(this) {
49 audio_decoder_job_.reset(new AudioDecoderJob( 49 audio_decoder_job_.reset(new AudioDecoderJob(
50 base::Bind(&DemuxerAndroid::RequestDemuxerData, 50 base::Bind(&DemuxerAndroid::RequestDemuxerData,
51 base::Unretained(demuxer_.get()), 51 base::Unretained(demuxer_.get()),
52 DemuxerStream::AUDIO), 52 DemuxerStream::AUDIO),
53 base::Bind(&MediaSourcePlayer::OnDemuxerConfigsChanged, 53 base::Bind(&MediaSourcePlayer::OnDemuxerConfigsChanged,
54 weak_factory_.GetWeakPtr()))); 54 weak_factory_.GetWeakPtr())));
55 video_decoder_job_.reset(new VideoDecoderJob( 55 video_decoder_job_.reset(new VideoDecoderJob(
56 base::Bind(&DemuxerAndroid::RequestDemuxerData, 56 base::Bind(&DemuxerAndroid::RequestDemuxerData,
57 base::Unretained(demuxer_.get()), 57 base::Unretained(demuxer_.get()),
58 DemuxerStream::VIDEO), 58 DemuxerStream::VIDEO),
59 base::Bind(request_media_resources_cb_, player_id),
60 base::Bind(&MediaSourcePlayer::OnDemuxerConfigsChanged, 59 base::Bind(&MediaSourcePlayer::OnDemuxerConfigsChanged,
61 weak_factory_.GetWeakPtr()))); 60 weak_factory_.GetWeakPtr())));
62 demuxer_->Initialize(this); 61 demuxer_->Initialize(this);
63 interpolator_.SetUpperBound(base::TimeDelta()); 62 interpolator_.SetUpperBound(base::TimeDelta());
64 weak_this_ = weak_factory_.GetWeakPtr(); 63 weak_this_ = weak_factory_.GetWeakPtr();
65 } 64 }
66 65
67 MediaSourcePlayer::~MediaSourcePlayer() { 66 MediaSourcePlayer::~MediaSourcePlayer() {
68 Release(); 67 Release();
69 DCHECK_EQ(!drm_bridge_, !cdm_registration_id_); 68 DCHECK_EQ(!drm_bridge_, !cdm_registration_id_);
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 179
181 audio_decoder_job_->ReleaseDecoderResources(); 180 audio_decoder_job_->ReleaseDecoderResources();
182 video_decoder_job_->ReleaseDecoderResources(); 181 video_decoder_job_->ReleaseDecoderResources();
183 182
184 // Prevent player restart, including job re-creation attempts. 183 // Prevent player restart, including job re-creation attempts.
185 playing_ = false; 184 playing_ = false;
186 185
187 decoder_starvation_callback_.Cancel(); 186 decoder_starvation_callback_.Cancel();
188 187
189 DetachListener(); 188 DetachListener();
189 on_player_released_cb_.Run(player_id());
190 } 190 }
191 191
192 void MediaSourcePlayer::SetVolume(double volume) { 192 void MediaSourcePlayer::SetVolume(double volume) {
193 audio_decoder_job_->SetVolume(volume); 193 audio_decoder_job_->SetVolume(volume);
194 } 194 }
195 195
196 bool MediaSourcePlayer::CanPause() { 196 bool MediaSourcePlayer::CanPause() {
197 return Seekable(); 197 return Seekable();
198 } 198 }
199 199
200 bool MediaSourcePlayer::CanSeekForward() { 200 bool MediaSourcePlayer::CanSeekForward() {
201 return Seekable(); 201 return Seekable();
202 } 202 }
203 203
204 bool MediaSourcePlayer::CanSeekBackward() { 204 bool MediaSourcePlayer::CanSeekBackward() {
205 return Seekable(); 205 return Seekable();
206 } 206 }
207 207
208 bool MediaSourcePlayer::IsPlayerReady() { 208 bool MediaSourcePlayer::IsPlayerReady() {
209 return audio_decoder_job_ || video_decoder_job_; 209 return HasAudio() || HasVideo();
210 } 210 }
211 211
212 void MediaSourcePlayer::StartInternal() { 212 void MediaSourcePlayer::StartInternal() {
213 DVLOG(1) << __FUNCTION__; 213 DVLOG(1) << __FUNCTION__;
214 // If there are pending events, wait for them finish. 214 // If there are pending events, wait for them finish.
215 if (pending_event_ != NO_EVENT_PENDING) 215 if (pending_event_ != NO_EVENT_PENDING)
216 return; 216 return;
217 217
218 if (!manager()->RequestPlay(player_id())) { 218 if (!manager()->RequestPlay(player_id())) {
219 Pause(true); 219 Pause(true);
(...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after
812 // support setMediaKeys(0) (see http://crbug.com/330324), or when we release 812 // 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 813 // MediaDrm when the video is paused, or when the device goes to sleep (see
814 // http://crbug.com/272421). 814 // http://crbug.com/272421).
815 audio_decoder_job_->SetDrmBridge(NULL); 815 audio_decoder_job_->SetDrmBridge(NULL);
816 video_decoder_job_->SetDrmBridge(NULL); 816 video_decoder_job_->SetDrmBridge(NULL);
817 cdm_registration_id_ = 0; 817 cdm_registration_id_ = 0;
818 drm_bridge_ = NULL; 818 drm_bridge_ = NULL;
819 } 819 }
820 820
821 } // namespace media 821 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698