| 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 |