1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "media/base/limits.h"
6 #include "media/base/media_util.h"
7 #include "media/base/video_decoder_config.h"
8 #include "media/base/video_util.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace media {
12
13 static const gfx::Size kCodedSize(320, 240);
14 static const gfx::Rect kVisibleRect(320, 240);
15 static const gfx::Size kNaturalSize(320, 240);
16
TEST(VideoDecoderConfigTest,AlphaModeSetCorrectly)17 TEST(VideoDecoderConfigTest, AlphaModeSetCorrectly) {
18 VideoDecoderConfig config(kCodecVP8, VIDEO_CODEC_PROFILE_UNKNOWN,
19 VideoDecoderConfig::AlphaMode::kIsOpaque,
20 VideoColorSpace(), kNoTransformation, kCodedSize,
21 kVisibleRect, kNaturalSize, EmptyExtraData(),
22 EncryptionScheme::kUnencrypted);
23 EXPECT_TRUE(config.IsValidConfig());
24 EXPECT_EQ(config.alpha_mode(), VideoDecoderConfig::AlphaMode::kIsOpaque);
25
26 config.Initialize(kCodecVP8, VIDEO_CODEC_PROFILE_UNKNOWN,
27 VideoDecoderConfig::AlphaMode::kHasAlpha, VideoColorSpace(),
28 kNoTransformation, kCodedSize, kVisibleRect, kNaturalSize,
29 EmptyExtraData(), EncryptionScheme::kUnencrypted);
30 EXPECT_EQ(config.alpha_mode(), VideoDecoderConfig::AlphaMode::kHasAlpha);
31 }
32
TEST(VideoDecoderConfigTest,Invalid_AspectRatioNumeratorZero)33 TEST(VideoDecoderConfigTest, Invalid_AspectRatioNumeratorZero) {
34 gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), 0, 1);
35 VideoDecoderConfig config(
36 kCodecVP8, VP8PROFILE_ANY, VideoDecoderConfig::AlphaMode::kIsOpaque,
37 VideoColorSpace(), kNoTransformation, kCodedSize, kVisibleRect,
38 natural_size, EmptyExtraData(), EncryptionScheme::kUnencrypted);
39 EXPECT_FALSE(config.IsValidConfig());
40 }
41
TEST(VideoDecoderConfigTest,Invalid_AspectRatioDenominatorZero)42 TEST(VideoDecoderConfigTest, Invalid_AspectRatioDenominatorZero) {
43 gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), 1, 0);
44 VideoDecoderConfig config(
45 kCodecVP8, VP8PROFILE_ANY, VideoDecoderConfig::AlphaMode::kIsOpaque,
46 VideoColorSpace(), kNoTransformation, kCodedSize, kVisibleRect,
47 natural_size, EmptyExtraData(), EncryptionScheme::kUnencrypted);
48 EXPECT_FALSE(config.IsValidConfig());
49 }
50
TEST(VideoDecoderConfigTest,Invalid_AspectRatioNumeratorNegative)51 TEST(VideoDecoderConfigTest, Invalid_AspectRatioNumeratorNegative) {
52 gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), -1, 1);
53 VideoDecoderConfig config(
54 kCodecVP8, VP8PROFILE_ANY, VideoDecoderConfig::AlphaMode::kIsOpaque,
55 VideoColorSpace(), kNoTransformation, kCodedSize, kVisibleRect,
56 natural_size, EmptyExtraData(), EncryptionScheme::kUnencrypted);
57 EXPECT_FALSE(config.IsValidConfig());
58 }
59
TEST(VideoDecoderConfigTest,Invalid_AspectRatioDenominatorNegative)60 TEST(VideoDecoderConfigTest, Invalid_AspectRatioDenominatorNegative) {
61 gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), 1, -1);
62 VideoDecoderConfig config(
63 kCodecVP8, VP8PROFILE_ANY, VideoDecoderConfig::AlphaMode::kIsOpaque,
64 VideoColorSpace(), kNoTransformation, kCodedSize, kVisibleRect,
65 natural_size, EmptyExtraData(), EncryptionScheme::kUnencrypted);
66 EXPECT_FALSE(config.IsValidConfig());
67 }
68
TEST(VideoDecoderConfigTest,Invalid_AspectRatioNumeratorTooLarge)69 TEST(VideoDecoderConfigTest, Invalid_AspectRatioNumeratorTooLarge) {
70 int width = kVisibleRect.size().width();
71 int num = ceil(static_cast<double>(limits::kMaxDimension + 1) / width);
72 gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), num, 1);
73 VideoDecoderConfig config(
74 kCodecVP8, VP8PROFILE_ANY, VideoDecoderConfig::AlphaMode::kIsOpaque,
75 VideoColorSpace(), kNoTransformation, kCodedSize, kVisibleRect,
76 natural_size, EmptyExtraData(), EncryptionScheme::kUnencrypted);
77 EXPECT_FALSE(config.IsValidConfig());
78 }
79
TEST(VideoDecoderConfigTest,Invalid_AspectRatioDenominatorVeryLarge)80 TEST(VideoDecoderConfigTest, Invalid_AspectRatioDenominatorVeryLarge) {
81 // This test makes sure that highly skewed pixel ratios arent counted as valid
82 // configurations.
83 int den = 2 * kVisibleRect.size().width() + 1;
84 gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), 1, den);
85 EXPECT_EQ(320, natural_size.width());
86 EXPECT_EQ(240 * 641, natural_size.height());
87 VideoDecoderConfig config(
88 kCodecVP8, VP8PROFILE_ANY, VideoDecoderConfig::AlphaMode::kIsOpaque,
89 VideoColorSpace(), kNoTransformation, kCodedSize, kVisibleRect,
90 natural_size, EmptyExtraData(), EncryptionScheme::kUnencrypted);
91 EXPECT_FALSE(config.IsValidConfig());
92 }
93
94 } // namespace media
95