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

Side by Side Diff: media/base/android/media_source_player_unittest.cc

Issue 23787002: Rename MediaPlayerHostMsg_{DemuxerReady,ReadFromDemuxerAck}_Params to Media{Configs,Data}. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 3 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 | Annotate | Revision Log
« no previous file with comments | « media/base/android/media_source_player.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <string> 5 #include <string>
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "media/base/android/media_codec_bridge.h" 10 #include "media/base/android/media_codec_bridge.h"
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 if (is_audio) { 101 if (is_audio) {
102 return reinterpret_cast<MediaDecoderJob*>( 102 return reinterpret_cast<MediaDecoderJob*>(
103 player_->audio_decoder_job_.get()); 103 player_->audio_decoder_job_.get());
104 } 104 }
105 return reinterpret_cast<MediaDecoderJob*>( 105 return reinterpret_cast<MediaDecoderJob*>(
106 player_->video_decoder_job_.get()); 106 player_->video_decoder_job_.get());
107 } 107 }
108 108
109 // Starts an audio decoder job. 109 // Starts an audio decoder job.
110 void StartAudioDecoderJob() { 110 void StartAudioDecoderJob() {
111 MediaPlayerHostMsg_DemuxerReady_Params params; 111 DemuxerConfigs configs;
112 params.audio_codec = kCodecVorbis; 112 configs.audio_codec = kCodecVorbis;
113 params.audio_channels = 2; 113 configs.audio_channels = 2;
114 params.audio_sampling_rate = 44100; 114 configs.audio_sampling_rate = 44100;
115 params.is_audio_encrypted = false; 115 configs.is_audio_encrypted = false;
116 params.duration_ms = kDefaultDurationInMs; 116 configs.duration_ms = kDefaultDurationInMs;
117 scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile("vorbis-extradata"); 117 scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile("vorbis-extradata");
118 params.audio_extra_data = std::vector<uint8>( 118 configs.audio_extra_data = std::vector<uint8>(
119 buffer->data(), 119 buffer->data(),
120 buffer->data() + buffer->data_size()); 120 buffer->data() + buffer->data_size());
121 Start(params); 121 Start(configs);
122 } 122 }
123 123
124 void StartVideoDecoderJob() { 124 void StartVideoDecoderJob() {
125 MediaPlayerHostMsg_DemuxerReady_Params params; 125 DemuxerConfigs configs;
126 params.video_codec = kCodecVP8; 126 configs.video_codec = kCodecVP8;
127 params.video_size = gfx::Size(320, 240); 127 configs.video_size = gfx::Size(320, 240);
128 params.is_video_encrypted = false; 128 configs.is_video_encrypted = false;
129 params.duration_ms = kDefaultDurationInMs; 129 configs.duration_ms = kDefaultDurationInMs;
130 Start(params); 130 Start(configs);
131 } 131 }
132 132
133 // Starts decoding the data. 133 // Starts decoding the data.
134 void Start(const MediaPlayerHostMsg_DemuxerReady_Params& params) { 134 void Start(const DemuxerConfigs& configs) {
135 player_->DemuxerReady(params); 135 player_->DemuxerReady(configs);
136 player_->Start(); 136 player_->Start();
137 } 137 }
138 138
139 MediaPlayerHostMsg_ReadFromDemuxerAck_Params 139 DemuxerData CreateReadFromDemuxerAckForAudio(int packet_id) {
140 CreateReadFromDemuxerAckForAudio(int packet_id) { 140 DemuxerData data;
141 MediaPlayerHostMsg_ReadFromDemuxerAck_Params ack_params; 141 data.type = DemuxerStream::AUDIO;
142 ack_params.type = DemuxerStream::AUDIO; 142 data.access_units.resize(1);
143 ack_params.access_units.resize(1); 143 data.access_units[0].status = DemuxerStream::kOk;
144 ack_params.access_units[0].status = DemuxerStream::kOk;
145 scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile( 144 scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile(
146 base::StringPrintf("vorbis-packet-%d", packet_id)); 145 base::StringPrintf("vorbis-packet-%d", packet_id));
147 ack_params.access_units[0].data = std::vector<uint8>( 146 data.access_units[0].data = std::vector<uint8>(
148 buffer->data(), buffer->data() + buffer->data_size()); 147 buffer->data(), buffer->data() + buffer->data_size());
149 // Vorbis needs 4 extra bytes padding on Android to decode properly. Check 148 // Vorbis needs 4 extra bytes padding on Android to decode properly. Check
150 // NuMediaExtractor.cpp in Android source code. 149 // NuMediaExtractor.cpp in Android source code.
151 uint8 padding[4] = { 0xff , 0xff , 0xff , 0xff }; 150 uint8 padding[4] = { 0xff , 0xff , 0xff , 0xff };
152 ack_params.access_units[0].data.insert( 151 data.access_units[0].data.insert(
153 ack_params.access_units[0].data.end(), padding, padding + 4); 152 data.access_units[0].data.end(), padding, padding + 4);
154 return ack_params; 153 return data;
155 } 154 }
156 155
157 MediaPlayerHostMsg_ReadFromDemuxerAck_Params 156 DemuxerData CreateReadFromDemuxerAckForVideo() {
158 CreateReadFromDemuxerAckForVideo() { 157 DemuxerData data;
159 MediaPlayerHostMsg_ReadFromDemuxerAck_Params ack_params; 158 data.type = DemuxerStream::VIDEO;
160 ack_params.type = DemuxerStream::VIDEO; 159 data.access_units.resize(1);
161 ack_params.access_units.resize(1); 160 data.access_units[0].status = DemuxerStream::kOk;
162 ack_params.access_units[0].status = DemuxerStream::kOk;
163 scoped_refptr<DecoderBuffer> buffer = 161 scoped_refptr<DecoderBuffer> buffer =
164 ReadTestDataFile("vp8-I-frame-320x240"); 162 ReadTestDataFile("vp8-I-frame-320x240");
165 ack_params.access_units[0].data = std::vector<uint8>( 163 data.access_units[0].data = std::vector<uint8>(
166 buffer->data(), buffer->data() + buffer->data_size()); 164 buffer->data(), buffer->data() + buffer->data_size());
167 return ack_params; 165 return data;
168 } 166 }
169 167
170 MediaPlayerHostMsg_ReadFromDemuxerAck_Params CreateEOSAck(bool is_audio) { 168 DemuxerData CreateEOSAck(bool is_audio) {
171 MediaPlayerHostMsg_ReadFromDemuxerAck_Params ack_params; 169 DemuxerData data;
172 ack_params.type = is_audio ? DemuxerStream::AUDIO : DemuxerStream::VIDEO; 170 data.type = is_audio ? DemuxerStream::AUDIO : DemuxerStream::VIDEO;
173 ack_params.access_units.resize(1); 171 data.access_units.resize(1);
174 ack_params.access_units[0].status = DemuxerStream::kOk; 172 data.access_units[0].status = DemuxerStream::kOk;
175 ack_params.access_units[0].end_of_stream = true; 173 data.access_units[0].end_of_stream = true;
176 return ack_params; 174 return data;
177 } 175 }
178 176
179 base::TimeTicks StartTimeTicks() { 177 base::TimeTicks StartTimeTicks() {
180 return player_->start_time_ticks_; 178 return player_->start_time_ticks_;
181 } 179 }
182 180
183 protected: 181 protected:
184 scoped_ptr<MockMediaPlayerManager> manager_; 182 scoped_ptr<MockMediaPlayerManager> manager_;
185 scoped_ptr<MediaSourcePlayer> player_; 183 scoped_ptr<MediaSourcePlayer> player_;
186 184
187 DISALLOW_COPY_AND_ASSIGN(MediaSourcePlayerTest); 185 DISALLOW_COPY_AND_ASSIGN(MediaSourcePlayerTest);
188 }; 186 };
189 187
190 TEST_F(MediaSourcePlayerTest, StartAudioDecoderWithValidConfig) { 188 TEST_F(MediaSourcePlayerTest, StartAudioDecoderWithValidConfig) {
191 if (!MediaCodecBridge::IsAvailable()) 189 if (!MediaCodecBridge::IsAvailable())
192 return; 190 return;
193 191
194 // Test audio decoder job will be created when codec is successfully started. 192 // Test audio decoder job will be created when codec is successfully started.
195 StartAudioDecoderJob(); 193 StartAudioDecoderJob();
196 EXPECT_TRUE(NULL != GetMediaDecoderJob(true)); 194 EXPECT_TRUE(NULL != GetMediaDecoderJob(true));
197 EXPECT_EQ(1, manager_->num_requests()); 195 EXPECT_EQ(1, manager_->num_requests());
198 } 196 }
199 197
200 TEST_F(MediaSourcePlayerTest, StartAudioDecoderWithInvalidConfig) { 198 TEST_F(MediaSourcePlayerTest, StartAudioDecoderWithInvalidConfig) {
201 if (!MediaCodecBridge::IsAvailable()) 199 if (!MediaCodecBridge::IsAvailable())
202 return; 200 return;
203 201
204 // Test audio decoder job will not be created when failed to start the codec. 202 // Test audio decoder job will not be created when failed to start the codec.
205 MediaPlayerHostMsg_DemuxerReady_Params params; 203 DemuxerConfigs configs;
206 params.audio_codec = kCodecVorbis; 204 configs.audio_codec = kCodecVorbis;
207 params.audio_channels = 2; 205 configs.audio_channels = 2;
208 params.audio_sampling_rate = 44100; 206 configs.audio_sampling_rate = 44100;
209 params.is_audio_encrypted = false; 207 configs.is_audio_encrypted = false;
210 params.duration_ms = kDefaultDurationInMs; 208 configs.duration_ms = kDefaultDurationInMs;
211 uint8 invalid_codec_data[] = { 0x00, 0xff, 0xff, 0xff, 0xff }; 209 uint8 invalid_codec_data[] = { 0x00, 0xff, 0xff, 0xff, 0xff };
212 params.audio_extra_data.insert(params.audio_extra_data.begin(), 210 configs.audio_extra_data.insert(configs.audio_extra_data.begin(),
213 invalid_codec_data, invalid_codec_data + 4); 211 invalid_codec_data, invalid_codec_data + 4);
214 Start(params); 212 Start(configs);
215 EXPECT_EQ(NULL, GetMediaDecoderJob(true)); 213 EXPECT_EQ(NULL, GetMediaDecoderJob(true));
216 EXPECT_EQ(0, manager_->num_requests()); 214 EXPECT_EQ(0, manager_->num_requests());
217 } 215 }
218 216
219 TEST_F(MediaSourcePlayerTest, StartVideoCodecWithValidSurface) { 217 TEST_F(MediaSourcePlayerTest, StartVideoCodecWithValidSurface) {
220 if (!MediaCodecBridge::IsAvailable()) 218 if (!MediaCodecBridge::IsAvailable())
221 return; 219 return;
222 220
223 // Test video decoder job will be created when surface is valid. 221 // Test video decoder job will be created when surface is valid.
224 scoped_refptr<gfx::SurfaceTexture> surface_texture( 222 scoped_refptr<gfx::SurfaceTexture> surface_texture(
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 player_->OnSeekRequestAck(manager_->last_seek_request_id()); 298 player_->OnSeekRequestAck(manager_->last_seek_request_id());
301 EXPECT_TRUE(NULL != GetMediaDecoderJob(false)); 299 EXPECT_TRUE(NULL != GetMediaDecoderJob(false));
302 EXPECT_EQ(1, manager_->num_requests()); 300 EXPECT_EQ(1, manager_->num_requests());
303 } 301 }
304 302
305 TEST_F(MediaSourcePlayerTest, StartAfterSeekFinish) { 303 TEST_F(MediaSourcePlayerTest, StartAfterSeekFinish) {
306 if (!MediaCodecBridge::IsAvailable()) 304 if (!MediaCodecBridge::IsAvailable())
307 return; 305 return;
308 306
309 // Test decoder job will not start until all pending seek event is handled. 307 // Test decoder job will not start until all pending seek event is handled.
310 MediaPlayerHostMsg_DemuxerReady_Params params; 308 DemuxerConfigs configs;
311 params.audio_codec = kCodecVorbis; 309 configs.audio_codec = kCodecVorbis;
312 params.audio_channels = 2; 310 configs.audio_channels = 2;
313 params.audio_sampling_rate = 44100; 311 configs.audio_sampling_rate = 44100;
314 params.is_audio_encrypted = false; 312 configs.is_audio_encrypted = false;
315 params.duration_ms = kDefaultDurationInMs; 313 configs.duration_ms = kDefaultDurationInMs;
316 player_->DemuxerReady(params); 314 player_->DemuxerReady(configs);
317 EXPECT_EQ(NULL, GetMediaDecoderJob(true)); 315 EXPECT_EQ(NULL, GetMediaDecoderJob(true));
318 EXPECT_EQ(0, manager_->num_requests()); 316 EXPECT_EQ(0, manager_->num_requests());
319 317
320 // Initiate a seek 318 // Initiate a seek
321 player_->SeekTo(base::TimeDelta()); 319 player_->SeekTo(base::TimeDelta());
322 EXPECT_EQ(1u, manager_->last_seek_request_id()); 320 EXPECT_EQ(1u, manager_->last_seek_request_id());
323 321
324 player_->Start(); 322 player_->Start();
325 EXPECT_EQ(NULL, GetMediaDecoderJob(true)); 323 EXPECT_EQ(NULL, GetMediaDecoderJob(true));
326 EXPECT_EQ(0, manager_->num_requests()); 324 EXPECT_EQ(0, manager_->num_requests());
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 EXPECT_EQ(2, manager_->num_requests()); 362 EXPECT_EQ(2, manager_->num_requests());
365 EXPECT_FALSE(GetMediaDecoderJob(true)->is_decoding()); 363 EXPECT_FALSE(GetMediaDecoderJob(true)->is_decoding());
366 } 364 }
367 365
368 TEST_F(MediaSourcePlayerTest, DecoderJobsCannotStartWithoutAudio) { 366 TEST_F(MediaSourcePlayerTest, DecoderJobsCannotStartWithoutAudio) {
369 if (!MediaCodecBridge::IsAvailable()) 367 if (!MediaCodecBridge::IsAvailable())
370 return; 368 return;
371 369
372 // Test that when Start() is called, video decoder jobs will wait for audio 370 // Test that when Start() is called, video decoder jobs will wait for audio
373 // decoder job before start decoding the data. 371 // decoder job before start decoding the data.
374 MediaPlayerHostMsg_DemuxerReady_Params params; 372 DemuxerConfigs configs;
375 params.audio_codec = kCodecVorbis; 373 configs.audio_codec = kCodecVorbis;
376 params.audio_channels = 2; 374 configs.audio_channels = 2;
377 params.audio_sampling_rate = 44100; 375 configs.audio_sampling_rate = 44100;
378 params.is_audio_encrypted = false; 376 configs.is_audio_encrypted = false;
379 scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile("vorbis-extradata"); 377 scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile("vorbis-extradata");
380 params.audio_extra_data = std::vector<uint8>( 378 configs.audio_extra_data = std::vector<uint8>(
381 buffer->data(), 379 buffer->data(),
382 buffer->data() + buffer->data_size()); 380 buffer->data() + buffer->data_size());
383 params.video_codec = kCodecVP8; 381 configs.video_codec = kCodecVP8;
384 params.video_size = gfx::Size(320, 240); 382 configs.video_size = gfx::Size(320, 240);
385 params.is_video_encrypted = false; 383 configs.is_video_encrypted = false;
386 params.duration_ms = kDefaultDurationInMs; 384 configs.duration_ms = kDefaultDurationInMs;
387 Start(params); 385 Start(configs);
388 EXPECT_EQ(0, manager_->num_requests()); 386 EXPECT_EQ(0, manager_->num_requests());
389 387
390 scoped_refptr<gfx::SurfaceTexture> surface_texture( 388 scoped_refptr<gfx::SurfaceTexture> surface_texture(
391 new gfx::SurfaceTexture(0)); 389 new gfx::SurfaceTexture(0));
392 gfx::ScopedJavaSurface surface(surface_texture.get()); 390 gfx::ScopedJavaSurface surface(surface_texture.get());
393 player_->SetVideoSurface(surface.Pass()); 391 player_->SetVideoSurface(surface.Pass());
394 EXPECT_EQ(1u, manager_->last_seek_request_id()); 392 EXPECT_EQ(1u, manager_->last_seek_request_id());
395 player_->OnSeekRequestAck(manager_->last_seek_request_id()); 393 player_->OnSeekRequestAck(manager_->last_seek_request_id());
396 394
397 MediaDecoderJob* audio_decoder_job = GetMediaDecoderJob(true); 395 MediaDecoderJob* audio_decoder_job = GetMediaDecoderJob(true);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 EXPECT_EQ(2, manager_->num_requests()); 459 EXPECT_EQ(2, manager_->num_requests());
462 460
463 // Send EOS. 461 // Send EOS.
464 player_->ReadFromDemuxerAck(CreateEOSAck(false)); 462 player_->ReadFromDemuxerAck(CreateEOSAck(false));
465 manager_->message_loop()->Run(); 463 manager_->message_loop()->Run();
466 // No more request for data should be made. 464 // No more request for data should be made.
467 EXPECT_EQ(2, manager_->num_requests()); 465 EXPECT_EQ(2, manager_->num_requests());
468 } 466 }
469 467
470 } // namespace media 468 } // namespace media
OLDNEW
« no previous file with comments | « media/base/android/media_source_player.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698