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

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

Issue 13813016: Remove reference counting from media::Demuxer and friends. (Closed) Base URL: http://git.chromium.org/chromium/src.git@vd_scoped
Patch Set: fix tools Created 7 years, 8 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 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 int init_data_size) { 47 int init_data_size) {
48 LOG(INFO) << "File is encrypted."; 48 LOG(INFO) << "File is encrypted.";
49 } 49 }
50 50
51 typedef std::vector<scoped_refptr<media::DemuxerStream> > Streams; 51 typedef std::vector<scoped_refptr<media::DemuxerStream> > Streams;
52 52
53 // Simulates playback reading requirements by reading from each stream 53 // Simulates playback reading requirements by reading from each stream
54 // present in |demuxer| in as-close-to-monotonically-increasing timestamp order. 54 // present in |demuxer| in as-close-to-monotonically-increasing timestamp order.
55 class StreamReader { 55 class StreamReader {
56 public: 56 public:
57 explicit StreamReader(const scoped_refptr<media::Demuxer>& demuxer); 57 explicit StreamReader(media::Demuxer* demuxer);
58 ~StreamReader(); 58 ~StreamReader();
59 59
60 // Performs a single step read. 60 // Performs a single step read.
61 void Read(); 61 void Read();
62 62
63 // Returns true when all streams have reached end of stream. 63 // Returns true when all streams have reached end of stream.
64 bool IsDone(); 64 bool IsDone();
65 65
66 int number_of_streams() { return streams_.size(); } 66 int number_of_streams() { return streams_.size(); }
67 const Streams& streams() { return streams_; } 67 const Streams& streams() { return streams_; }
68 const std::vector<int>& counts() { return counts_; } 68 const std::vector<int>& counts() { return counts_; }
69 69
70 private: 70 private:
71 void OnReadDone(MessageLoop* message_loop, 71 void OnReadDone(MessageLoop* message_loop,
72 bool* end_of_stream, 72 bool* end_of_stream,
73 base::TimeDelta* timestamp, 73 base::TimeDelta* timestamp,
74 media::DemuxerStream::Status status, 74 media::DemuxerStream::Status status,
75 const scoped_refptr<media::DecoderBuffer>& buffer); 75 const scoped_refptr<media::DecoderBuffer>& buffer);
76 int GetNextStreamIndexToRead(); 76 int GetNextStreamIndexToRead();
77 77
78 Streams streams_; 78 Streams streams_;
79 std::vector<bool> end_of_stream_; 79 std::vector<bool> end_of_stream_;
80 std::vector<base::TimeDelta> last_read_timestamp_; 80 std::vector<base::TimeDelta> last_read_timestamp_;
81 std::vector<int> counts_; 81 std::vector<int> counts_;
82 82
83 DISALLOW_COPY_AND_ASSIGN(StreamReader); 83 DISALLOW_COPY_AND_ASSIGN(StreamReader);
84 }; 84 };
85 85
86 StreamReader::StreamReader(const scoped_refptr<media::Demuxer> &demuxer) { 86 StreamReader::StreamReader(media::Demuxer* demuxer) {
87 scoped_refptr<media::DemuxerStream> stream; 87 scoped_refptr<media::DemuxerStream> stream;
88 stream = demuxer->GetStream(media::DemuxerStream::AUDIO); 88 stream = demuxer->GetStream(media::DemuxerStream::AUDIO);
89 if (stream) { 89 if (stream) {
90 streams_.push_back(stream); 90 streams_.push_back(stream);
91 end_of_stream_.push_back(false); 91 end_of_stream_.push_back(false);
92 last_read_timestamp_.push_back(media::kNoTimestamp()); 92 last_read_timestamp_.push_back(media::kNoTimestamp());
93 counts_.push_back(0); 93 counts_.push_back(0);
94 } 94 }
95 95
96 stream = demuxer->GetStream(media::DemuxerStream::VIDEO); 96 stream = demuxer->GetStream(media::DemuxerStream::VIDEO);
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 MessageLoop message_loop; 176 MessageLoop message_loop;
177 DemuxerHostImpl demuxer_host; 177 DemuxerHostImpl demuxer_host;
178 base::FilePath file_path(cmd_line->GetArgs()[0]); 178 base::FilePath file_path(cmd_line->GetArgs()[0]);
179 179
180 // Setup. 180 // Setup.
181 scoped_refptr<media::FileDataSource> data_source = 181 scoped_refptr<media::FileDataSource> data_source =
182 new media::FileDataSource(); 182 new media::FileDataSource();
183 CHECK(data_source->Initialize(file_path)); 183 CHECK(data_source->Initialize(file_path));
184 184
185 media::FFmpegNeedKeyCB need_key_cb = base::Bind(&NeedKey); 185 media::FFmpegNeedKeyCB need_key_cb = base::Bind(&NeedKey);
186 scoped_refptr<media::FFmpegDemuxer> demuxer = 186 scoped_ptr<media::FFmpegDemuxer> demuxer(new media::FFmpegDemuxer(
187 new media::FFmpegDemuxer(message_loop.message_loop_proxy(), data_source, 187 message_loop.message_loop_proxy(), data_source, need_key_cb));
188 need_key_cb);
189 188
190 demuxer->Initialize(&demuxer_host, base::Bind( 189 demuxer->Initialize(&demuxer_host, base::Bind(
191 &QuitLoopWithStatus, &message_loop)); 190 &QuitLoopWithStatus, &message_loop));
192 message_loop.Run(); 191 message_loop.Run();
193 192
194 StreamReader stream_reader(demuxer); 193 StreamReader stream_reader(demuxer.get());
195 194
196 // Benchmark. 195 // Benchmark.
197 base::TimeTicks start = base::TimeTicks::HighResNow(); 196 base::TimeTicks start = base::TimeTicks::HighResNow();
198 while (!stream_reader.IsDone()) { 197 while (!stream_reader.IsDone()) {
199 stream_reader.Read(); 198 stream_reader.Read();
200 } 199 }
201 base::TimeTicks end = base::TimeTicks::HighResNow(); 200 base::TimeTicks end = base::TimeTicks::HighResNow();
202 201
203 // Results. 202 // Results.
204 std::cout << "Time: " << (end - start).InMillisecondsF() << " ms\n"; 203 std::cout << "Time: " << (end - start).InMillisecondsF() << " ms\n";
(...skipping 12 matching lines...) Expand all
217 std::cout << ", " << stream_reader.counts()[i] << " packets" << std::endl; 216 std::cout << ", " << stream_reader.counts()[i] << " packets" << std::endl;
218 } 217 }
219 218
220 // Teardown. 219 // Teardown.
221 demuxer->Stop(base::Bind( 220 demuxer->Stop(base::Bind(
222 &QuitLoopWithStatus, &message_loop, media::PIPELINE_OK)); 221 &QuitLoopWithStatus, &message_loop, media::PIPELINE_OK));
223 message_loop.Run(); 222 message_loop.Run();
224 223
225 return 0; 224 return 0;
226 } 225 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698