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

Side by Side Diff: chromecast/renderer/media/demuxer_stream_adapter_unittest.cc

Issue 1372393007: [Chromecast] Upgrade to new CMA backend API (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Address alokp@ comments Created 5 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 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 <list> 5 #include <list>
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "base/thread_task_runner_handle.h" 11 #include "base/thread_task_runner_handle.h"
12 #include "base/threading/thread.h" 12 #include "base/threading/thread.h"
13 #include "base/time/time.h" 13 #include "base/time/time.h"
14 #include "chromecast/media/cma/base/balanced_media_task_runner_factory.h" 14 #include "chromecast/media/cma/base/balanced_media_task_runner_factory.h"
15 #include "chromecast/media/cma/base/decoder_buffer_base.h" 15 #include "chromecast/media/cma/base/decoder_buffer_base.h"
16 #include "chromecast/media/cma/filters/demuxer_stream_adapter.h"
17 #include "chromecast/media/cma/test/demuxer_stream_for_test.h"
18 #include "chromecast/public/media/cast_decoder_buffer.h" 16 #include "chromecast/public/media/cast_decoder_buffer.h"
17 #include "chromecast/renderer/media/demuxer_stream_adapter.h"
18 #include "chromecast/renderer/media/demuxer_stream_for_test.h"
19 #include "media/base/audio_decoder_config.h" 19 #include "media/base/audio_decoder_config.h"
20 #include "media/base/decoder_buffer.h" 20 #include "media/base/decoder_buffer.h"
21 #include "media/base/demuxer_stream.h" 21 #include "media/base/demuxer_stream.h"
22 #include "media/base/video_decoder_config.h" 22 #include "media/base/video_decoder_config.h"
23 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
24 24
25 namespace chromecast { 25 namespace chromecast {
26 namespace media { 26 namespace media {
27 27
28 class DemuxerStreamAdapterTest : public testing::Test { 28 class DemuxerStreamAdapterTest : public testing::Test {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 65
66 DemuxerStreamAdapterTest::DemuxerStreamAdapterTest() 66 DemuxerStreamAdapterTest::DemuxerStreamAdapterTest()
67 : use_post_task_for_flush_(false) { 67 : use_post_task_for_flush_(false) {
68 } 68 }
69 69
70 DemuxerStreamAdapterTest::~DemuxerStreamAdapterTest() { 70 DemuxerStreamAdapterTest::~DemuxerStreamAdapterTest() {
71 } 71 }
72 72
73 void DemuxerStreamAdapterTest::Initialize( 73 void DemuxerStreamAdapterTest::Initialize(
74 ::media::DemuxerStream* demuxer_stream) { 74 ::media::DemuxerStream* demuxer_stream) {
75 coded_frame_provider_.reset(new DemuxerStreamAdapter( 75 coded_frame_provider_.reset(
76 base::ThreadTaskRunnerHandle::Get(), 76 new DemuxerStreamAdapter(base::ThreadTaskRunnerHandle::Get(),
77 scoped_refptr<BalancedMediaTaskRunnerFactory>(), demuxer_stream)); 77 scoped_refptr<BalancedMediaTaskRunnerFactory>(),
78 demuxer_stream));
78 } 79 }
79 80
80 void DemuxerStreamAdapterTest::Start() { 81 void DemuxerStreamAdapterTest::Start() {
81 frame_received_count_ = 0; 82 frame_received_count_ = 0;
82 83
83 // TODO(damienv): currently, test assertions which fail do not trigger the 84 // TODO(damienv): currently, test assertions which fail do not trigger the
84 // exit of the unit test, the message loop is still running. Find a different 85 // exit of the unit test, the message loop is still running. Find a different
85 // way to exit the unit test. 86 // way to exit the unit test.
86 base::MessageLoop::current()->PostDelayedTask( 87 base::MessageLoop::current()->PostDelayedTask(
87 FROM_HERE, 88 FROM_HERE,
88 base::Bind(&DemuxerStreamAdapterTest::OnTestTimeout, 89 base::Bind(&DemuxerStreamAdapterTest::OnTestTimeout,
89 base::Unretained(this)), 90 base::Unretained(this)),
90 base::TimeDelta::FromSeconds(5)); 91 base::TimeDelta::FromSeconds(5));
91 92
92 coded_frame_provider_->Read( 93 coded_frame_provider_->Read(base::Bind(&DemuxerStreamAdapterTest::OnNewFrame,
93 base::Bind(&DemuxerStreamAdapterTest::OnNewFrame, 94 base::Unretained(this)));
94 base::Unretained(this)));
95 } 95 }
96 96
97 void DemuxerStreamAdapterTest::OnTestTimeout() { 97 void DemuxerStreamAdapterTest::OnTestTimeout() {
98 ADD_FAILURE() << "Test timed out"; 98 ADD_FAILURE() << "Test timed out";
99 if (base::MessageLoop::current()) 99 if (base::MessageLoop::current())
100 base::MessageLoop::current()->QuitWhenIdle(); 100 base::MessageLoop::current()->QuitWhenIdle();
101 } 101 }
102 102
103 void DemuxerStreamAdapterTest::OnNewFrame( 103 void DemuxerStreamAdapterTest::OnNewFrame(
104 const scoped_refptr<DecoderBufferBase>& buffer, 104 const scoped_refptr<DecoderBufferBase>& buffer,
105 const ::media::AudioDecoderConfig& audio_config, 105 const ::media::AudioDecoderConfig& audio_config,
106 const ::media::VideoDecoderConfig& video_config) { 106 const ::media::VideoDecoderConfig& video_config) {
107 if (video_config.IsValidConfig()) { 107 if (video_config.IsValidConfig()) {
108 ASSERT_GT(config_idx_.size(), 0u); 108 ASSERT_GT(config_idx_.size(), 0u);
109 ASSERT_EQ(frame_received_count_, config_idx_.front()); 109 ASSERT_EQ(frame_received_count_, config_idx_.front());
110 config_idx_.pop_front(); 110 config_idx_.pop_front();
111 } 111 }
112 112
113 ASSERT_TRUE(buffer.get() != NULL); 113 ASSERT_TRUE(buffer.get() != NULL);
114 ASSERT_EQ(buffer->timestamp(), 114 ASSERT_EQ(buffer->timestamp(),
115 base::TimeDelta::FromMilliseconds(40 * frame_received_count_)); 115 base::TimeDelta::FromMilliseconds(40 * frame_received_count_));
116 frame_received_count_++; 116 frame_received_count_++;
117 117
118 if (frame_received_count_ >= total_frames_) { 118 if (frame_received_count_ >= total_frames_) {
119 coded_frame_provider_->Flush( 119 coded_frame_provider_->Flush(base::Bind(
120 base::Bind(&DemuxerStreamAdapterTest::OnFlushCompleted, 120 &DemuxerStreamAdapterTest::OnFlushCompleted, base::Unretained(this)));
121 base::Unretained(this)));
122 return; 121 return;
123 } 122 }
124 123
125 coded_frame_provider_->Read( 124 coded_frame_provider_->Read(base::Bind(&DemuxerStreamAdapterTest::OnNewFrame,
126 base::Bind(&DemuxerStreamAdapterTest::OnNewFrame, 125 base::Unretained(this)));
127 base::Unretained(this)));
128 126
129 ASSERT_LE(frame_received_count_, early_flush_idx_); 127 ASSERT_LE(frame_received_count_, early_flush_idx_);
130 if (frame_received_count_ == early_flush_idx_) { 128 if (frame_received_count_ == early_flush_idx_) {
131 base::Closure flush_cb = 129 base::Closure flush_cb = base::Bind(
132 base::Bind(&DemuxerStreamAdapterTest::OnFlushCompleted, 130 &DemuxerStreamAdapterTest::OnFlushCompleted, base::Unretained(this));
133 base::Unretained(this));
134 if (use_post_task_for_flush_) { 131 if (use_post_task_for_flush_) {
135 base::MessageLoop::current()->PostTask( 132 base::MessageLoop::current()->PostTask(
136 FROM_HERE, 133 FROM_HERE,
137 base::Bind(&CodedFrameProvider::Flush, 134 base::Bind(&CodedFrameProvider::Flush,
138 base::Unretained(coded_frame_provider_.get()), 135 base::Unretained(coded_frame_provider_.get()),
139 flush_cb)); 136 flush_cb));
140 } else { 137 } else {
141 coded_frame_provider_->Flush(flush_cb); 138 coded_frame_provider_->Flush(flush_cb);
142 } 139 }
143 return; 140 return;
144 } 141 }
145 } 142 }
146 143
147 void DemuxerStreamAdapterTest::OnFlushCompleted() { 144 void DemuxerStreamAdapterTest::OnFlushCompleted() {
148 ASSERT_EQ(frame_received_count_, total_expected_frames_); 145 ASSERT_EQ(frame_received_count_, total_expected_frames_);
149 ASSERT_FALSE(demuxer_stream_->has_pending_read()); 146 ASSERT_FALSE(demuxer_stream_->has_pending_read());
150 base::MessageLoop::current()->QuitWhenIdle(); 147 base::MessageLoop::current()->QuitWhenIdle();
151 } 148 }
152 149
153 TEST_F(DemuxerStreamAdapterTest, NoDelay) { 150 TEST_F(DemuxerStreamAdapterTest, NoDelay) {
154 total_frames_ = 10; 151 total_frames_ = 10;
155 early_flush_idx_ = total_frames_; // No early flush. 152 early_flush_idx_ = total_frames_; // No early flush.
156 total_expected_frames_ = 10; 153 total_expected_frames_ = 10;
157 config_idx_.push_back(0); 154 config_idx_.push_back(0);
158 config_idx_.push_back(5); 155 config_idx_.push_back(5);
159 156
160 int cycle_count = 1; 157 int cycle_count = 1;
161 int delayed_frame_count = 0; 158 int delayed_frame_count = 0;
162 demuxer_stream_.reset(new DemuxerStreamForTest( 159 demuxer_stream_.reset(new DemuxerStreamForTest(
163 -1, cycle_count, delayed_frame_count, config_idx_)); 160 -1, cycle_count, delayed_frame_count, config_idx_));
164 161
165 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); 162 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop());
166 Initialize(demuxer_stream_.get()); 163 Initialize(demuxer_stream_.get());
167 message_loop->PostTask( 164 message_loop->PostTask(
168 FROM_HERE, 165 FROM_HERE,
169 base::Bind(&DemuxerStreamAdapterTest::Start, base::Unretained(this))); 166 base::Bind(&DemuxerStreamAdapterTest::Start, base::Unretained(this)));
170 message_loop->Run(); 167 message_loop->Run();
171 } 168 }
172 169
173 TEST_F(DemuxerStreamAdapterTest, AllDelayed) { 170 TEST_F(DemuxerStreamAdapterTest, AllDelayed) {
174 total_frames_ = 10; 171 total_frames_ = 10;
175 early_flush_idx_ = total_frames_; // No early flush. 172 early_flush_idx_ = total_frames_; // No early flush.
176 total_expected_frames_ = 10; 173 total_expected_frames_ = 10;
177 config_idx_.push_back(0); 174 config_idx_.push_back(0);
178 config_idx_.push_back(5); 175 config_idx_.push_back(5);
179 176
180 int cycle_count = 1; 177 int cycle_count = 1;
181 int delayed_frame_count = 1; 178 int delayed_frame_count = 1;
182 demuxer_stream_.reset(new DemuxerStreamForTest( 179 demuxer_stream_.reset(new DemuxerStreamForTest(
183 -1, cycle_count, delayed_frame_count, config_idx_)); 180 -1, cycle_count, delayed_frame_count, config_idx_));
184 181
185 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); 182 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop());
(...skipping 20 matching lines...) Expand all
206 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop()); 203 scoped_ptr<base::MessageLoop> message_loop(new base::MessageLoop());
207 Initialize(demuxer_stream_.get()); 204 Initialize(demuxer_stream_.get());
208 message_loop->PostTask( 205 message_loop->PostTask(
209 FROM_HERE, 206 FROM_HERE,
210 base::Bind(&DemuxerStreamAdapterTest::Start, base::Unretained(this))); 207 base::Bind(&DemuxerStreamAdapterTest::Start, base::Unretained(this)));
211 message_loop->Run(); 208 message_loop->Run();
212 } 209 }
213 210
214 } // namespace media 211 } // namespace media
215 } // namespace chromecast 212 } // namespace chromecast
OLDNEW
« no previous file with comments | « chromecast/renderer/media/demuxer_stream_adapter.cc ('k') | chromecast/renderer/media/demuxer_stream_for_test.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698