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

Unified Diff: media/base/android/media_source_player.cc

Issue 1008093002: Determine the audible state in MediaSourcePlayer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Minor fixes Created 5 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/base/android/media_decoder_job.h ('k') | media/base/android/media_source_player_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/android/media_source_player.cc
diff --git a/media/base/android/media_source_player.cc b/media/base/android/media_source_player.cc
index 85ffd545d87877f787ca8d3a13fc55c1408460bd..3dae525f29d947c69695fdb2b87a90592a2697f0 100644
--- a/media/base/android/media_source_player.cc
+++ b/media/base/android/media_source_player.cc
@@ -194,6 +194,8 @@ void MediaSourcePlayer::Release() {
playing_ = false;
decoder_starvation_callback_.Cancel();
+
+ SetAudible(false);
DetachListener();
}
@@ -238,6 +240,7 @@ void MediaSourcePlayer::OnDemuxerConfigsAvailable(
const DemuxerConfigs& configs) {
DVLOG(1) << __FUNCTION__;
DCHECK(!HasAudio() && !HasVideo());
+
duration_ = configs.duration;
audio_decoder_job_->SetDemuxerConfigs(configs);
@@ -399,6 +402,7 @@ void MediaSourcePlayer::ProcessPendingEvents() {
if (IsEventPending(PREFETCH_REQUEST_EVENT_PENDING)) {
DVLOG(1) << __FUNCTION__ << " : Handling PREFETCH_REQUEST_EVENT.";
+
int count = (AudioFinished() ? 0 : 1) + (VideoFinished() ? 0 : 1);
// It is possible that all streams have finished decode, yet starvation
@@ -493,12 +497,18 @@ void MediaSourcePlayer::MediaDecoderCallback(
return;
}
- if (status == MEDIA_CODEC_OUTPUT_END_OF_STREAM)
+ if (status == MEDIA_CODEC_OUTPUT_END_OF_STREAM) {
+ if (is_audio)
+ SetAudible(false);
return;
+ }
if (!playing_) {
if (is_clock_manager)
interpolator_.StopInterpolating();
+
+ if (is_audio)
+ SetAudible(false);
return;
}
@@ -507,6 +517,9 @@ void MediaSourcePlayer::MediaDecoderCallback(
DVLOG(2) << __FUNCTION__ << ": Key was added during decoding.";
ResumePlaybackAfterKeyAdded();
} else {
+ if (is_audio)
+ SetAudible(false);
+
is_waiting_for_key_ = true;
manager()->OnWaitingForDecryptionKey(player_id());
}
@@ -526,8 +539,11 @@ void MediaSourcePlayer::MediaDecoderCallback(
// If the status is MEDIA_CODEC_ABORT, stop decoding new data. The player is
// in the middle of a seek or stop event and needs to wait for the IPCs to
// come.
- if (status == MEDIA_CODEC_ABORT)
+ if (status == MEDIA_CODEC_ABORT) {
+ if (is_audio)
+ SetAudible(false);
return;
+ }
if (prerolling_ && IsPrerollFinished(is_audio)) {
if (IsPrerollFinished(!is_audio)) {
@@ -537,6 +553,13 @@ void MediaSourcePlayer::MediaDecoderCallback(
return;
}
+ // We successfully decoded a frame and going to the next one.
+ // Set the audible state.
+ if (is_audio) {
+ bool is_audible = !prerolling_ && audio_decoder_job_->volume() > 0;
+ SetAudible(is_audible);
+ }
+
if (is_clock_manager) {
// If we have a valid timestamp, start the starvation callback. Otherwise,
// reset the |start_time_ticks_| so that the next frame will not suffer
@@ -648,6 +671,14 @@ bool MediaSourcePlayer::VideoFinished() {
void MediaSourcePlayer::OnDecoderStarved() {
DVLOG(1) << __FUNCTION__;
+
+ if (HasAudio()) {
+ // If the starvation timer fired but there are no encoded frames
+ // in the queue we believe the demuxer (i.e. renderer process) froze.
+ if (!audio_decoder_job_->HasData())
+ SetAudible(false);
+ }
+
SetPendingEvent(PREFETCH_REQUEST_EVENT_PENDING);
ProcessPendingEvents();
}
« no previous file with comments | « media/base/android/media_decoder_job.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