OLD | NEW |
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 "media/mojo/common/media_type_converters.h" | 5 #include "media/mojo/common/media_type_converters.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 #include <string.h> | 9 #include <string.h> |
10 | 10 |
11 #include "base/macros.h" | 11 #include "base/macros.h" |
12 #include "media/base/audio_buffer.h" | 12 #include "media/base/audio_buffer.h" |
13 #include "media/base/audio_decoder_config.h" | 13 #include "media/base/audio_decoder_config.h" |
14 #include "media/base/cdm_config.h" | 14 #include "media/base/cdm_config.h" |
15 #include "media/base/decoder_buffer.h" | 15 #include "media/base/decoder_buffer.h" |
16 #include "media/base/encryption_scheme.h" | |
17 #include "media/base/media_util.h" | 16 #include "media/base/media_util.h" |
18 #include "media/base/sample_format.h" | 17 #include "media/base/sample_format.h" |
19 #include "media/base/test_helpers.h" | 18 #include "media/base/test_helpers.h" |
20 #include "media/base/video_frame.h" | 19 #include "media/base/video_frame.h" |
21 #include "media/mojo/common/mojo_shared_buffer_video_frame.h" | 20 #include "media/mojo/common/mojo_shared_buffer_video_frame.h" |
22 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
23 | 22 |
24 namespace media { | 23 namespace media { |
25 | 24 |
26 namespace { | 25 namespace { |
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 | 280 |
282 // TODO(tim): Check other properties. | 281 // TODO(tim): Check other properties. |
283 | 282 |
284 TEST(MediaTypeConvertersTest, ConvertAudioDecoderConfig_Normal) { | 283 TEST(MediaTypeConvertersTest, ConvertAudioDecoderConfig_Normal) { |
285 const uint8_t kExtraData[] = "config extra data"; | 284 const uint8_t kExtraData[] = "config extra data"; |
286 const std::vector<uint8_t> kExtraDataVector( | 285 const std::vector<uint8_t> kExtraDataVector( |
287 &kExtraData[0], &kExtraData[0] + arraysize(kExtraData)); | 286 &kExtraData[0], &kExtraData[0] + arraysize(kExtraData)); |
288 | 287 |
289 AudioDecoderConfig config; | 288 AudioDecoderConfig config; |
290 config.Initialize(kCodecAAC, kSampleFormatU8, CHANNEL_LAYOUT_SURROUND, 48000, | 289 config.Initialize(kCodecAAC, kSampleFormatU8, CHANNEL_LAYOUT_SURROUND, 48000, |
291 kExtraDataVector, Unencrypted(), base::TimeDelta(), 0); | 290 kExtraDataVector, false, base::TimeDelta(), 0); |
292 interfaces::AudioDecoderConfigPtr ptr( | 291 interfaces::AudioDecoderConfigPtr ptr( |
293 interfaces::AudioDecoderConfig::From(config)); | 292 interfaces::AudioDecoderConfig::From(config)); |
294 EXPECT_FALSE(ptr->extra_data.is_null()); | 293 EXPECT_FALSE(ptr->extra_data.is_null()); |
295 AudioDecoderConfig result(ptr.To<AudioDecoderConfig>()); | 294 AudioDecoderConfig result(ptr.To<AudioDecoderConfig>()); |
296 EXPECT_TRUE(result.Matches(config)); | 295 EXPECT_TRUE(result.Matches(config)); |
297 } | 296 } |
298 | 297 |
299 TEST(MediaTypeConvertersTest, ConvertAudioDecoderConfig_EmptyExtraData) { | 298 TEST(MediaTypeConvertersTest, ConvertAudioDecoderConfig_EmptyExtraData) { |
300 AudioDecoderConfig config; | 299 AudioDecoderConfig config; |
301 config.Initialize(kCodecAAC, kSampleFormatU8, CHANNEL_LAYOUT_SURROUND, 48000, | 300 config.Initialize(kCodecAAC, kSampleFormatU8, CHANNEL_LAYOUT_SURROUND, 48000, |
302 EmptyExtraData(), Unencrypted(), base::TimeDelta(), 0); | 301 EmptyExtraData(), false, base::TimeDelta(), 0); |
303 interfaces::AudioDecoderConfigPtr ptr( | 302 interfaces::AudioDecoderConfigPtr ptr( |
304 interfaces::AudioDecoderConfig::From(config)); | 303 interfaces::AudioDecoderConfig::From(config)); |
305 EXPECT_TRUE(ptr->extra_data.is_null()); | 304 EXPECT_TRUE(ptr->extra_data.is_null()); |
306 AudioDecoderConfig result(ptr.To<AudioDecoderConfig>()); | 305 AudioDecoderConfig result(ptr.To<AudioDecoderConfig>()); |
307 EXPECT_TRUE(result.Matches(config)); | 306 EXPECT_TRUE(result.Matches(config)); |
308 } | 307 } |
309 | 308 |
310 TEST(MediaTypeConvertersTest, ConvertAudioDecoderConfig_Encrypted) { | 309 TEST(MediaTypeConvertersTest, ConvertAudioDecoderConfig_Encrypted) { |
311 AudioDecoderConfig config; | 310 AudioDecoderConfig config; |
312 config.Initialize(kCodecAAC, kSampleFormatU8, CHANNEL_LAYOUT_SURROUND, 48000, | 311 config.Initialize(kCodecAAC, kSampleFormatU8, CHANNEL_LAYOUT_SURROUND, 48000, |
313 EmptyExtraData(), AesCtrEncryptionScheme(), | 312 EmptyExtraData(), |
| 313 true, // Is encrypted. |
314 base::TimeDelta(), 0); | 314 base::TimeDelta(), 0); |
315 interfaces::AudioDecoderConfigPtr ptr( | 315 interfaces::AudioDecoderConfigPtr ptr( |
316 interfaces::AudioDecoderConfig::From(config)); | 316 interfaces::AudioDecoderConfig::From(config)); |
| 317 EXPECT_TRUE(ptr->is_encrypted); |
317 AudioDecoderConfig result(ptr.To<AudioDecoderConfig>()); | 318 AudioDecoderConfig result(ptr.To<AudioDecoderConfig>()); |
| 319 EXPECT_TRUE(result.is_encrypted()); |
318 EXPECT_TRUE(result.Matches(config)); | 320 EXPECT_TRUE(result.Matches(config)); |
319 } | 321 } |
320 | 322 |
321 TEST(MediaTypeConvertersTest, ConvertVideoDecoderConfig_Normal) { | 323 TEST(MediaTypeConvertersTest, ConvertVideoDecoderConfig_Normal) { |
322 const uint8_t kExtraData[] = "config extra data"; | 324 const uint8_t kExtraData[] = "config extra data"; |
323 const std::vector<uint8_t> kExtraDataVector( | 325 const std::vector<uint8_t> kExtraDataVector( |
324 &kExtraData[0], &kExtraData[0] + arraysize(kExtraData)); | 326 &kExtraData[0], &kExtraData[0] + arraysize(kExtraData)); |
325 | 327 |
326 VideoDecoderConfig config(kCodecVP8, VP8PROFILE_ANY, PIXEL_FORMAT_YV12, | 328 VideoDecoderConfig config(kCodecVP8, VP8PROFILE_ANY, PIXEL_FORMAT_YV12, |
327 COLOR_SPACE_UNSPECIFIED, kCodedSize, kVisibleRect, | 329 COLOR_SPACE_UNSPECIFIED, kCodedSize, kVisibleRect, |
328 kNaturalSize, kExtraDataVector, Unencrypted()); | 330 kNaturalSize, kExtraDataVector, false); |
329 interfaces::VideoDecoderConfigPtr ptr( | 331 interfaces::VideoDecoderConfigPtr ptr( |
330 interfaces::VideoDecoderConfig::From(config)); | 332 interfaces::VideoDecoderConfig::From(config)); |
331 EXPECT_FALSE(ptr->extra_data.is_null()); | 333 EXPECT_FALSE(ptr->extra_data.is_null()); |
332 VideoDecoderConfig result(ptr.To<VideoDecoderConfig>()); | 334 VideoDecoderConfig result(ptr.To<VideoDecoderConfig>()); |
333 EXPECT_TRUE(result.Matches(config)); | 335 EXPECT_TRUE(result.Matches(config)); |
334 } | 336 } |
335 | 337 |
336 TEST(MediaTypeConvertersTest, ConvertVideoDecoderConfig_EmptyExtraData) { | 338 TEST(MediaTypeConvertersTest, ConvertVideoDecoderConfig_EmptyExtraData) { |
337 VideoDecoderConfig config(kCodecVP8, VP8PROFILE_ANY, PIXEL_FORMAT_YV12, | 339 VideoDecoderConfig config(kCodecVP8, VP8PROFILE_ANY, PIXEL_FORMAT_YV12, |
338 COLOR_SPACE_UNSPECIFIED, kCodedSize, kVisibleRect, | 340 COLOR_SPACE_UNSPECIFIED, kCodedSize, kVisibleRect, |
339 kNaturalSize, EmptyExtraData(), Unencrypted()); | 341 kNaturalSize, EmptyExtraData(), false); |
340 interfaces::VideoDecoderConfigPtr ptr( | 342 interfaces::VideoDecoderConfigPtr ptr( |
341 interfaces::VideoDecoderConfig::From(config)); | 343 interfaces::VideoDecoderConfig::From(config)); |
342 EXPECT_TRUE(ptr->extra_data.is_null()); | 344 EXPECT_TRUE(ptr->extra_data.is_null()); |
343 VideoDecoderConfig result(ptr.To<VideoDecoderConfig>()); | 345 VideoDecoderConfig result(ptr.To<VideoDecoderConfig>()); |
344 EXPECT_TRUE(result.Matches(config)); | 346 EXPECT_TRUE(result.Matches(config)); |
345 } | 347 } |
346 | 348 |
347 TEST(MediaTypeConvertersTest, ConvertVideoDecoderConfig_Encrypted) { | 349 TEST(MediaTypeConvertersTest, ConvertVideoDecoderConfig_Encrypted) { |
348 VideoDecoderConfig config(kCodecVP8, VP8PROFILE_ANY, PIXEL_FORMAT_YV12, | 350 VideoDecoderConfig config(kCodecVP8, VP8PROFILE_ANY, PIXEL_FORMAT_YV12, |
349 COLOR_SPACE_UNSPECIFIED, kCodedSize, kVisibleRect, | 351 COLOR_SPACE_UNSPECIFIED, kCodedSize, kVisibleRect, |
350 kNaturalSize, EmptyExtraData(), | 352 kNaturalSize, EmptyExtraData(), |
351 AesCtrEncryptionScheme()); | 353 true /* is_encrypted */); |
352 interfaces::VideoDecoderConfigPtr ptr( | 354 interfaces::VideoDecoderConfigPtr ptr( |
353 interfaces::VideoDecoderConfig::From(config)); | 355 interfaces::VideoDecoderConfig::From(config)); |
| 356 EXPECT_TRUE(ptr->is_encrypted); |
354 VideoDecoderConfig result(ptr.To<VideoDecoderConfig>()); | 357 VideoDecoderConfig result(ptr.To<VideoDecoderConfig>()); |
| 358 EXPECT_TRUE(result.is_encrypted()); |
355 EXPECT_TRUE(result.Matches(config)); | 359 EXPECT_TRUE(result.Matches(config)); |
356 } | 360 } |
357 | 361 |
358 TEST(MediaTypeConvertersTest, ConvertCdmConfig) { | 362 TEST(MediaTypeConvertersTest, ConvertCdmConfig) { |
359 CdmConfig config; | 363 CdmConfig config; |
360 config.allow_distinctive_identifier = true; | 364 config.allow_distinctive_identifier = true; |
361 config.allow_persistent_state = false; | 365 config.allow_persistent_state = false; |
362 config.use_hw_secure_codecs = true; | 366 config.use_hw_secure_codecs = true; |
363 | 367 |
364 interfaces::CdmConfigPtr ptr(interfaces::CdmConfig::From(config)); | 368 interfaces::CdmConfigPtr ptr(interfaces::CdmConfig::From(config)); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 | 451 |
448 // Convert to and back. | 452 // Convert to and back. |
449 interfaces::VideoFramePtr ptr(interfaces::VideoFrame::From(frame)); | 453 interfaces::VideoFramePtr ptr(interfaces::VideoFrame::From(frame)); |
450 scoped_refptr<VideoFrame> result(ptr.To<scoped_refptr<VideoFrame>>()); | 454 scoped_refptr<VideoFrame> result(ptr.To<scoped_refptr<VideoFrame>>()); |
451 EXPECT_NE(result.get(), nullptr); | 455 EXPECT_NE(result.get(), nullptr); |
452 | 456 |
453 // Compare. | 457 // Compare. |
454 CompareVideoFrames(frame, result); | 458 CompareVideoFrames(frame, result); |
455 } | 459 } |
456 | 460 |
457 TEST(MediaTypeConvertersTest, ConvertEncryptionSchemeAesCbcWithPattern) { | |
458 // Original. | |
459 EncryptionScheme scheme(EncryptionScheme::CIPHER_MODE_AES_CBC, | |
460 EncryptionScheme::Pattern(1, 9)); | |
461 | |
462 // Convert to and back. | |
463 interfaces::EncryptionSchemePtr ptr( | |
464 interfaces::EncryptionScheme::From(scheme)); | |
465 EncryptionScheme result(ptr.To<EncryptionScheme>()); | |
466 | |
467 EXPECT_TRUE(result.Matches(scheme)); | |
468 | |
469 // Verify a couple of negative cases. | |
470 EXPECT_FALSE(result.Matches(Unencrypted())); | |
471 EXPECT_FALSE(result.Matches(AesCtrEncryptionScheme())); | |
472 } | |
473 | |
474 } // namespace media | 461 } // namespace media |
OLD | NEW |