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

Side by Side Diff: media/tools/demuxer_bench/demuxer_bench.cc

Issue 23702007: Render inband text tracks in the media pipeline (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: incorporate aaron's comments (10/16) Created 7 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 // demuxer_bench is a standalone benchmarking tool for FFmpegDemuxer. It 5 // demuxer_bench is a standalone benchmarking tool for FFmpegDemuxer. It
6 // simulates the reading requirements for playback by reading from the stream 6 // simulates the reading requirements for playback by reading from the stream
7 // that has the earliest timestamp. 7 // that has the earliest timestamp.
8 8
9 #include <iostream> 9 #include <iostream>
10 10
(...skipping 19 matching lines...) Expand all
30 30
31 // DataSourceHost implementation. 31 // DataSourceHost implementation.
32 virtual void SetTotalBytes(int64 total_bytes) OVERRIDE {} 32 virtual void SetTotalBytes(int64 total_bytes) OVERRIDE {}
33 virtual void AddBufferedByteRange(int64 start, int64 end) OVERRIDE {} 33 virtual void AddBufferedByteRange(int64 start, int64 end) OVERRIDE {}
34 virtual void AddBufferedTimeRange(base::TimeDelta start, 34 virtual void AddBufferedTimeRange(base::TimeDelta start,
35 base::TimeDelta end) OVERRIDE {} 35 base::TimeDelta end) OVERRIDE {}
36 36
37 // DemuxerHost implementation. 37 // DemuxerHost implementation.
38 virtual void SetDuration(base::TimeDelta duration) OVERRIDE {} 38 virtual void SetDuration(base::TimeDelta duration) OVERRIDE {}
39 virtual void OnDemuxerError(media::PipelineStatus error) OVERRIDE {} 39 virtual void OnDemuxerError(media::PipelineStatus error) OVERRIDE {}
40 virtual void AddTextStream(media::DemuxerStream* text_stream,
41 media::TextKind kind,
42 const std::string& label,
43 const std::string& language) OVERRIDE {}
40 44
41 private: 45 private:
42 DISALLOW_COPY_AND_ASSIGN(DemuxerHostImpl); 46 DISALLOW_COPY_AND_ASSIGN(DemuxerHostImpl);
43 }; 47 };
44 48
45 void QuitLoopWithStatus(base::MessageLoop* message_loop, 49 void QuitLoopWithStatus(base::MessageLoop* message_loop,
46 media::PipelineStatus status) { 50 media::PipelineStatus status) {
47 CHECK_EQ(status, media::PIPELINE_OK); 51 CHECK_EQ(status, media::PIPELINE_OK);
48 message_loop->PostTask(FROM_HERE, base::MessageLoop::QuitWhenIdleClosure()); 52 message_loop->PostTask(FROM_HERE, base::MessageLoop::QuitWhenIdleClosure());
49 } 53 }
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 base::FilePath file_path(cmd_line->GetArgs()[0]); 195 base::FilePath file_path(cmd_line->GetArgs()[0]);
192 196
193 // Setup. 197 // Setup.
194 media::FileDataSource data_source; 198 media::FileDataSource data_source;
195 CHECK(data_source.Initialize(file_path)); 199 CHECK(data_source.Initialize(file_path));
196 200
197 media::Demuxer::NeedKeyCB need_key_cb = base::Bind(&NeedKey); 201 media::Demuxer::NeedKeyCB need_key_cb = base::Bind(&NeedKey);
198 media::FFmpegDemuxer demuxer(message_loop.message_loop_proxy(), 202 media::FFmpegDemuxer demuxer(message_loop.message_loop_proxy(),
199 &data_source, 203 &data_source,
200 need_key_cb, 204 need_key_cb,
205 true, // enable inband text tracks
201 new media::MediaLog()); 206 new media::MediaLog());
202 207
203 demuxer.Initialize(&demuxer_host, base::Bind( 208 demuxer.Initialize(&demuxer_host, base::Bind(
204 &QuitLoopWithStatus, &message_loop)); 209 &QuitLoopWithStatus, &message_loop));
205 message_loop.Run(); 210 message_loop.Run();
206 211
207 StreamReader stream_reader( 212 StreamReader stream_reader(
208 &demuxer, cmd_line->HasSwitch(switches::kEnableBitstreamConverter)); 213 &demuxer, cmd_line->HasSwitch(switches::kEnableBitstreamConverter));
209 214
210 // Benchmark. 215 // Benchmark.
211 base::TimeTicks start = base::TimeTicks::HighResNow(); 216 base::TimeTicks start = base::TimeTicks::HighResNow();
212 while (!stream_reader.IsDone()) { 217 while (!stream_reader.IsDone()) {
213 stream_reader.Read(); 218 stream_reader.Read();
214 } 219 }
215 base::TimeTicks end = base::TimeTicks::HighResNow(); 220 base::TimeTicks end = base::TimeTicks::HighResNow();
216 221
217 // Results. 222 // Results.
218 std::cout << "Time: " << (end - start).InMillisecondsF() << " ms\n"; 223 std::cout << "Time: " << (end - start).InMillisecondsF() << " ms\n";
219 for (int i = 0; i < stream_reader.number_of_streams(); ++i) { 224 for (int i = 0; i < stream_reader.number_of_streams(); ++i) {
220 media::DemuxerStream* stream = stream_reader.streams()[i]; 225 media::DemuxerStream* stream = stream_reader.streams()[i];
221 std::cout << "Stream #" << i << ": "; 226 std::cout << "Stream #" << i << ": ";
222 227
223 if (stream->type() == media::DemuxerStream::AUDIO) { 228 if (stream->type() == media::DemuxerStream::AUDIO) {
224 std::cout << "audio"; 229 std::cout << "audio";
225 } else if (stream->type() == media::DemuxerStream::VIDEO) { 230 } else if (stream->type() == media::DemuxerStream::VIDEO) {
226 std::cout << "video"; 231 std::cout << "video";
232 } else if (stream->type() == media::DemuxerStream::TEXT) {
233 std::cout << "text";
227 } else { 234 } else {
228 std::cout << "unknown"; 235 std::cout << "unknown";
229 } 236 }
230 237
231 std::cout << ", " << stream_reader.counts()[i] << " packets" << std::endl; 238 std::cout << ", " << stream_reader.counts()[i] << " packets" << std::endl;
232 } 239 }
233 240
234 // Teardown. 241 // Teardown.
235 demuxer.Stop(base::Bind( 242 demuxer.Stop(base::Bind(
236 &QuitLoopWithStatus, &message_loop, media::PIPELINE_OK)); 243 &QuitLoopWithStatus, &message_loop, media::PIPELINE_OK));
237 message_loop.Run(); 244 message_loop.Run();
238 245
239 return 0; 246 return 0;
240 } 247 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698