Chromium Code Reviews| Index: media/base/android/media_codec_audio_decoder.cc |
| diff --git a/media/base/android/media_codec_audio_decoder.cc b/media/base/android/media_codec_audio_decoder.cc |
| index 503fb39223ccdd913707f459941f6698d5112eee..0de42ad23928f5ae6684862ff887216d4e88c825 100644 |
| --- a/media/base/android/media_codec_audio_decoder.cc |
| +++ b/media/base/android/media_codec_audio_decoder.cc |
| @@ -7,6 +7,7 @@ |
| #include "base/bind.h" |
| #include "base/logging.h" |
| #include "media/base/android/media_codec_bridge.h" |
| +#include "media/base/android/media_statistics.h" |
| #include "media/base/audio_timestamp_helper.h" |
| #include "media/base/demuxer_stream.h" |
| @@ -21,6 +22,7 @@ namespace media { |
| MediaCodecAudioDecoder::MediaCodecAudioDecoder( |
| const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, |
| + FrameStatistics* frame_statistics, |
| const base::Closure& request_data_cb, |
| const base::Closure& starvation_cb, |
| const base::Closure& decoder_drained_cb, |
| @@ -28,14 +30,15 @@ MediaCodecAudioDecoder::MediaCodecAudioDecoder( |
| const base::Closure& waiting_for_decryption_key_cb, |
| const base::Closure& error_cb, |
| const SetTimeCallback& update_current_time_cb) |
| - : MediaCodecDecoder(media_task_runner, |
| + : MediaCodecDecoder("AudioDecoder", |
| + media_task_runner, |
| + frame_statistics, |
| request_data_cb, |
| starvation_cb, |
| decoder_drained_cb, |
| stop_done_cb, |
| waiting_for_decryption_key_cb, |
| - error_cb, |
| - "AudioDecoder"), |
| + error_cb), |
| volume_(-1.0), |
| bytes_per_frame_(0), |
| output_sampling_rate_(0), |
| @@ -207,6 +210,11 @@ void MediaCodecAudioDecoder::Render(int buffer_index, |
| int64 head_position = |
| audio_codec->PlayOutputBuffer(buffer_index, size, offset, postpone); |
| + base::TimeTicks current_time = base::TimeTicks::Now(); |
| + |
| + DCHECK(frame_statistics_); |
|
xhwang
2015/10/01 21:58:57
ditto
Tima Vaisburd
2015/10/02 00:44:32
Done.
|
| + frame_statistics_->AddFrame(); |
| + |
| // Reset the base timestamp if we have not started playing. |
| // SetBaseTimestamp() must be called before AddFrames() since it resets the |
| // internal frame count. |
| @@ -240,6 +248,14 @@ void MediaCodecAudioDecoder::Render(int buffer_index, |
| DVLOG(2) << class_name() << "::" << __FUNCTION__ << " pts:" << pts |
| << " will play: [" << now_playing << "," << last_buffered << "]"; |
| + // Statistics |
| + if (!next_frame_time_limit_.is_null() && |
| + next_frame_time_limit_ < current_time) { |
| + frame_statistics_->AddLateFrame(current_time - next_frame_time_limit_); |
| + } |
| + |
| + next_frame_time_limit_ = current_time + (last_buffered - now_playing); |
| + |
| media_task_runner_->PostTask( |
| FROM_HERE, base::Bind(update_current_time_cb_, now_playing, |
| last_buffered, false)); |