OLD | NEW |
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 "media/base/android/media_codec_bridge.h" | 9 #include "media/base/android/media_codec_bridge.h" |
10 #include "media/base/android/media_player_manager.h" | 10 #include "media/base/android/media_player_manager.h" |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 // Starts an audio decoder job. | 102 // Starts an audio decoder job. |
103 void StartAudioDecoderJob() { | 103 void StartAudioDecoderJob() { |
104 MediaPlayerHostMsg_DemuxerReady_Params params; | 104 MediaPlayerHostMsg_DemuxerReady_Params params; |
105 params.audio_codec = kCodecVorbis; | 105 params.audio_codec = kCodecVorbis; |
106 params.audio_channels = 2; | 106 params.audio_channels = 2; |
107 params.audio_sampling_rate = 44100; | 107 params.audio_sampling_rate = 44100; |
108 params.is_audio_encrypted = false; | 108 params.is_audio_encrypted = false; |
109 params.duration_ms = kDefaultDurationInMs; | 109 params.duration_ms = kDefaultDurationInMs; |
110 scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile("vorbis-extradata"); | 110 scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile("vorbis-extradata"); |
111 params.audio_extra_data = std::vector<uint8>( | 111 params.audio_extra_data = std::vector<uint8>( |
112 buffer->GetData(), | 112 buffer->data(), |
113 buffer->GetData() + buffer->GetDataSize()); | 113 buffer->data() + buffer->data_size()); |
114 Start(params); | 114 Start(params); |
115 } | 115 } |
116 | 116 |
117 void StartVideoDecoderJob() { | 117 void StartVideoDecoderJob() { |
118 MediaPlayerHostMsg_DemuxerReady_Params params; | 118 MediaPlayerHostMsg_DemuxerReady_Params params; |
119 params.video_codec = kCodecVP8; | 119 params.video_codec = kCodecVP8; |
120 params.video_size = gfx::Size(320, 240); | 120 params.video_size = gfx::Size(320, 240); |
121 params.is_video_encrypted = false; | 121 params.is_video_encrypted = false; |
122 params.duration_ms = kDefaultDurationInMs; | 122 params.duration_ms = kDefaultDurationInMs; |
123 Start(params); | 123 Start(params); |
124 } | 124 } |
125 | 125 |
126 // Starts decoding the data. | 126 // Starts decoding the data. |
127 void Start(const MediaPlayerHostMsg_DemuxerReady_Params& params) { | 127 void Start(const MediaPlayerHostMsg_DemuxerReady_Params& params) { |
128 player_->DemuxerReady(params); | 128 player_->DemuxerReady(params); |
129 player_->Start(); | 129 player_->Start(); |
130 } | 130 } |
131 | 131 |
132 MediaPlayerHostMsg_ReadFromDemuxerAck_Params | 132 MediaPlayerHostMsg_ReadFromDemuxerAck_Params |
133 CreateReadFromDemuxerAckForAudio() { | 133 CreateReadFromDemuxerAckForAudio() { |
134 MediaPlayerHostMsg_ReadFromDemuxerAck_Params ack_params; | 134 MediaPlayerHostMsg_ReadFromDemuxerAck_Params ack_params; |
135 ack_params.type = DemuxerStream::AUDIO; | 135 ack_params.type = DemuxerStream::AUDIO; |
136 ack_params.access_units.resize(1); | 136 ack_params.access_units.resize(1); |
137 ack_params.access_units[0].status = DemuxerStream::kOk; | 137 ack_params.access_units[0].status = DemuxerStream::kOk; |
138 scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile("vorbis-packet-0"); | 138 scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile("vorbis-packet-0"); |
139 ack_params.access_units[0].data = std::vector<uint8>( | 139 ack_params.access_units[0].data = std::vector<uint8>( |
140 buffer->GetData(), buffer->GetData() + buffer->GetDataSize()); | 140 buffer->data(), buffer->data() + buffer->data_size()); |
141 // Vorbis needs 4 extra bytes padding on Android to decode properly. Check | 141 // Vorbis needs 4 extra bytes padding on Android to decode properly. Check |
142 // NuMediaExtractor.cpp in Android source code. | 142 // NuMediaExtractor.cpp in Android source code. |
143 uint8 padding[4] = { 0xff , 0xff , 0xff , 0xff }; | 143 uint8 padding[4] = { 0xff , 0xff , 0xff , 0xff }; |
144 ack_params.access_units[0].data.insert( | 144 ack_params.access_units[0].data.insert( |
145 ack_params.access_units[0].data.end(), padding, padding + 4); | 145 ack_params.access_units[0].data.end(), padding, padding + 4); |
146 return ack_params; | 146 return ack_params; |
147 } | 147 } |
148 | 148 |
149 MediaPlayerHostMsg_ReadFromDemuxerAck_Params | 149 MediaPlayerHostMsg_ReadFromDemuxerAck_Params |
150 CreateReadFromDemuxerAckForVideo() { | 150 CreateReadFromDemuxerAckForVideo() { |
151 MediaPlayerHostMsg_ReadFromDemuxerAck_Params ack_params; | 151 MediaPlayerHostMsg_ReadFromDemuxerAck_Params ack_params; |
152 ack_params.type = DemuxerStream::VIDEO; | 152 ack_params.type = DemuxerStream::VIDEO; |
153 ack_params.access_units.resize(1); | 153 ack_params.access_units.resize(1); |
154 ack_params.access_units[0].status = DemuxerStream::kOk; | 154 ack_params.access_units[0].status = DemuxerStream::kOk; |
155 scoped_refptr<DecoderBuffer> buffer = | 155 scoped_refptr<DecoderBuffer> buffer = |
156 ReadTestDataFile("vp8-I-frame-320x240"); | 156 ReadTestDataFile("vp8-I-frame-320x240"); |
157 ack_params.access_units[0].data = std::vector<uint8>( | 157 ack_params.access_units[0].data = std::vector<uint8>( |
158 buffer->GetData(), buffer->GetData() + buffer->GetDataSize()); | 158 buffer->data(), buffer->data() + buffer->data_size()); |
159 return ack_params; | 159 return ack_params; |
160 } | 160 } |
161 | 161 |
162 base::TimeTicks StartTimeTicks() { | 162 base::TimeTicks StartTimeTicks() { |
163 return player_->start_time_ticks_; | 163 return player_->start_time_ticks_; |
164 } | 164 } |
165 | 165 |
166 protected: | 166 protected: |
167 scoped_ptr<MockMediaPlayerManager> manager_; | 167 scoped_ptr<MockMediaPlayerManager> manager_; |
168 scoped_ptr<MediaSourcePlayer> player_; | 168 scoped_ptr<MediaSourcePlayer> player_; |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
354 | 354 |
355 // Test that when Start() is called, video decoder jobs will wait for audio | 355 // Test that when Start() is called, video decoder jobs will wait for audio |
356 // decoder job before start decoding the data. | 356 // decoder job before start decoding the data. |
357 MediaPlayerHostMsg_DemuxerReady_Params params; | 357 MediaPlayerHostMsg_DemuxerReady_Params params; |
358 params.audio_codec = kCodecVorbis; | 358 params.audio_codec = kCodecVorbis; |
359 params.audio_channels = 2; | 359 params.audio_channels = 2; |
360 params.audio_sampling_rate = 44100; | 360 params.audio_sampling_rate = 44100; |
361 params.is_audio_encrypted = false; | 361 params.is_audio_encrypted = false; |
362 scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile("vorbis-extradata"); | 362 scoped_refptr<DecoderBuffer> buffer = ReadTestDataFile("vorbis-extradata"); |
363 params.audio_extra_data = std::vector<uint8>( | 363 params.audio_extra_data = std::vector<uint8>( |
364 buffer->GetData(), | 364 buffer->data(), |
365 buffer->GetData() + buffer->GetDataSize()); | 365 buffer->data() + buffer->data_size()); |
366 params.video_codec = kCodecVP8; | 366 params.video_codec = kCodecVP8; |
367 params.video_size = gfx::Size(320, 240); | 367 params.video_size = gfx::Size(320, 240); |
368 params.is_video_encrypted = false; | 368 params.is_video_encrypted = false; |
369 params.duration_ms = kDefaultDurationInMs; | 369 params.duration_ms = kDefaultDurationInMs; |
370 Start(params); | 370 Start(params); |
371 EXPECT_EQ(0, manager_->num_requests()); | 371 EXPECT_EQ(0, manager_->num_requests()); |
372 | 372 |
373 scoped_refptr<gfx::SurfaceTextureBridge> surface_texture( | 373 scoped_refptr<gfx::SurfaceTextureBridge> surface_texture( |
374 new gfx::SurfaceTextureBridge(0)); | 374 new gfx::SurfaceTextureBridge(0)); |
375 gfx::ScopedJavaSurface surface(surface_texture.get()); | 375 gfx::ScopedJavaSurface surface(surface_texture.get()); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(100)); | 414 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(100)); |
415 manager_->message_loop()->RunUntilIdle(); | 415 manager_->message_loop()->RunUntilIdle(); |
416 | 416 |
417 // Send new data to the decoder. This should reset the start time ticks. | 417 // Send new data to the decoder. This should reset the start time ticks. |
418 player_->ReadFromDemuxerAck(CreateReadFromDemuxerAckForAudio()); | 418 player_->ReadFromDemuxerAck(CreateReadFromDemuxerAckForAudio()); |
419 base::TimeTicks current = StartTimeTicks(); | 419 base::TimeTicks current = StartTimeTicks(); |
420 EXPECT_LE(100.0, (current - previous).InMillisecondsF()); | 420 EXPECT_LE(100.0, (current - previous).InMillisecondsF()); |
421 } | 421 } |
422 | 422 |
423 } // namespace media | 423 } // namespace media |
OLD | NEW |