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