| Index: media/filters/ffmpeg_video_decode_engine_unittest.cc
|
| diff --git a/media/filters/ffmpeg_video_decode_engine_unittest.cc b/media/filters/ffmpeg_video_decode_engine_unittest.cc
|
| index 75e0c299093ce43449287a11d2e5f6bf39d3f3c8..533edd088e21ce9af5035c03d27cb167f92ba0ad 100644
|
| --- a/media/filters/ffmpeg_video_decode_engine_unittest.cc
|
| +++ b/media/filters/ffmpeg_video_decode_engine_unittest.cc
|
| @@ -20,12 +20,23 @@ using ::testing::StrictMock;
|
|
|
| namespace media {
|
|
|
| +static const int kWidth = 320;
|
| +static const int kHeight = 240;
|
| +
|
| class FFmpegVideoDecodeEngineTest : public testing::Test {
|
| protected:
|
| FFmpegVideoDecodeEngineTest() {
|
| // Setup FFmpeg structures.
|
| + frame_buffer_.reset(new uint8[kWidth * kHeight]);
|
| memset(&yuv_frame_, 0, sizeof(yuv_frame_));
|
| + // DecodeFrame will check these pointers as non-NULL value.
|
| + yuv_frame_.data[0] = yuv_frame_.data[1] = yuv_frame_.data[2]
|
| + = frame_buffer_.get();
|
| + yuv_frame_.linesize[0] = kWidth;
|
| + yuv_frame_.linesize[1] = yuv_frame_.linesize[2] = kWidth >> 1;
|
| memset(&codec_context_, 0, sizeof(codec_context_));
|
| + codec_context_.width = kWidth;
|
| + codec_context_.height = kHeight;
|
| memset(&codec_, 0, sizeof(codec_));
|
| memset(&stream_, 0, sizeof(stream_));
|
| stream_.codec = &codec_context_;
|
| @@ -40,11 +51,30 @@ class FFmpegVideoDecodeEngineTest : public testing::Test {
|
| }
|
|
|
| ~FFmpegVideoDecodeEngineTest() {
|
| + test_engine_.reset(NULL);
|
| MockFFmpeg::set(NULL);
|
| }
|
|
|
| - scoped_ptr<FFmpegVideoDecodeEngine> test_engine_;
|
| + void Initialize() {
|
| + EXPECT_CALL(*MockFFmpeg::get(), AVCodecFindDecoder(CODEC_ID_NONE))
|
| + .WillOnce(Return(&codec_));
|
| + EXPECT_CALL(*MockFFmpeg::get(), AVCodecAllocFrame())
|
| + .WillOnce(Return(&yuv_frame_));
|
| + EXPECT_CALL(*MockFFmpeg::get(), AVCodecThreadInit(&codec_context_, 2))
|
| + .WillOnce(Return(0));
|
| + EXPECT_CALL(*MockFFmpeg::get(), AVCodecOpen(&codec_context_, &codec_))
|
| + .WillOnce(Return(0));
|
| + EXPECT_CALL(*MockFFmpeg::get(), AVFree(&yuv_frame_))
|
| + .Times(1);
|
| +
|
| + TaskMocker done_cb;
|
| + EXPECT_CALL(done_cb, Run());
|
| + test_engine_->Initialize(&stream_, done_cb.CreateTask());
|
| + EXPECT_EQ(VideoDecodeEngine::kNormal, test_engine_->state());
|
| + }
|
|
|
| + scoped_ptr<FFmpegVideoDecodeEngine> test_engine_;
|
| + scoped_array<uint8_t> frame_buffer_;
|
| StrictMock<MockFFmpeg> mock_ffmpeg_;
|
|
|
| AVFrame yuv_frame_;
|
| @@ -61,25 +91,17 @@ TEST_F(FFmpegVideoDecodeEngineTest, Construction) {
|
| }
|
|
|
| TEST_F(FFmpegVideoDecodeEngineTest, Initialize_Normal) {
|
| - // Test avcodec_open() failing.
|
| - EXPECT_CALL(*MockFFmpeg::get(), AVCodecFindDecoder(CODEC_ID_NONE))
|
| - .WillOnce(Return(&codec_));
|
| - EXPECT_CALL(*MockFFmpeg::get(), AVCodecThreadInit(&codec_context_, 2))
|
| - .WillOnce(Return(0));
|
| - EXPECT_CALL(*MockFFmpeg::get(), AVCodecOpen(&codec_context_, &codec_))
|
| - .WillOnce(Return(0));
|
| -
|
| - TaskMocker done_cb;
|
| - EXPECT_CALL(done_cb, Run());
|
| -
|
| - test_engine_->Initialize(&stream_, done_cb.CreateTask());
|
| - EXPECT_EQ(VideoDecodeEngine::kNormal, test_engine_->state());
|
| + Initialize();
|
| }
|
|
|
| TEST_F(FFmpegVideoDecodeEngineTest, Initialize_FindDecoderFails) {
|
| // Test avcodec_find_decoder() returning NULL.
|
| EXPECT_CALL(*MockFFmpeg::get(), AVCodecFindDecoder(CODEC_ID_NONE))
|
| .WillOnce(ReturnNull());
|
| + EXPECT_CALL(*MockFFmpeg::get(), AVCodecAllocFrame())
|
| + .WillOnce(Return(&yuv_frame_));
|
| + EXPECT_CALL(*MockFFmpeg::get(), AVFree(&yuv_frame_))
|
| + .Times(1);
|
|
|
| TaskMocker done_cb;
|
| EXPECT_CALL(done_cb, Run());
|
| @@ -92,8 +114,12 @@ TEST_F(FFmpegVideoDecodeEngineTest, Initialize_InitThreadFails) {
|
| // Test avcodec_thread_init() failing.
|
| EXPECT_CALL(*MockFFmpeg::get(), AVCodecFindDecoder(CODEC_ID_NONE))
|
| .WillOnce(Return(&codec_));
|
| + EXPECT_CALL(*MockFFmpeg::get(), AVCodecAllocFrame())
|
| + .WillOnce(Return(&yuv_frame_));
|
| EXPECT_CALL(*MockFFmpeg::get(), AVCodecThreadInit(&codec_context_, 2))
|
| .WillOnce(Return(-1));
|
| + EXPECT_CALL(*MockFFmpeg::get(), AVFree(&yuv_frame_))
|
| + .Times(1);
|
|
|
| TaskMocker done_cb;
|
| EXPECT_CALL(done_cb, Run());
|
| @@ -106,10 +132,14 @@ TEST_F(FFmpegVideoDecodeEngineTest, Initialize_OpenDecoderFails) {
|
| // Test avcodec_open() failing.
|
| EXPECT_CALL(*MockFFmpeg::get(), AVCodecFindDecoder(CODEC_ID_NONE))
|
| .WillOnce(Return(&codec_));
|
| + EXPECT_CALL(*MockFFmpeg::get(), AVCodecAllocFrame())
|
| + .WillOnce(Return(&yuv_frame_));
|
| EXPECT_CALL(*MockFFmpeg::get(), AVCodecThreadInit(&codec_context_, 2))
|
| .WillOnce(Return(0));
|
| EXPECT_CALL(*MockFFmpeg::get(), AVCodecOpen(&codec_context_, &codec_))
|
| .WillOnce(Return(-1));
|
| + EXPECT_CALL(*MockFFmpeg::get(), AVFree(&yuv_frame_))
|
| + .Times(1);
|
|
|
| TaskMocker done_cb;
|
| EXPECT_CALL(done_cb, Run());
|
| @@ -119,6 +149,8 @@ TEST_F(FFmpegVideoDecodeEngineTest, Initialize_OpenDecoderFails) {
|
| }
|
|
|
| TEST_F(FFmpegVideoDecodeEngineTest, DecodeFrame_Normal) {
|
| + Initialize();
|
| +
|
| // Expect a bunch of avcodec calls.
|
| EXPECT_CALL(mock_ffmpeg_, AVInitPacket(_));
|
| EXPECT_CALL(mock_ffmpeg_,
|
| @@ -130,12 +162,15 @@ TEST_F(FFmpegVideoDecodeEngineTest, DecodeFrame_Normal) {
|
| EXPECT_CALL(done_cb, Run());
|
|
|
| bool got_result;
|
| - test_engine_->DecodeFrame(buffer_, &yuv_frame_, &got_result,
|
| + scoped_refptr<VideoFrame> video_frame;
|
| + test_engine_->DecodeFrame(buffer_, &video_frame, &got_result,
|
| done_cb.CreateTask());
|
| EXPECT_TRUE(got_result);
|
| }
|
|
|
| TEST_F(FFmpegVideoDecodeEngineTest, DecodeFrame_0ByteFrame) {
|
| + Initialize();
|
| +
|
| // Expect a bunch of avcodec calls.
|
| EXPECT_CALL(mock_ffmpeg_, AVInitPacket(_));
|
| EXPECT_CALL(mock_ffmpeg_,
|
| @@ -147,12 +182,15 @@ TEST_F(FFmpegVideoDecodeEngineTest, DecodeFrame_0ByteFrame) {
|
| EXPECT_CALL(done_cb, Run());
|
|
|
| bool got_result;
|
| - test_engine_->DecodeFrame(buffer_, &yuv_frame_, &got_result,
|
| + scoped_refptr<VideoFrame> video_frame;
|
| + test_engine_->DecodeFrame(buffer_, &video_frame, &got_result,
|
| done_cb.CreateTask());
|
| EXPECT_FALSE(got_result);
|
| }
|
|
|
| TEST_F(FFmpegVideoDecodeEngineTest, DecodeFrame_DecodeError) {
|
| + Initialize();
|
| +
|
| // Expect a bunch of avcodec calls.
|
| EXPECT_CALL(mock_ffmpeg_, AVInitPacket(_));
|
| EXPECT_CALL(mock_ffmpeg_,
|
| @@ -163,7 +201,8 @@ TEST_F(FFmpegVideoDecodeEngineTest, DecodeFrame_DecodeError) {
|
| EXPECT_CALL(done_cb, Run());
|
|
|
| bool got_result;
|
| - test_engine_->DecodeFrame(buffer_, &yuv_frame_, &got_result,
|
| + scoped_refptr<VideoFrame> video_frame;
|
| + test_engine_->DecodeFrame(buffer_, &video_frame, &got_result,
|
| done_cb.CreateTask());
|
| EXPECT_FALSE(got_result);
|
| }
|
|
|