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

Side by Side Diff: media/filters/decoder_stream_traits.cc

Issue 2545523005: [Video] Collect average keyframe distance for video (Closed)
Patch Set: Addressed some Dale's comments Created 4 years 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
« no previous file with comments | « media/filters/decoder_stream_traits.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/filters/decoder_stream_traits.h" 5 #include "media/filters/decoder_stream_traits.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/metrics/histogram_macros.h"
8 #include "media/base/audio_buffer.h" 9 #include "media/base/audio_buffer.h"
9 #include "media/base/audio_decoder.h" 10 #include "media/base/audio_decoder.h"
10 #include "media/base/audio_decoder_config.h" 11 #include "media/base/audio_decoder_config.h"
11 #include "media/base/video_decoder.h" 12 #include "media/base/video_decoder.h"
12 #include "media/base/video_frame.h" 13 #include "media/base/video_frame.h"
13 14
14 namespace media { 15 namespace media {
15 16
16 // Audio decoder stream traits implementation. 17 // Audio decoder stream traits implementation.
17 18
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 statistics.video_bytes_decoded = bytes_decoded; 97 statistics.video_bytes_decoded = bytes_decoded;
97 statistics_cb.Run(statistics); 98 statistics_cb.Run(statistics);
98 } 99 }
99 100
100 // static 101 // static
101 scoped_refptr<DecoderStreamTraits<DemuxerStream::VIDEO>::OutputType> 102 scoped_refptr<DecoderStreamTraits<DemuxerStream::VIDEO>::OutputType>
102 DecoderStreamTraits<DemuxerStream::VIDEO>::CreateEOSOutput() { 103 DecoderStreamTraits<DemuxerStream::VIDEO>::CreateEOSOutput() {
103 return OutputType::CreateEOSFrame(); 104 return OutputType::CreateEOSFrame();
104 } 105 }
105 106
107 // The samples count for keyframe distance average is picked arbitrarily.
DaleCurtis 2016/12/06 21:31:04 Generally just put over the variable name.
108 DecoderStreamTraits<DemuxerStream::VIDEO>::DecoderStreamTraits(
109 const scoped_refptr<MediaLog>& media_log)
110 : keyframe_distance_average_(10) {}
111
106 void DecoderStreamTraits<DemuxerStream::VIDEO>::InitializeDecoder( 112 void DecoderStreamTraits<DemuxerStream::VIDEO>::InitializeDecoder(
107 DecoderType* decoder, 113 DecoderType* decoder,
108 DemuxerStream* stream, 114 DemuxerStream* stream,
109 CdmContext* cdm_context, 115 CdmContext* cdm_context,
110 const InitCB& init_cb, 116 const InitCB& init_cb,
111 const OutputCB& output_cb) { 117 const OutputCB& output_cb) {
112 DCHECK(stream->video_decoder_config().IsValidConfig()); 118 DCHECK(stream->video_decoder_config().IsValidConfig());
113 decoder->Initialize(stream->video_decoder_config(), 119 decoder->Initialize(stream->video_decoder_config(),
114 stream->liveness() == DemuxerStream::LIVENESS_LIVE, 120 stream->liveness() == DemuxerStream::LIVENESS_LIVE,
115 cdm_context, init_cb, output_cb); 121 cdm_context, init_cb, output_cb);
116 } 122 }
117 123
124 void DecoderStreamTraits<DemuxerStream::VIDEO>::OnStreamReset(
125 DemuxerStream* stream) {
126 DCHECK(stream);
127 ResetMetrics();
128 max_average_ = base::TimeDelta();
129 }
130
131 void DecoderStreamTraits<DemuxerStream::VIDEO>::OnDecode(
132 const scoped_refptr<DecoderBuffer>& buffer) {
133 if (!buffer)
134 return;
135
136 if (buffer->end_of_stream()) {
137 ResetMetrics();
138 return;
139 }
140
141 if (!buffer->is_key_frame())
142 return;
143
144 base::TimeDelta current_frame_timestamp = buffer->timestamp();
145 if (last_keyframe_timestamp_.is_zero()) {
146 last_keyframe_timestamp_ = current_frame_timestamp;
147 return;
148 }
149
150 base::TimeDelta last_keyframe_distance =
151 current_frame_timestamp - last_keyframe_timestamp_;
152 last_keyframe_timestamp_ = current_frame_timestamp;
153 keyframe_distance_average_.AddSample(last_keyframe_distance);
154 base::TimeDelta new_average = keyframe_distance_average_.Average();
155 if (new_average > max_average_) {
156 max_average_ = new_average;
157 UMA_HISTOGRAM_MEDIUM_TIMES("Media.Video.KeyFrameDistanceAverage",
158 new_average);
159 }
160 }
161
162 void DecoderStreamTraits<DemuxerStream::VIDEO>::ResetMetrics() {
163 keyframe_distance_average_.Reset();
164 last_keyframe_timestamp_ = base::TimeDelta();
165 }
166
118 } // namespace media 167 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/decoder_stream_traits.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698