OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
6 #include "base/message_loop.h" | 6 #include "base/message_loop.h" |
7 #include "media/base/data_buffer.h" | 7 #include "media/base/data_buffer.h" |
8 #include "media/base/pipeline.h" | 8 #include "media/base/pipeline.h" |
9 #include "media/base/test_data_util.h" | 9 #include "media/base/test_data_util.h" |
10 #include "media/filters/ffmpeg_glue.h" | 10 #include "media/filters/ffmpeg_glue.h" |
11 #include "media/video/ffmpeg_video_decode_engine.h" | 11 #include "media/video/ffmpeg_video_decode_engine.h" |
12 #include "testing/gmock/include/gmock/gmock.h" | 12 #include "testing/gmock/include/gmock/gmock.h" |
13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
14 | 14 |
15 using ::testing::_; | 15 using ::testing::_; |
16 using ::testing::DoAll; | 16 using ::testing::DoAll; |
17 using ::testing::Return; | 17 using ::testing::Return; |
18 using ::testing::ReturnNull; | 18 using ::testing::ReturnNull; |
19 using ::testing::SaveArg; | 19 using ::testing::SaveArg; |
20 using ::testing::SetArgumentPointee; | 20 using ::testing::SetArgumentPointee; |
21 using ::testing::StrictMock; | 21 using ::testing::StrictMock; |
22 | 22 |
23 namespace media { | 23 namespace media { |
24 | 24 |
25 static const VideoFrame::Format kVideoFormat = VideoFrame::YV12; | 25 static const VideoFrame::Format kVideoFormat = VideoFrame::YV12; |
26 static const gfx::Size kCodedSize(320, 240); | 26 static const gfx::Size kCodedSize(320, 240); |
27 static const gfx::Rect kVisibleRect(320, 240); | 27 static const gfx::Rect kVisibleRect(320, 240); |
28 static const gfx::Size kNaturalSize(522, 288); | 28 static const gfx::Size kNaturalSize(522, 288); |
29 static const AVRational kFrameRate = { 100, 1 }; | 29 static const AVRational kFrameRate = { 100, 1 }; |
| 30 static const AVRational kAspectRatio = { 1, 1 }; |
30 | 31 |
31 ACTION_P2(DemuxComplete, engine, buffer) { | 32 ACTION_P2(DemuxComplete, engine, buffer) { |
32 engine->ConsumeVideoSample(buffer); | 33 engine->ConsumeVideoSample(buffer); |
33 } | 34 } |
34 | 35 |
35 class FFmpegVideoDecodeEngineTest | 36 class FFmpegVideoDecodeEngineTest |
36 : public testing::Test, | 37 : public testing::Test, |
37 public VideoDecodeEngine::EventHandler { | 38 public VideoDecodeEngine::EventHandler { |
38 public: | 39 public: |
39 FFmpegVideoDecodeEngineTest() | 40 FFmpegVideoDecodeEngineTest() |
40 : config_(kCodecVP8, kVideoFormat, kCodedSize, kVisibleRect, | 41 : config_(kCodecVP8, kVideoFormat, kCodedSize, kVisibleRect, |
41 kFrameRate.num, kFrameRate.den, NULL, 0) { | 42 kFrameRate.num, kFrameRate.den, |
| 43 kAspectRatio.num, kAspectRatio.den, |
| 44 NULL, 0) { |
42 CHECK(FFmpegGlue::GetInstance()); | 45 CHECK(FFmpegGlue::GetInstance()); |
43 | 46 |
44 // Setup FFmpeg structures. | 47 // Setup FFmpeg structures. |
45 frame_buffer_.reset(new uint8[kCodedSize.GetArea()]); | 48 frame_buffer_.reset(new uint8[kCodedSize.GetArea()]); |
46 | 49 |
47 test_engine_.reset(new FFmpegVideoDecodeEngine()); | 50 test_engine_.reset(new FFmpegVideoDecodeEngine()); |
48 | 51 |
49 ReadTestDataFile("vp8-I-frame-320x240", &i_frame_buffer_); | 52 ReadTestDataFile("vp8-I-frame-320x240", &i_frame_buffer_); |
50 ReadTestDataFile("vp8-corrupt-I-frame", &corrupt_i_frame_buffer_); | 53 ReadTestDataFile("vp8-corrupt-I-frame", &corrupt_i_frame_buffer_); |
51 | 54 |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 }; | 142 }; |
140 | 143 |
141 TEST_F(FFmpegVideoDecodeEngineTest, Initialize_Normal) { | 144 TEST_F(FFmpegVideoDecodeEngineTest, Initialize_Normal) { |
142 Initialize(); | 145 Initialize(); |
143 } | 146 } |
144 | 147 |
145 TEST_F(FFmpegVideoDecodeEngineTest, Initialize_FindDecoderFails) { | 148 TEST_F(FFmpegVideoDecodeEngineTest, Initialize_FindDecoderFails) { |
146 VideoDecoderConfig config(kUnknownVideoCodec, kVideoFormat, | 149 VideoDecoderConfig config(kUnknownVideoCodec, kVideoFormat, |
147 kCodedSize, kVisibleRect, | 150 kCodedSize, kVisibleRect, |
148 kFrameRate.num, kFrameRate.den, | 151 kFrameRate.num, kFrameRate.den, |
| 152 kAspectRatio.num, kAspectRatio.den, |
149 NULL, 0); | 153 NULL, 0); |
150 | 154 |
151 // Test avcodec_find_decoder() returning NULL. | 155 // Test avcodec_find_decoder() returning NULL. |
152 EXPECT_CALL(*this, OnInitializeComplete(false)); | 156 EXPECT_CALL(*this, OnInitializeComplete(false)); |
153 test_engine_->Initialize(MessageLoop::current(), this, NULL, config); | 157 test_engine_->Initialize(MessageLoop::current(), this, NULL, config); |
154 } | 158 } |
155 | 159 |
156 TEST_F(FFmpegVideoDecodeEngineTest, Initialize_OpenDecoderFails) { | 160 TEST_F(FFmpegVideoDecodeEngineTest, Initialize_OpenDecoderFails) { |
157 // Specify Theora w/o extra data so that avcodec_open() fails. | 161 // Specify Theora w/o extra data so that avcodec_open() fails. |
158 VideoDecoderConfig config(kCodecTheora, kVideoFormat, | 162 VideoDecoderConfig config(kCodecTheora, kVideoFormat, |
159 kCodedSize, kVisibleRect, | 163 kCodedSize, kVisibleRect, |
160 kFrameRate.num, kFrameRate.den, | 164 kFrameRate.num, kFrameRate.den, |
| 165 kAspectRatio.num, kAspectRatio.den, |
161 NULL, 0); | 166 NULL, 0); |
162 EXPECT_CALL(*this, OnInitializeComplete(false)); | 167 EXPECT_CALL(*this, OnInitializeComplete(false)); |
163 test_engine_->Initialize(MessageLoop::current(), this, NULL, config); | 168 test_engine_->Initialize(MessageLoop::current(), this, NULL, config); |
164 } | 169 } |
165 | 170 |
166 TEST_F(FFmpegVideoDecodeEngineTest, DecodeFrame_Normal) { | 171 TEST_F(FFmpegVideoDecodeEngineTest, DecodeFrame_Normal) { |
167 Initialize(); | 172 Initialize(); |
168 | 173 |
169 // Simulate decoding a single frame. | 174 // Simulate decoding a single frame. |
170 scoped_refptr<VideoFrame> video_frame; | 175 scoped_refptr<VideoFrame> video_frame; |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 // DecodeIFrameThenTestFile("vp8-I-frame-320x480"); | 266 // DecodeIFrameThenTestFile("vp8-I-frame-320x480"); |
262 //} | 267 //} |
263 | 268 |
264 // Decode |i_frame_buffer_| and then a frame with a smaller height and verify | 269 // Decode |i_frame_buffer_| and then a frame with a smaller height and verify |
265 // the output size didn't change. | 270 // the output size didn't change. |
266 TEST_F(FFmpegVideoDecodeEngineTest, DecodeFrame_SmallerHeight) { | 271 TEST_F(FFmpegVideoDecodeEngineTest, DecodeFrame_SmallerHeight) { |
267 DecodeIFrameThenTestFile("vp8-I-frame-320x120"); | 272 DecodeIFrameThenTestFile("vp8-I-frame-320x120"); |
268 } | 273 } |
269 | 274 |
270 } // namespace media | 275 } // namespace media |
OLD | NEW |