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

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: new infobar text per UI review 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/bind_to_current_loop.h" 21 #include "media/base/bind_to_current_loop.h"
22 #include "media/base/timestamp_constants.h" 22 #include "media/base/timestamp_constants.h"
23 23
24 namespace media { 24 namespace media {
25 25
26 MediaSourcePlayer::MediaSourcePlayer( 26 MediaSourcePlayer::MediaSourcePlayer(
27 int player_id, 27 int player_id,
28 MediaPlayerManager* manager, 28 MediaPlayerManager* manager,
29 const RequestMediaResourcesCB& request_media_resources_cb, 29 const OnDecoderResourcesReleasedCB& on_decoder_resources_released_cb,
30 scoped_ptr<DemuxerAndroid> demuxer, 30 scoped_ptr<DemuxerAndroid> demuxer,
31 const GURL& frame_url) 31 const GURL& frame_url)
32 : MediaPlayerAndroid(player_id, 32 : MediaPlayerAndroid(player_id,
33 manager, 33 manager,
34 request_media_resources_cb, 34 on_decoder_resources_released_cb,
35 frame_url), 35 frame_url),
36 demuxer_(demuxer.Pass()), 36 demuxer_(demuxer.Pass()),
37 pending_event_(NO_EVENT_PENDING), 37 pending_event_(NO_EVENT_PENDING),
38 playing_(false), 38 playing_(false),
39 interpolator_(&default_tick_clock_), 39 interpolator_(&default_tick_clock_),
40 doing_browser_seek_(false), 40 doing_browser_seek_(false),
41 pending_seek_(false), 41 pending_seek_(false),
42 drm_bridge_(NULL), 42 drm_bridge_(NULL),
43 cdm_registration_id_(0), 43 cdm_registration_id_(0),
44 is_waiting_for_key_(false), 44 is_waiting_for_key_(false),
45 key_added_while_decode_pending_(false), 45 key_added_while_decode_pending_(false),
46 is_waiting_for_audio_decoder_(false), 46 is_waiting_for_audio_decoder_(false),
47 is_waiting_for_video_decoder_(false), 47 is_waiting_for_video_decoder_(false),
48 prerolling_(true), 48 prerolling_(true),
49 weak_factory_(this) { 49 weak_factory_(this) {
50 media_stat_.reset(new MediaStatistics()); 50 media_stat_.reset(new MediaStatistics());
51 51
52 audio_decoder_job_.reset(new AudioDecoderJob( 52 audio_decoder_job_.reset(new AudioDecoderJob(
53 base::Bind(&DemuxerAndroid::RequestDemuxerData, 53 base::Bind(&DemuxerAndroid::RequestDemuxerData,
54 base::Unretained(demuxer_.get()), 54 base::Unretained(demuxer_.get()),
55 DemuxerStream::AUDIO), 55 DemuxerStream::AUDIO),
56 base::Bind(&MediaSourcePlayer::OnDemuxerConfigsChanged, 56 base::Bind(&MediaSourcePlayer::OnDemuxerConfigsChanged,
57 weak_factory_.GetWeakPtr()), 57 weak_factory_.GetWeakPtr()),
58 &media_stat_->audio_frame_stats())); 58 &media_stat_->audio_frame_stats()));
59 video_decoder_job_.reset(new VideoDecoderJob( 59 video_decoder_job_.reset(new VideoDecoderJob(
60 base::Bind(&DemuxerAndroid::RequestDemuxerData, 60 base::Bind(&DemuxerAndroid::RequestDemuxerData,
61 base::Unretained(demuxer_.get()), 61 base::Unretained(demuxer_.get()),
62 DemuxerStream::VIDEO), 62 DemuxerStream::VIDEO),
63 base::Bind(request_media_resources_cb_, player_id),
64 base::Bind(&MediaSourcePlayer::OnDemuxerConfigsChanged, 63 base::Bind(&MediaSourcePlayer::OnDemuxerConfigsChanged,
65 weak_factory_.GetWeakPtr()), 64 weak_factory_.GetWeakPtr()),
66 &media_stat_->video_frame_stats())); 65 &media_stat_->video_frame_stats()));
67 66
68 demuxer_->Initialize(this); 67 demuxer_->Initialize(this);
69 interpolator_.SetUpperBound(base::TimeDelta()); 68 interpolator_.SetUpperBound(base::TimeDelta());
70 weak_this_ = weak_factory_.GetWeakPtr(); 69 weak_this_ = weak_factory_.GetWeakPtr();
71 } 70 }
72 71
73 MediaSourcePlayer::~MediaSourcePlayer() { 72 MediaSourcePlayer::~MediaSourcePlayer() {
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 185
187 audio_decoder_job_->ReleaseDecoderResources(); 186 audio_decoder_job_->ReleaseDecoderResources();
188 video_decoder_job_->ReleaseDecoderResources(); 187 video_decoder_job_->ReleaseDecoderResources();
189 188
190 // Prevent player restart, including job re-creation attempts. 189 // Prevent player restart, including job re-creation attempts.
191 playing_ = false; 190 playing_ = false;
192 191
193 decoder_starvation_callback_.Cancel(); 192 decoder_starvation_callback_.Cancel();
194 193
195 DetachListener(); 194 DetachListener();
195 on_decoder_resources_released_cb_.Run(player_id());
196 } 196 }
197 197
198 void MediaSourcePlayer::SetVolume(double volume) { 198 void MediaSourcePlayer::SetVolume(double volume) {
199 audio_decoder_job_->SetVolume(volume); 199 audio_decoder_job_->SetVolume(volume);
200 } 200 }
201 201
202 bool MediaSourcePlayer::CanPause() { 202 bool MediaSourcePlayer::CanPause() {
203 return Seekable(); 203 return Seekable();
204 } 204 }
205 205
206 bool MediaSourcePlayer::CanSeekForward() { 206 bool MediaSourcePlayer::CanSeekForward() {
207 return Seekable(); 207 return Seekable();
208 } 208 }
209 209
210 bool MediaSourcePlayer::CanSeekBackward() { 210 bool MediaSourcePlayer::CanSeekBackward() {
211 return Seekable(); 211 return Seekable();
212 } 212 }
213 213
214 bool MediaSourcePlayer::IsPlayerReady() { 214 bool MediaSourcePlayer::IsPlayerReady() {
215 return audio_decoder_job_ || video_decoder_job_; 215 return HasAudio() || HasVideo();
216 } 216 }
217 217
218 void MediaSourcePlayer::StartInternal() { 218 void MediaSourcePlayer::StartInternal() {
219 DVLOG(1) << __FUNCTION__; 219 DVLOG(1) << __FUNCTION__;
220 // If there are pending events, wait for them finish. 220 // If there are pending events, wait for them finish.
221 if (pending_event_ != NO_EVENT_PENDING) 221 if (pending_event_ != NO_EVENT_PENDING)
222 return; 222 return;
223 223
224 if (!manager()->RequestPlay(player_id(), duration_)) { 224 if (!manager()->RequestPlay(player_id(), duration_)) {
225 Pause(true); 225 Pause(true);
(...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after
834 // support setMediaKeys(0) (see http://crbug.com/330324), or when we release 834 // support setMediaKeys(0) (see http://crbug.com/330324), or when we release
835 // MediaDrm when the video is paused, or when the device goes to sleep (see 835 // MediaDrm when the video is paused, or when the device goes to sleep (see
836 // http://crbug.com/272421). 836 // http://crbug.com/272421).
837 audio_decoder_job_->SetDrmBridge(NULL); 837 audio_decoder_job_->SetDrmBridge(NULL);
838 video_decoder_job_->SetDrmBridge(NULL); 838 video_decoder_job_->SetDrmBridge(NULL);
839 cdm_registration_id_ = 0; 839 cdm_registration_id_ = 0;
840 drm_bridge_ = NULL; 840 drm_bridge_ = NULL;
841 } 841 }
842 842
843 } // namespace media 843 } // namespace media
OLDNEW
« no previous file with comments | « media/base/android/media_source_player.h ('k') | media/base/android/media_source_player_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698