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

Side by Side Diff: chromecast/media/cma/pipeline/audio_video_pipeline_impl_unittest.cc

Issue 2581013002: [chromecast] Uses mock backend for MediaPipelineImplTest. (Closed)
Patch Set: moved mocks to media/ 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 | « chromecast/media/BUILD.gn ('k') | chromecast/media/cma/test/mock_media_pipeline_backend.h » ('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 <memory> 5 #include <memory>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
11 #include "base/run_loop.h" 11 #include "base/run_loop.h"
12 #include "base/single_thread_task_runner.h" 12 #include "base/threading/thread_task_runner_handle.h"
13 #include "chromecast/media/base/decrypt_context_impl.h" 13 #include "chromecast/media/base/decrypt_context_impl.h"
14 #include "chromecast/media/cdm/cast_cdm_context.h" 14 #include "chromecast/media/cdm/cast_cdm_context.h"
15 #include "chromecast/media/cma/backend/audio_decoder_default.h"
16 #include "chromecast/media/cma/backend/media_pipeline_backend_default.h"
17 #include "chromecast/media/cma/backend/video_decoder_default.h"
18 #include "chromecast/media/cma/pipeline/av_pipeline_client.h" 15 #include "chromecast/media/cma/pipeline/av_pipeline_client.h"
19 #include "chromecast/media/cma/pipeline/media_pipeline_impl.h" 16 #include "chromecast/media/cma/pipeline/media_pipeline_impl.h"
20 #include "chromecast/media/cma/pipeline/video_pipeline_client.h" 17 #include "chromecast/media/cma/pipeline/video_pipeline_client.h"
21 #include "chromecast/media/cma/test/frame_generator_for_test.h" 18 #include "chromecast/media/cma/test/frame_generator_for_test.h"
22 #include "chromecast/media/cma/test/mock_frame_provider.h" 19 #include "chromecast/media/cma/test/mock_frame_provider.h"
20 #include "chromecast/media/cma/test/mock_media_pipeline_backend.h"
21 #include "chromecast/public/media/cast_decoder_buffer.h"
23 #include "media/base/audio_decoder_config.h" 22 #include "media/base/audio_decoder_config.h"
24 #include "media/base/media_util.h" 23 #include "media/base/media_util.h"
25 #include "media/base/video_decoder_config.h" 24 #include "media/base/video_decoder_config.h"
26 #include "media/cdm/player_tracker_impl.h" 25 #include "media/cdm/player_tracker_impl.h"
27 #include "testing/gtest/include/gtest/gtest.h" 26 #include "testing/gtest/include/gtest/gtest.h"
28 27
28 using testing::_;
29 using testing::Invoke;
30 using testing::NiceMock;
31 using testing::Return;
32 using testing::SaveArg;
33
29 namespace { 34 namespace {
30 // Total number of frames generated by CodedFrameProvider. 35 // Total number of frames generated by CodedFrameProvider.
31 // The first frame has config, while the last one is EOS. 36 // The first frame has config, while the last one is EOS.
32 const int kNumFrames = 100; 37 const int kNumFrames = 100;
33 const int kFrameSize = 512; 38 const int kFrameSize = 512;
34 const int kFrameDurationUs = 40 * 1000; 39 const int kFrameDurationUs = 40 * 1000;
35 const int kLastFrameTimestamp = (kNumFrames - 2) * kFrameDurationUs; 40 const int kLastFrameTimestamp = (kNumFrames - 2) * kFrameDurationUs;
36 } // namespace 41 } // namespace
37 42
38 namespace chromecast { 43 namespace chromecast {
39 namespace media { 44 namespace media {
40 45
46 ACTION_P2(PushBuffer, delegate, buffer_pts) {
47 if (arg0->end_of_stream()) {
48 base::ThreadTaskRunnerHandle::Get()->PostTask(
49 FROM_HERE,
50 base::Bind(&MediaPipelineBackend::Decoder::Delegate::OnEndOfStream,
51 base::Unretained(*delegate)));
52 } else {
53 *buffer_pts = arg0->timestamp();
54 }
55 return MediaPipelineBackend::kBufferSuccess;
56 }
57
41 class CastCdmContextForTest : public CastCdmContext { 58 class CastCdmContextForTest : public CastCdmContext {
42 public: 59 public:
43 CastCdmContextForTest() : license_installed_(false) {} 60 CastCdmContextForTest() : license_installed_(false) {}
44 void SetLicenseInstalled() { 61 void SetLicenseInstalled() {
45 license_installed_ = true; 62 license_installed_ = true;
46 player_tracker_.NotifyNewKey(); 63 player_tracker_.NotifyNewKey();
47 } 64 }
48 65
49 // CastCdmContext implementation: 66 // CastCdmContext implementation:
50 int RegisterPlayer(const base::Closure& new_key_cb, 67 int RegisterPlayer(const base::Closure& new_key_cb,
(...skipping 24 matching lines...) Expand all
75 base::Closure new_key_cb_; 92 base::Closure new_key_cb_;
76 ::media::PlayerTrackerImpl player_tracker_; 93 ::media::PlayerTrackerImpl player_tracker_;
77 94
78 DISALLOW_COPY_AND_ASSIGN(CastCdmContextForTest); 95 DISALLOW_COPY_AND_ASSIGN(CastCdmContextForTest);
79 }; 96 };
80 97
81 // Helper class for managing pipeline setup, teardown, feeding data, stop/start 98 // Helper class for managing pipeline setup, teardown, feeding data, stop/start
82 // etc in a simple API for tests to use. 99 // etc in a simple API for tests to use.
83 class PipelineHelper { 100 class PipelineHelper {
84 public: 101 public:
85 PipelineHelper(scoped_refptr<base::SingleThreadTaskRunner> task_runner, 102 enum Stream { STREAM_AUDIO, STREAM_VIDEO };
86 bool audio, 103
87 bool video, 104 PipelineHelper(bool audio, bool video, bool encrypted)
88 bool encrypted)
89 : have_audio_(audio), 105 : have_audio_(audio),
90 have_video_(video), 106 have_video_(video),
91 encrypted_(encrypted), 107 encrypted_(encrypted),
92 pipeline_backend_(nullptr) { 108 pipeline_backend_(nullptr),
93 eos_[STREAM_AUDIO] = eos_[STREAM_VIDEO] = false; 109 audio_decoder_delegate_(nullptr),
94 } 110 video_decoder_delegate_(nullptr) {}
95 111
96 void Setup() { 112 void Setup() {
97 if (encrypted_) { 113 if (encrypted_) {
98 cdm_context_.reset(new CastCdmContextForTest()); 114 cdm_context_.reset(new CastCdmContextForTest());
99 } 115 }
100 std::unique_ptr<MediaPipelineBackendDefault> backend = 116
101 base::MakeUnique<MediaPipelineBackendDefault>(); 117 pipeline_backend_ = new MockMediaPipelineBackend();
102 pipeline_backend_ = backend.get(); 118 ON_CALL(*pipeline_backend_, SetPlaybackRate(_)).WillByDefault(Return(true));
119 ON_CALL(audio_decoder_, SetConfig(_)).WillByDefault(Return(true));
120 ON_CALL(audio_decoder_, PushBuffer(_))
121 .WillByDefault(PushBuffer(&audio_decoder_delegate_,
122 &last_push_pts_[STREAM_AUDIO]));
123 ON_CALL(video_decoder_, SetConfig(_)).WillByDefault(Return(true));
124 ON_CALL(video_decoder_, PushBuffer(_))
125 .WillByDefault(PushBuffer(&video_decoder_delegate_,
126 &last_push_pts_[STREAM_VIDEO]));
127
103 media_pipeline_ = base::MakeUnique<MediaPipelineImpl>(); 128 media_pipeline_ = base::MakeUnique<MediaPipelineImpl>();
104 media_pipeline_->Initialize(kLoadTypeURL, std::move(backend)); 129 media_pipeline_->Initialize(kLoadTypeURL,
130 base::WrapUnique(pipeline_backend_));
105 131
106 if (have_audio_) { 132 if (have_audio_) {
107 ::media::AudioDecoderConfig audio_config( 133 ::media::AudioDecoderConfig audio_config(
108 ::media::kCodecMP3, ::media::kSampleFormatS16, 134 ::media::kCodecMP3, ::media::kSampleFormatS16,
109 ::media::CHANNEL_LAYOUT_STEREO, 44100, ::media::EmptyExtraData(), 135 ::media::CHANNEL_LAYOUT_STEREO, 44100, ::media::EmptyExtraData(),
110 ::media::Unencrypted()); 136 ::media::Unencrypted());
111 AvPipelineClient client; 137 AvPipelineClient client;
112 client.eos_cb = base::Bind(&PipelineHelper::OnEos, base::Unretained(this), 138 client.eos_cb = base::Bind(&PipelineHelper::OnEos, base::Unretained(this),
113 STREAM_AUDIO); 139 STREAM_AUDIO);
140 EXPECT_CALL(*pipeline_backend_, CreateAudioDecoder())
141 .Times(1)
142 .WillOnce(Return(&audio_decoder_));
143 EXPECT_CALL(audio_decoder_, SetDelegate(_))
144 .Times(1)
145 .WillOnce(SaveArg<0>(&audio_decoder_delegate_));
114 ::media::PipelineStatus status = media_pipeline_->InitializeAudio( 146 ::media::PipelineStatus status = media_pipeline_->InitializeAudio(
115 audio_config, client, CreateFrameProvider()); 147 audio_config, client, CreateFrameProvider());
116 ASSERT_EQ(::media::PIPELINE_OK, status); 148 ASSERT_EQ(::media::PIPELINE_OK, status);
117 } 149 }
118 if (have_video_) { 150 if (have_video_) {
119 std::vector<::media::VideoDecoderConfig> video_configs; 151 std::vector<::media::VideoDecoderConfig> video_configs;
120 video_configs.push_back(::media::VideoDecoderConfig( 152 video_configs.push_back(::media::VideoDecoderConfig(
121 ::media::kCodecH264, ::media::H264PROFILE_MAIN, 153 ::media::kCodecH264, ::media::H264PROFILE_MAIN,
122 ::media::PIXEL_FORMAT_I420, ::media::COLOR_SPACE_UNSPECIFIED, 154 ::media::PIXEL_FORMAT_I420, ::media::COLOR_SPACE_UNSPECIFIED,
123 gfx::Size(640, 480), gfx::Rect(0, 0, 640, 480), gfx::Size(640, 480), 155 gfx::Size(640, 480), gfx::Rect(0, 0, 640, 480), gfx::Size(640, 480),
124 ::media::EmptyExtraData(), ::media::EncryptionScheme())); 156 ::media::EmptyExtraData(), ::media::EncryptionScheme()));
125 VideoPipelineClient client; 157 VideoPipelineClient client;
126 client.av_pipeline_client.eos_cb = base::Bind( 158 client.av_pipeline_client.eos_cb = base::Bind(
127 &PipelineHelper::OnEos, base::Unretained(this), STREAM_VIDEO); 159 &PipelineHelper::OnEos, base::Unretained(this), STREAM_VIDEO);
160 EXPECT_CALL(*pipeline_backend_, CreateVideoDecoder())
161 .Times(1)
162 .WillOnce(Return(&video_decoder_));
163 EXPECT_CALL(video_decoder_, SetDelegate(_))
164 .Times(1)
165 .WillOnce(SaveArg<0>(&video_decoder_delegate_));
128 ::media::PipelineStatus status = media_pipeline_->InitializeVideo( 166 ::media::PipelineStatus status = media_pipeline_->InitializeVideo(
129 video_configs, client, CreateFrameProvider()); 167 video_configs, client, CreateFrameProvider());
130 ASSERT_EQ(::media::PIPELINE_OK, status); 168 ASSERT_EQ(::media::PIPELINE_OK, status);
131 } 169 }
132 } 170 }
133 171
134 void Start(const base::Closure& eos_cb) { 172 void Start(const base::Closure& eos_cb) {
135 eos_cb_ = eos_cb; 173 eos_cb_ = eos_cb;
136 eos_[STREAM_AUDIO] = !media_pipeline_->HasAudio(); 174 eos_[STREAM_AUDIO] = !media_pipeline_->HasAudio();
137 eos_[STREAM_VIDEO] = !media_pipeline_->HasVideo(); 175 eos_[STREAM_VIDEO] = !media_pipeline_->HasVideo();
138 base::TimeDelta start_time = base::TimeDelta::FromMilliseconds(0); 176 last_push_pts_[STREAM_AUDIO] = std::numeric_limits<int64_t>::min();
139 media_pipeline_->StartPlayingFrom(start_time); 177 last_push_pts_[STREAM_VIDEO] = std::numeric_limits<int64_t>::min();
140 media_pipeline_->SetPlaybackRate(1.0); 178 int64_t start_pts = 0;
179
180 EXPECT_CALL(*pipeline_backend_, Initialize())
181 .Times(1)
182 .WillOnce(Return(true));
183 EXPECT_CALL(*pipeline_backend_, Start(start_pts))
184 .Times(1)
185 .WillOnce(Return(true));
186
187 media_pipeline_->StartPlayingFrom(
188 base::TimeDelta::FromMilliseconds(start_pts));
189 media_pipeline_->SetPlaybackRate(1.0f);
141 } 190 }
142 void SetCdm() { media_pipeline_->SetCdm(cdm_context_.get()); } 191 void SetCdm() { media_pipeline_->SetCdm(cdm_context_.get()); }
143 void Flush(const base::Closure& flush_cb) { 192 void Flush(const base::Closure& flush_cb) {
193 EXPECT_CALL(*pipeline_backend_, Stop()).Times(1);
144 media_pipeline_->Flush(flush_cb); 194 media_pipeline_->Flush(flush_cb);
145 } 195 }
146 void Stop() { 196 void Stop() {
147 media_pipeline_.reset(); 197 media_pipeline_.reset();
148 base::MessageLoop::current()->QuitWhenIdle(); 198 base::MessageLoop::current()->QuitWhenIdle();
149 } 199 }
150 void SetCdmLicenseInstalled() { cdm_context_->SetLicenseInstalled(); } 200 void SetCdmLicenseInstalled() { cdm_context_->SetLicenseInstalled(); }
151 201
152 MediaPipelineBackendDefault* pipeline_backend() { return pipeline_backend_; } 202 bool have_audio() const { return have_audio_; }
203 bool have_video() const { return have_video_; }
204 int64_t last_push_pts(Stream stream) const { return last_push_pts_[stream]; }
153 205
154 private: 206 private:
155 enum Stream { STREAM_AUDIO, STREAM_VIDEO };
156
157 std::unique_ptr<CodedFrameProvider> CreateFrameProvider() { 207 std::unique_ptr<CodedFrameProvider> CreateFrameProvider() {
158 std::vector<FrameGeneratorForTest::FrameSpec> frame_specs; 208 std::vector<FrameGeneratorForTest::FrameSpec> frame_specs;
159 frame_specs.resize(kNumFrames); 209 frame_specs.resize(kNumFrames);
160 for (size_t k = 0; k < frame_specs.size() - 1; k++) { 210 for (size_t k = 0; k < frame_specs.size() - 1; k++) {
161 frame_specs[k].has_config = (k == 0); 211 frame_specs[k].has_config = (k == 0);
162 frame_specs[k].timestamp = 212 frame_specs[k].timestamp =
163 base::TimeDelta::FromMicroseconds(kFrameDurationUs) * k; 213 base::TimeDelta::FromMicroseconds(kFrameDurationUs) * k;
164 frame_specs[k].size = kFrameSize; 214 frame_specs[k].size = kFrameSize;
165 frame_specs[k].has_decrypt_config = encrypted_; 215 frame_specs[k].has_decrypt_config = encrypted_;
166 } 216 }
(...skipping 15 matching lines...) Expand all
182 void OnEos(Stream stream) { 232 void OnEos(Stream stream) {
183 eos_[stream] = true; 233 eos_[stream] = true;
184 if (eos_[STREAM_AUDIO] && eos_[STREAM_VIDEO] && !eos_cb_.is_null()) 234 if (eos_[STREAM_AUDIO] && eos_[STREAM_VIDEO] && !eos_cb_.is_null())
185 eos_cb_.Run(); 235 eos_cb_.Run();
186 } 236 }
187 237
188 bool have_audio_; 238 bool have_audio_;
189 bool have_video_; 239 bool have_video_;
190 bool encrypted_; 240 bool encrypted_;
191 bool eos_[2]; 241 bool eos_[2];
242 int64_t last_push_pts_[2];
192 base::Closure eos_cb_; 243 base::Closure eos_cb_;
193 std::unique_ptr<CastCdmContextForTest> cdm_context_; 244 std::unique_ptr<CastCdmContextForTest> cdm_context_;
245 MockMediaPipelineBackend* pipeline_backend_;
246 NiceMock<MockAudioDecoder> audio_decoder_;
247 NiceMock<MockVideoDecoder> video_decoder_;
248 MediaPipelineBackend::Decoder::Delegate* audio_decoder_delegate_;
249 MediaPipelineBackend::Decoder::Delegate* video_decoder_delegate_;
194 std::unique_ptr<MediaPipelineImpl> media_pipeline_; 250 std::unique_ptr<MediaPipelineImpl> media_pipeline_;
195 MediaPipelineBackendDefault* pipeline_backend_;
196 251
197 DISALLOW_COPY_AND_ASSIGN(PipelineHelper); 252 DISALLOW_COPY_AND_ASSIGN(PipelineHelper);
198 }; 253 };
199 254
200 using AudioVideoTuple = ::testing::tuple<bool, bool>; 255 using AudioVideoTuple = ::testing::tuple<bool, bool>;
201 256
202 class AudioVideoPipelineImplTest 257 class AudioVideoPipelineImplTest
203 : public ::testing::TestWithParam<AudioVideoTuple> { 258 : public ::testing::TestWithParam<AudioVideoTuple> {
204 public: 259 public:
205 AudioVideoPipelineImplTest() {} 260 AudioVideoPipelineImplTest() {}
206 261
207 protected: 262 protected:
208 void SetUp() override { 263 void SetUp() override {
209 pipeline_helper_.reset(new PipelineHelper( 264 pipeline_helper_.reset(new PipelineHelper(
210 message_loop_.task_runner(), ::testing::get<0>(GetParam()), 265 ::testing::get<0>(GetParam()), ::testing::get<1>(GetParam()), false));
211 ::testing::get<1>(GetParam()), false));
212 pipeline_helper_->Setup(); 266 pipeline_helper_->Setup();
213 } 267 }
214 268
215 base::MessageLoop message_loop_; 269 base::MessageLoop message_loop_;
216 std::unique_ptr<PipelineHelper> pipeline_helper_; 270 std::unique_ptr<PipelineHelper> pipeline_helper_;
217 271
218 DISALLOW_COPY_AND_ASSIGN(AudioVideoPipelineImplTest); 272 DISALLOW_COPY_AND_ASSIGN(AudioVideoPipelineImplTest);
219 }; 273 };
220 274
221 static void VerifyPlay(PipelineHelper* pipeline_helper) { 275 static void VerifyPlay(PipelineHelper* pipeline_helper) {
222 // The backend must still be running. 276 // The decoders must have received the last frame.
223 MediaPipelineBackendDefault* backend = pipeline_helper->pipeline_backend(); 277 if (pipeline_helper->have_audio())
224 EXPECT_TRUE(backend->running()); 278 EXPECT_EQ(kLastFrameTimestamp,
225 279 pipeline_helper->last_push_pts(PipelineHelper::STREAM_AUDIO));
226 // The decoders must have received a few frames. 280 if (pipeline_helper->have_video())
227 const AudioDecoderDefault* audio_decoder = backend->audio_decoder(); 281 EXPECT_EQ(kLastFrameTimestamp,
228 const VideoDecoderDefault* video_decoder = backend->video_decoder(); 282 pipeline_helper->last_push_pts(PipelineHelper::STREAM_VIDEO));
229 ASSERT_TRUE(audio_decoder || video_decoder);
230 if (audio_decoder)
231 EXPECT_EQ(kLastFrameTimestamp, audio_decoder->last_push_pts());
232 if (video_decoder)
233 EXPECT_EQ(kLastFrameTimestamp, video_decoder->last_push_pts());
234 283
235 pipeline_helper->Stop(); 284 pipeline_helper->Stop();
236 } 285 }
237 286
238 TEST_P(AudioVideoPipelineImplTest, Play) { 287 TEST_P(AudioVideoPipelineImplTest, Play) {
239 base::Closure verify_task = 288 base::Closure verify_task =
240 base::Bind(&VerifyPlay, base::Unretained(pipeline_helper_.get())); 289 base::Bind(&VerifyPlay, base::Unretained(pipeline_helper_.get()));
241 message_loop_.task_runner()->PostTask( 290 message_loop_.task_runner()->PostTask(
242 FROM_HERE, 291 FROM_HERE,
243 base::Bind(&PipelineHelper::Start, 292 base::Bind(&PipelineHelper::Start,
244 base::Unretained(pipeline_helper_.get()), verify_task)); 293 base::Unretained(pipeline_helper_.get()), verify_task));
245 base::RunLoop().Run(); 294 base::RunLoop().Run();
246 } 295 }
247 296
248 static void VerifyFlush(PipelineHelper* pipeline_helper) { 297 static void VerifyFlush(PipelineHelper* pipeline_helper) {
249 // The backend must have been stopped.
250 MediaPipelineBackendDefault* backend = pipeline_helper->pipeline_backend();
251 EXPECT_FALSE(backend->running());
252
253 // The decoders must not have received any frame. 298 // The decoders must not have received any frame.
254 const AudioDecoderDefault* audio_decoder = backend->audio_decoder(); 299 if (pipeline_helper->have_audio())
255 const VideoDecoderDefault* video_decoder = backend->video_decoder(); 300 EXPECT_LT(pipeline_helper->last_push_pts(PipelineHelper::STREAM_AUDIO), 0);
256 ASSERT_TRUE(audio_decoder || video_decoder); 301 if (pipeline_helper->have_video())
257 if (audio_decoder) 302 EXPECT_LT(pipeline_helper->last_push_pts(PipelineHelper::STREAM_VIDEO), 0);
258 EXPECT_LT(audio_decoder->last_push_pts(), 0);
259 if (video_decoder)
260 EXPECT_LT(video_decoder->last_push_pts(), 0);
261 303
262 pipeline_helper->Stop(); 304 pipeline_helper->Stop();
263 } 305 }
264 306
265 static void VerifyNotReached() { 307 static void VerifyNotReached() {
266 EXPECT_TRUE(false); 308 EXPECT_TRUE(false);
267 } 309 }
268 310
269 TEST_P(AudioVideoPipelineImplTest, Flush) { 311 TEST_P(AudioVideoPipelineImplTest, Flush) {
270 base::Closure verify_task = 312 base::Closure verify_task =
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 AudioVideoTuple(true, true))); // Audio and Video. 345 AudioVideoTuple(true, true))); // Audio and Video.
304 346
305 // These tests verify that the pipeline handles encrypted media playback 347 // These tests verify that the pipeline handles encrypted media playback
306 // events (in particular, CDM and license installation) correctly. 348 // events (in particular, CDM and license installation) correctly.
307 class EncryptedAVPipelineImplTest : public ::testing::Test { 349 class EncryptedAVPipelineImplTest : public ::testing::Test {
308 public: 350 public:
309 EncryptedAVPipelineImplTest() {} 351 EncryptedAVPipelineImplTest() {}
310 352
311 protected: 353 protected:
312 void SetUp() override { 354 void SetUp() override {
313 pipeline_helper_.reset( 355 pipeline_helper_.reset(new PipelineHelper(true, true, true));
314 new PipelineHelper(message_loop_.task_runner(), true, true, true));
315 pipeline_helper_->Setup(); 356 pipeline_helper_->Setup();
316 } 357 }
317 358
318 base::MessageLoop message_loop_; 359 base::MessageLoop message_loop_;
319 std::unique_ptr<PipelineHelper> pipeline_helper_; 360 std::unique_ptr<PipelineHelper> pipeline_helper_;
320 361
321 DISALLOW_COPY_AND_ASSIGN(EncryptedAVPipelineImplTest); 362 DISALLOW_COPY_AND_ASSIGN(EncryptedAVPipelineImplTest);
322 }; 363 };
323 364
324 // Sets a CDM with license already installed before starting the pipeline. 365 // Sets a CDM with license already installed before starting the pipeline.
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 412
372 base::RunLoop().RunUntilIdle(); 413 base::RunLoop().RunUntilIdle();
373 message_loop_.task_runner()->PostTask( 414 message_loop_.task_runner()->PostTask(
374 FROM_HERE, base::Bind(&PipelineHelper::SetCdmLicenseInstalled, 415 FROM_HERE, base::Bind(&PipelineHelper::SetCdmLicenseInstalled,
375 base::Unretained(pipeline_helper_.get()))); 416 base::Unretained(pipeline_helper_.get())));
376 base::RunLoop().Run(); 417 base::RunLoop().Run();
377 } 418 }
378 419
379 } // namespace media 420 } // namespace media
380 } // namespace chromecast 421 } // namespace chromecast
OLDNEW
« no previous file with comments | « chromecast/media/BUILD.gn ('k') | chromecast/media/cma/test/mock_media_pipeline_backend.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698