Index: media/base/android/media_codec_player.cc |
diff --git a/media/base/android/media_codec_player.cc b/media/base/android/media_codec_player.cc |
index 5c4608bf64d683559af59658ed8cdc55db1cdda8..08cc4ca82209b5b06b6ae94a1876fed1a86be41d 100644 |
--- a/media/base/android/media_codec_player.cc |
+++ b/media/base/android/media_codec_player.cc |
@@ -98,6 +98,8 @@ MediaCodecPlayer::~MediaCodecPlayer() |
if (audio_decoder_) |
audio_decoder_->ReleaseDecoderResources(); |
+ media_stat_->StopAndReport(); |
+ |
if (drm_bridge_) { |
DCHECK(cdm_registration_id_); |
drm_bridge_->UnregisterPlayer(cdm_registration_id_); |
@@ -806,6 +808,8 @@ void MediaCodecPlayer::OnStopDone(DemuxerStream::Type type) { |
return; |
} |
+ media_stat_->StopAndReport(); |
+ |
// DetachListener to UI thread |
ui_task_runner_->PostTask(FROM_HERE, detach_listener_cb_); |
@@ -850,6 +854,8 @@ void MediaCodecPlayer::OnStarvation(DemuxerStream::Type type) { |
SetState(kStateStopping); |
RequestToStopDecoders(); |
SetPendingStart(true); |
+ |
+ media_stat_->AddStarvation(); |
} |
void MediaCodecPlayer::OnTimeIntervalUpdate(DemuxerStream::Type type, |
@@ -1246,6 +1252,10 @@ MediaCodecPlayer::StartStatus MediaCodecPlayer::StartDecoders() { |
DVLOG(1) << __FUNCTION__ << " current_time:" << current_time; |
+ // This methos needs to be called when decoder threads are not processing |
+ // frames. |
+ media_stat_->Start(); |
+ |
if (!AudioFinished()) { |
if (!audio_decoder_->Start(current_time)) |
return kStartFailed; |
@@ -1268,6 +1278,8 @@ void MediaCodecPlayer::StopDecoders() { |
video_decoder_->SyncStop(); |
audio_decoder_->SyncStop(); |
+ |
+ media_stat_->StopAndReport(); |
} |
void MediaCodecPlayer::RequestToStopDecoders() { |
@@ -1325,6 +1337,8 @@ void MediaCodecPlayer::ReleaseDecoderResources() { |
// At this point decoder threads should not be running |
if (interpolator_.interpolating()) |
interpolator_.StopInterpolating(); |
+ |
+ media_stat_->StopAndReport(); |
} |
void MediaCodecPlayer::CreateDecoders() { |
@@ -1333,6 +1347,8 @@ void MediaCodecPlayer::CreateDecoders() { |
internal_error_cb_ = base::Bind(&MediaCodecPlayer::OnError, media_weak_this_); |
+ media_stat_.reset(new MediaStatistics()); |
+ |
audio_decoder_.reset(new MediaCodecAudioDecoder( |
GetMediaTaskRunner(), base::Bind(&MediaCodecPlayer::RequestDemuxerData, |
media_weak_this_, DemuxerStream::AUDIO), |
@@ -1346,7 +1362,8 @@ void MediaCodecPlayer::CreateDecoders() { |
DemuxerStream::AUDIO), |
internal_error_cb_, |
base::Bind(&MediaCodecPlayer::OnTimeIntervalUpdate, media_weak_this_, |
- DemuxerStream::AUDIO))); |
+ DemuxerStream::AUDIO), |
+ &media_stat_->AudioFrames())); |
video_decoder_.reset(new MediaCodecVideoDecoder( |
GetMediaTaskRunner(), base::Bind(&MediaCodecPlayer::RequestDemuxerData, |
@@ -1363,7 +1380,8 @@ void MediaCodecPlayer::CreateDecoders() { |
base::Bind(&MediaCodecPlayer::OnTimeIntervalUpdate, media_weak_this_, |
DemuxerStream::VIDEO), |
base::Bind(&MediaCodecPlayer::OnVideoResolutionChanged, media_weak_this_), |
- base::Bind(&MediaCodecPlayer::OnVideoCodecCreated, media_weak_this_))); |
+ base::Bind(&MediaCodecPlayer::OnVideoCodecCreated, media_weak_this_), |
+ &media_stat_->VideoFrames())); |
} |
bool MediaCodecPlayer::AudioFinished() const { |