| Index: media/filters/decoder_stream_traits.cc
|
| diff --git a/media/filters/decoder_stream_traits.cc b/media/filters/decoder_stream_traits.cc
|
| index fcbc19e4baa8e7f680afb3b22f3caa0d6842a03c..a2f8c99c11b5ad97dd7d7d4796387bcfda15d2c8 100644
|
| --- a/media/filters/decoder_stream_traits.cc
|
| +++ b/media/filters/decoder_stream_traits.cc
|
| @@ -4,6 +4,8 @@
|
|
|
| #include "media/filters/decoder_stream_traits.h"
|
|
|
| +#include <limits>
|
| +
|
| #include "base/logging.h"
|
| #include "base/metrics/histogram_macros.h"
|
| #include "media/base/audio_buffer.h"
|
| @@ -28,15 +30,6 @@ bool DecoderStreamTraits<DemuxerStream::AUDIO>::NeedsBitstreamConversion(
|
| }
|
|
|
| // static
|
| -void DecoderStreamTraits<DemuxerStream::AUDIO>::ReportStatistics(
|
| - const StatisticsCB& statistics_cb,
|
| - int bytes_decoded) {
|
| - PipelineStatistics statistics;
|
| - statistics.audio_bytes_decoded = bytes_decoded;
|
| - statistics_cb.Run(statistics);
|
| -}
|
| -
|
| -// static
|
| scoped_refptr<DecoderStreamTraits<DemuxerStream::AUDIO>::OutputType>
|
| DecoderStreamTraits<DemuxerStream::AUDIO>::CreateEOSOutput() {
|
| return OutputType::CreateEOSBuffer();
|
| @@ -46,6 +39,14 @@ DecoderStreamTraits<DemuxerStream::AUDIO>::DecoderStreamTraits(
|
| const scoped_refptr<MediaLog>& media_log)
|
| : media_log_(media_log) {}
|
|
|
| +void DecoderStreamTraits<DemuxerStream::AUDIO>::ReportStatistics(
|
| + const StatisticsCB& statistics_cb,
|
| + int bytes_decoded) {
|
| + PipelineStatistics statistics;
|
| + statistics.audio_bytes_decoded = bytes_decoded;
|
| + statistics_cb.Run(statistics);
|
| +}
|
| +
|
| void DecoderStreamTraits<DemuxerStream::AUDIO>::InitializeDecoder(
|
| DecoderType* decoder,
|
| DemuxerStream* stream,
|
| @@ -90,18 +91,32 @@ bool DecoderStreamTraits<DemuxerStream::VIDEO>::NeedsBitstreamConversion(
|
| }
|
|
|
| // static
|
| +scoped_refptr<DecoderStreamTraits<DemuxerStream::VIDEO>::OutputType>
|
| +DecoderStreamTraits<DemuxerStream::VIDEO>::CreateEOSOutput() {
|
| + return OutputType::CreateEOSFrame();
|
| +}
|
| +
|
| +DecoderStreamTraits<DemuxerStream::VIDEO>::DecoderStreamTraits(
|
| + const scoped_refptr<MediaLog>& media_log)
|
| + // Randomly selected number of samples to keep.
|
| + : keyframe_distance_average_(16) {}
|
| +
|
| void DecoderStreamTraits<DemuxerStream::VIDEO>::ReportStatistics(
|
| const StatisticsCB& statistics_cb,
|
| int bytes_decoded) {
|
| PipelineStatistics statistics;
|
| statistics.video_bytes_decoded = bytes_decoded;
|
| - statistics_cb.Run(statistics);
|
| -}
|
|
|
| -// static
|
| -scoped_refptr<DecoderStreamTraits<DemuxerStream::VIDEO>::OutputType>
|
| - DecoderStreamTraits<DemuxerStream::VIDEO>::CreateEOSOutput() {
|
| - return OutputType::CreateEOSFrame();
|
| + // Before we have enough keyframes to calculate the average distance, we will
|
| + // assume the average keyframe distance is infinitely large.
|
| + if (keyframe_distance_average_.count() < 3) {
|
| + statistics.video_keyframe_distance_average = base::TimeDelta::Max();
|
| + } else {
|
| + statistics.video_keyframe_distance_average =
|
| + keyframe_distance_average_.Average();
|
| + }
|
| +
|
| + statistics_cb.Run(statistics);
|
| }
|
|
|
| void DecoderStreamTraits<DemuxerStream::VIDEO>::InitializeDecoder(
|
| @@ -120,6 +135,7 @@ void DecoderStreamTraits<DemuxerStream::VIDEO>::OnStreamReset(
|
| DemuxerStream* stream) {
|
| DCHECK(stream);
|
| last_keyframe_timestamp_ = base::TimeDelta();
|
| + keyframe_distance_average_.Reset();
|
| }
|
|
|
| void DecoderStreamTraits<DemuxerStream::VIDEO>::OnDecode(
|
| @@ -141,10 +157,11 @@ void DecoderStreamTraits<DemuxerStream::VIDEO>::OnDecode(
|
| return;
|
| }
|
|
|
| - UMA_HISTOGRAM_MEDIUM_TIMES(
|
| - "Media.Video.KeyFrameDistance",
|
| - current_frame_timestamp - last_keyframe_timestamp_);
|
| + base::TimeDelta frame_distance =
|
| + current_frame_timestamp - last_keyframe_timestamp_;
|
| + UMA_HISTOGRAM_MEDIUM_TIMES("Media.Video.KeyFrameDistance", frame_distance);
|
| last_keyframe_timestamp_ = current_frame_timestamp;
|
| + keyframe_distance_average_.AddSample(frame_distance);
|
| }
|
|
|
| } // namespace media
|
|
|