Index: media/filters/ffmpeg_video_decoder_unittest.cc |
diff --git a/media/filters/ffmpeg_video_decoder_unittest.cc b/media/filters/ffmpeg_video_decoder_unittest.cc |
index 3c0af396c95a12130c23930937a09242f5f57f6b..1e5f4683ec9ecb60a361639b3853e385e99f6256 100644 |
--- a/media/filters/ffmpeg_video_decoder_unittest.cc |
+++ b/media/filters/ffmpeg_video_decoder_unittest.cc |
@@ -18,6 +18,7 @@ |
#include "media/base/test_data_util.h" |
#include "media/base/video_decoder.h" |
#include "media/base/video_frame.h" |
+#include "media/base/video_util.h" |
#include "media/ffmpeg/ffmpeg_common.h" |
#include "media/filters/ffmpeg_decoder_unittest.h" |
#include "media/filters/ffmpeg_glue.h" |
@@ -36,7 +37,7 @@ namespace media { |
static const VideoFrame::Format kVideoFormat = VideoFrame::YV12; |
static const gfx::Size kCodedSize(320, 240); |
static const gfx::Rect kVisibleRect(320, 240); |
-static const AVRational kAspectRatio = { 1, 1 }; |
+static const gfx::Size kNaturalSize(320, 240); |
static const uint8 kFakeKeyId[] = { 0x4b, 0x65, 0x79, 0x20, 0x49, 0x44 }; |
static const uint8 kFakeIv[DecryptConfig::kDecryptionKeySize] = { 0 }; |
static const uint8 kFakeCheckSum[] = { 0, 0 }; |
@@ -87,8 +88,7 @@ class FFmpegVideoDecoderTest : public testing::Test { |
encrypted_i_frame_buffer_ = CreateFakeEncryptedBuffer(); |
config_.Initialize(kCodecVP8, VIDEO_CODEC_PROFILE_UNKNOWN, |
- kVideoFormat, kCodedSize, kVisibleRect, |
- kAspectRatio.num, kAspectRatio.den, |
+ kVideoFormat, kCodedSize, kVisibleRect, kNaturalSize, |
NULL, 0, true); |
} |
@@ -246,8 +246,7 @@ TEST_F(FFmpegVideoDecoderTest, Initialize_UnsupportedDecoder) { |
// Test avcodec_find_decoder() returning NULL. |
VideoDecoderConfig config(kUnknownVideoCodec, VIDEO_CODEC_PROFILE_UNKNOWN, |
kVideoFormat, |
- kCodedSize, kVisibleRect, |
- kAspectRatio.num, kAspectRatio.den, |
+ kCodedSize, kVisibleRect, kNaturalSize, |
NULL, 0); |
InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE); |
} |
@@ -256,8 +255,7 @@ TEST_F(FFmpegVideoDecoderTest, Initialize_UnsupportedPixelFormat) { |
// Ensure decoder handles unsupport pixel formats without crashing. |
VideoDecoderConfig config(kCodecVP8, VIDEO_CODEC_PROFILE_UNKNOWN, |
VideoFrame::INVALID, |
- kCodedSize, kVisibleRect, |
- kAspectRatio.num, kAspectRatio.den, |
+ kCodedSize, kVisibleRect, kNaturalSize, |
NULL, 0); |
InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE); |
} |
@@ -266,8 +264,64 @@ TEST_F(FFmpegVideoDecoderTest, Initialize_OpenDecoderFails) { |
// Specify Theora w/o extra data so that avcodec_open2() fails. |
VideoDecoderConfig config(kCodecTheora, VIDEO_CODEC_PROFILE_UNKNOWN, |
kVideoFormat, |
- kCodedSize, kVisibleRect, |
- kAspectRatio.num, kAspectRatio.den, |
+ kCodedSize, kVisibleRect, kNaturalSize, |
+ NULL, 0); |
+ InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE); |
+} |
+ |
+TEST_F(FFmpegVideoDecoderTest, Initialize_AspectRatioNumeratorZero) { |
+ gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), 0, 1); |
+ VideoDecoderConfig config(kCodecVP8, VP8PROFILE_MAIN, |
+ kVideoFormat, |
+ kCodedSize, kVisibleRect, natural_size, |
+ NULL, 0); |
+ InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE); |
+} |
+ |
+TEST_F(FFmpegVideoDecoderTest, Initialize_AspectRatioDenominatorZero) { |
+ gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), 1, 0); |
+ VideoDecoderConfig config(kCodecVP8, VP8PROFILE_MAIN, |
+ kVideoFormat, |
+ kCodedSize, kVisibleRect, natural_size, |
+ NULL, 0); |
+ InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE); |
+} |
+ |
+TEST_F(FFmpegVideoDecoderTest, Initialize_AspectRatioNumeratorNegative) { |
+ gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), -1, 1); |
+ VideoDecoderConfig config(kCodecVP8, VP8PROFILE_MAIN, |
+ kVideoFormat, |
+ kCodedSize, kVisibleRect, natural_size, |
+ NULL, 0); |
+ InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE); |
+} |
+ |
+TEST_F(FFmpegVideoDecoderTest, Initialize_AspectRatioDenominatorNegative) { |
+ gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), 1, -1); |
+ VideoDecoderConfig config(kCodecVP8, VP8PROFILE_MAIN, |
+ kVideoFormat, |
+ kCodedSize, kVisibleRect, natural_size, |
+ NULL, 0); |
+ InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE); |
+} |
+ |
+TEST_F(FFmpegVideoDecoderTest, Initialize_AspectRatioNumeratorTooLarge) { |
+ int width = kVisibleRect.size().width(); |
+ int num = ceil(static_cast<double>(limits::kMaxDimension + 1) / width); |
+ gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), num, 1); |
+ VideoDecoderConfig config(kCodecVP8, VP8PROFILE_MAIN, |
+ kVideoFormat, |
+ kCodedSize, kVisibleRect, natural_size, |
+ NULL, 0); |
+ InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE); |
+} |
+ |
+TEST_F(FFmpegVideoDecoderTest, Initialize_AspectRatioDenominatorTooLarge) { |
+ int den = kVisibleRect.size().width() + 1; |
+ gfx::Size natural_size = GetNaturalSize(kVisibleRect.size(), 1, den); |
+ VideoDecoderConfig config(kCodecVP8, VP8PROFILE_MAIN, |
+ kVideoFormat, |
+ kCodedSize, kVisibleRect, natural_size, |
NULL, 0); |
InitializeWithConfigAndStatus(config, PIPELINE_ERROR_DECODE); |
} |