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

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

Issue 74563002: AndroidVideoEncodeAccelerator is born! (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 1 month 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
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/logging.h" 8 #include "base/logging.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "media/base/android/media_codec_bridge.h" 10 #include "media/base/android/media_codec_bridge.h"
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 void DecodeMediaFrame( 111 void DecodeMediaFrame(
112 VideoCodecBridge* media_codec, const uint8* data, size_t data_size, 112 VideoCodecBridge* media_codec, const uint8* data, size_t data_size,
113 const base::TimeDelta input_presentation_timestamp, 113 const base::TimeDelta input_presentation_timestamp,
114 const base::TimeDelta initial_timestamp_lower_bound) { 114 const base::TimeDelta initial_timestamp_lower_bound) {
115 base::TimeDelta input_pts = input_presentation_timestamp; 115 base::TimeDelta input_pts = input_presentation_timestamp;
116 base::TimeDelta timestamp = initial_timestamp_lower_bound; 116 base::TimeDelta timestamp = initial_timestamp_lower_bound;
117 base::TimeDelta new_timestamp; 117 base::TimeDelta new_timestamp;
118 for (int i = 0; i < 10; ++i) { 118 for (int i = 0; i < 10; ++i) {
119 int input_buf_index = -1; 119 int input_buf_index = -1;
120 MediaCodecStatus status = 120 MediaCodecStatus status =
121 media_codec->DequeueInputBuffer(InfiniteTimeOut(), &input_buf_index); 121 media_codec->DequeueInputBuffer(InfiniteTimeOut(), &input_buf_index, 0);
122 ASSERT_EQ(MEDIA_CODEC_OK, status); 122 ASSERT_EQ(MEDIA_CODEC_OK, status);
123 123
124 media_codec->QueueInputBuffer( 124 media_codec->QueueInputBuffer(
125 input_buf_index, data, data_size, input_presentation_timestamp); 125 input_buf_index, data, data_size, input_presentation_timestamp);
126 126
127 size_t unused_offset = 0; 127 size_t unused_offset = 0;
128 size_t size = 0; 128 size_t size = 0;
129 bool eos = false; 129 bool eos = false;
130 int output_buf_index = -1; 130 int output_buf_index = -1;
131 status = media_codec->DequeueOutputBuffer(InfiniteTimeOut(), 131 status = media_codec->DequeueOutputBuffer(InfiniteTimeOut(),
132 &output_buf_index, &unused_offset, &size, &new_timestamp, &eos); 132 &output_buf_index, &unused_offset, &size, &new_timestamp, &eos);
133 133
134 if (status == MEDIA_CODEC_OK && output_buf_index > 0) 134 if (status == MEDIA_CODEC_OK && output_buf_index > 0)
135 media_codec->ReleaseOutputBuffer(output_buf_index, false); 135 media_codec->ReleaseOutputBuffer(output_buf_index, false);
136 // Output time stamp should not be smaller than old timestamp. 136 // Output time stamp should not be smaller than old timestamp.
137 ASSERT_TRUE(new_timestamp >= timestamp); 137 ASSERT_TRUE(new_timestamp >= timestamp);
138 input_pts += base::TimeDelta::FromMicroseconds(33000); 138 input_pts += base::TimeDelta::FromMicroseconds(33000);
139 timestamp = new_timestamp; 139 timestamp = new_timestamp;
140 } 140 }
141 } 141 }
142 142
143 TEST(MediaCodecBridgeTest, Initialize) { 143 TEST(MediaCodecBridgeTest, Initialize) {
144 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); 144 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE();
145 145
146 scoped_ptr<media::MediaCodecBridge> media_codec; 146 scoped_ptr<media::MediaCodecBridge> media_codec;
147 media_codec.reset(VideoCodecBridge::Create(kCodecH264, false)); 147 media_codec.reset(VideoCodecBridge::Create(kCodecH264, false, false));
148 } 148 }
149 149
150 TEST(MediaCodecBridgeTest, DoNormal) { 150 TEST(MediaCodecBridgeTest, DoNormal) {
151 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); 151 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE();
152 152
153 scoped_ptr<media::AudioCodecBridge> media_codec; 153 scoped_ptr<media::AudioCodecBridge> media_codec;
154 media_codec.reset(AudioCodecBridge::Create(kCodecMP3)); 154 media_codec.reset(AudioCodecBridge::Create(kCodecMP3));
155 155
156 ASSERT_TRUE(media_codec->Start(kCodecMP3, 44100, 2, NULL, 0, false, NULL)); 156 ASSERT_TRUE(media_codec->Start(kCodecMP3, 44100, 2, NULL, 0, false, NULL));
157 157
158 int input_buf_index = -1; 158 int input_buf_index = -1;
159 MediaCodecStatus status = 159 MediaCodecStatus status =
160 media_codec->DequeueInputBuffer(InfiniteTimeOut(), &input_buf_index); 160 media_codec->DequeueInputBuffer(InfiniteTimeOut(), &input_buf_index, 0);
161 ASSERT_EQ(MEDIA_CODEC_OK, status); 161 ASSERT_EQ(MEDIA_CODEC_OK, status);
162 ASSERT_GE(input_buf_index, 0); 162 ASSERT_GE(input_buf_index, 0);
163 163
164 int64 input_pts = kPresentationTimeBase; 164 int64 input_pts = kPresentationTimeBase;
165 media_codec->QueueInputBuffer( 165 media_codec->QueueInputBuffer(input_buf_index, test_mp3, sizeof(test_mp3),
166 input_buf_index, test_mp3, sizeof(test_mp3), 166 base::TimeDelta::FromMicroseconds(++input_pts),
167 base::TimeDelta::FromMicroseconds(++input_pts)); 167 0);
168 168
169 status = media_codec->DequeueInputBuffer(InfiniteTimeOut(), &input_buf_index); 169 status = media_codec->DequeueInputBuffer(InfiniteTimeOut(), &input_buf_index);
170 media_codec->QueueInputBuffer( 170 media_codec->QueueInputBuffer(
171 input_buf_index, test_mp3, sizeof(test_mp3), 171 input_buf_index, test_mp3, sizeof(test_mp3),
172 base::TimeDelta::FromMicroseconds(++input_pts)); 172 base::TimeDelta::FromMicroseconds(++input_pts));
173 173
174 status = media_codec->DequeueInputBuffer(InfiniteTimeOut(), &input_buf_index); 174 status = media_codec->DequeueInputBuffer(InfiniteTimeOut(), &input_buf_index);
175 media_codec->QueueEOS(input_buf_index); 175 media_codec->QueueEOS(input_buf_index);
176 176
177 input_pts = kPresentationTimeBase; 177 input_pts = kPresentationTimeBase;
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 very_large_header[large_size - 1] = 0xfe; 233 very_large_header[large_size - 1] = 0xfe;
234 EXPECT_FALSE(media_codec->Start( 234 EXPECT_FALSE(media_codec->Start(
235 kCodecVorbis, 44100, 2, very_large_header, 0x80000000, false, NULL)); 235 kCodecVorbis, 44100, 2, very_large_header, 0x80000000, false, NULL));
236 delete[] very_large_header; 236 delete[] very_large_header;
237 } 237 }
238 238
239 TEST(MediaCodecBridgeTest, PresentationTimestampsDoNotDecrease) { 239 TEST(MediaCodecBridgeTest, PresentationTimestampsDoNotDecrease) {
240 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE(); 240 SKIP_TEST_IF_MEDIA_CODEC_BRIDGE_IS_NOT_AVAILABLE();
241 241
242 scoped_ptr<VideoCodecBridge> media_codec; 242 scoped_ptr<VideoCodecBridge> media_codec;
243 media_codec.reset(VideoCodecBridge::Create(kCodecVP8, false)); 243 media_codec.reset(VideoCodecBridge::Create(kCodecVP8, false, false));
244 EXPECT_TRUE(media_codec->Start( 244 EXPECT_TRUE(media_codec->Start(
245 kCodecVP8, gfx::Size(320, 240), NULL, NULL)); 245 kCodecVP8, gfx::Size(320, 240), NULL, NULL));
246 scoped_refptr<DecoderBuffer> buffer = 246 scoped_refptr<DecoderBuffer> buffer =
247 ReadTestDataFile("vp8-I-frame-320x240"); 247 ReadTestDataFile("vp8-I-frame-320x240");
248 DecodeMediaFrame( 248 DecodeMediaFrame(
249 media_codec.get(), buffer->data(), buffer->data_size(), 249 media_codec.get(), buffer->data(), buffer->data_size(),
250 base::TimeDelta(), base::TimeDelta()); 250 base::TimeDelta(), base::TimeDelta());
251 251
252 // Simulate a seek to 10 seconds, and each chunk has 2 I-frames. 252 // Simulate a seek to 10 seconds, and each chunk has 2 I-frames.
253 std::vector<uint8> chunk(buffer->data(), 253 std::vector<uint8> chunk(buffer->data(),
254 buffer->data() + buffer->data_size()); 254 buffer->data() + buffer->data_size());
255 chunk.insert(chunk.end(), buffer->data(), 255 chunk.insert(chunk.end(), buffer->data(),
256 buffer->data() + buffer->data_size()); 256 buffer->data() + buffer->data_size());
257 media_codec->Reset(); 257 media_codec->Reset();
258 DecodeMediaFrame(media_codec.get(), &chunk[0], chunk.size(), 258 DecodeMediaFrame(media_codec.get(), &chunk[0], chunk.size(),
259 base::TimeDelta::FromMicroseconds(10000000), 259 base::TimeDelta::FromMicroseconds(10000000),
260 base::TimeDelta::FromMicroseconds(9900000)); 260 base::TimeDelta::FromMicroseconds(9900000));
261 261
262 // Simulate a seek to 5 seconds. 262 // Simulate a seek to 5 seconds.
263 media_codec->Reset(); 263 media_codec->Reset();
264 DecodeMediaFrame(media_codec.get(), &chunk[0], chunk.size(), 264 DecodeMediaFrame(media_codec.get(), &chunk[0], chunk.size(),
265 base::TimeDelta::FromMicroseconds(5000000), 265 base::TimeDelta::FromMicroseconds(5000000),
266 base::TimeDelta::FromMicroseconds(4900000)); 266 base::TimeDelta::FromMicroseconds(4900000));
267 } 267 }
268 268
269 TEST(MediaCodecBridgeTest, CreateUnsupportedCodec) { 269 TEST(MediaCodecBridgeTest, CreateUnsupportedCodec) {
270 EXPECT_EQ(NULL, AudioCodecBridge::Create(kUnknownAudioCodec)); 270 EXPECT_EQ(NULL, AudioCodecBridge::Create(kUnknownAudioCodec));
271 EXPECT_EQ(NULL, VideoCodecBridge::Create(kUnknownVideoCodec, false)); 271 EXPECT_EQ(NULL, VideoCodecBridge::Create(kUnknownVideoCodec, false, false));
272 } 272 }
273 273
274 } // namespace media 274 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698