| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/scoped_ptr.h" | 5 #include "base/scoped_ptr.h" |
| 6 #include "media/base/data_buffer.h" | 6 #include "media/base/data_buffer.h" |
| 7 #include "media/base/mock_ffmpeg.h" | 7 #include "media/base/mock_ffmpeg.h" |
| 8 #include "media/base/mock_task.h" | 8 #include "media/base/mock_task.h" |
| 9 #include "media/video/ffmpeg_video_decode_engine.h" | 9 #include "media/video/ffmpeg_video_decode_engine.h" |
| 10 #include "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 78 .WillOnce(Return(&codec_)); | 78 .WillOnce(Return(&codec_)); |
| 79 EXPECT_CALL(*MockFFmpeg::get(), AVCodecAllocFrame()) | 79 EXPECT_CALL(*MockFFmpeg::get(), AVCodecAllocFrame()) |
| 80 .WillOnce(Return(&yuv_frame_)); | 80 .WillOnce(Return(&yuv_frame_)); |
| 81 EXPECT_CALL(*MockFFmpeg::get(), AVCodecThreadInit(&codec_context_, 2)) | 81 EXPECT_CALL(*MockFFmpeg::get(), AVCodecThreadInit(&codec_context_, 2)) |
| 82 .WillOnce(Return(0)); | 82 .WillOnce(Return(0)); |
| 83 EXPECT_CALL(*MockFFmpeg::get(), AVCodecOpen(&codec_context_, &codec_)) | 83 EXPECT_CALL(*MockFFmpeg::get(), AVCodecOpen(&codec_context_, &codec_)) |
| 84 .WillOnce(Return(0)); | 84 .WillOnce(Return(0)); |
| 85 EXPECT_CALL(*MockFFmpeg::get(), AVFree(&yuv_frame_)) | 85 EXPECT_CALL(*MockFFmpeg::get(), AVFree(&yuv_frame_)) |
| 86 .Times(1); | 86 .Times(1); |
| 87 | 87 |
| 88 config_.codec_ = kCodecH264; | 88 config_.codec = kCodecH264; |
| 89 config_.opaque_context_ = &stream_; | 89 config_.opaque_context = &stream_; |
| 90 config_.width_ = kWidth; | 90 config_.width = kWidth; |
| 91 config_.height_ = kHeight; | 91 config_.height = kHeight; |
| 92 EXPECT_CALL(*this, OnInitializeComplete(_)) | 92 EXPECT_CALL(*this, OnInitializeComplete(_)) |
| 93 .WillOnce(SaveInitializeResult(this)); | 93 .WillOnce(SaveInitializeResult(this)); |
| 94 test_engine_->Initialize(MessageLoop::current(), this, config_); | 94 test_engine_->Initialize(MessageLoop::current(), this, config_); |
| 95 EXPECT_TRUE(info_.success_); | 95 EXPECT_TRUE(info_.success); |
| 96 } | 96 } |
| 97 | 97 |
| 98 public: | 98 public: |
| 99 MOCK_METHOD1(ConsumeVideoFrame, | 99 MOCK_METHOD1(ConsumeVideoFrame, |
| 100 void(scoped_refptr<VideoFrame> video_frame)); | 100 void(scoped_refptr<VideoFrame> video_frame)); |
| 101 MOCK_METHOD1(ProduceVideoSample, | 101 MOCK_METHOD1(ProduceVideoSample, |
| 102 void(scoped_refptr<Buffer> buffer)); | 102 void(scoped_refptr<Buffer> buffer)); |
| 103 MOCK_METHOD1(OnInitializeComplete, | 103 MOCK_METHOD1(OnInitializeComplete, |
| 104 void(const VideoCodecInfo& info)); | 104 void(const VideoCodecInfo& info)); |
| 105 MOCK_METHOD0(OnUninitializeComplete, void()); | 105 MOCK_METHOD0(OnUninitializeComplete, void()); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 130 | 130 |
| 131 TEST_F(FFmpegVideoDecodeEngineTest, Initialize_FindDecoderFails) { | 131 TEST_F(FFmpegVideoDecodeEngineTest, Initialize_FindDecoderFails) { |
| 132 // Test avcodec_find_decoder() returning NULL. | 132 // Test avcodec_find_decoder() returning NULL. |
| 133 EXPECT_CALL(*MockFFmpeg::get(), AVCodecFindDecoder(CODEC_ID_NONE)) | 133 EXPECT_CALL(*MockFFmpeg::get(), AVCodecFindDecoder(CODEC_ID_NONE)) |
| 134 .WillOnce(ReturnNull()); | 134 .WillOnce(ReturnNull()); |
| 135 EXPECT_CALL(*MockFFmpeg::get(), AVCodecAllocFrame()) | 135 EXPECT_CALL(*MockFFmpeg::get(), AVCodecAllocFrame()) |
| 136 .WillOnce(Return(&yuv_frame_)); | 136 .WillOnce(Return(&yuv_frame_)); |
| 137 EXPECT_CALL(*MockFFmpeg::get(), AVFree(&yuv_frame_)) | 137 EXPECT_CALL(*MockFFmpeg::get(), AVFree(&yuv_frame_)) |
| 138 .Times(1); | 138 .Times(1); |
| 139 | 139 |
| 140 config_.codec_ = kCodecH264; | 140 config_.codec = kCodecH264; |
| 141 config_.opaque_context_ = &stream_; | 141 config_.opaque_context = &stream_; |
| 142 config_.width_ = kWidth; | 142 config_.width = kWidth; |
| 143 config_.height_ = kHeight; | 143 config_.height = kHeight; |
| 144 EXPECT_CALL(*this, OnInitializeComplete(_)) | 144 EXPECT_CALL(*this, OnInitializeComplete(_)) |
| 145 .WillOnce(SaveInitializeResult(this)); | 145 .WillOnce(SaveInitializeResult(this)); |
| 146 test_engine_->Initialize(MessageLoop::current(), this, config_); | 146 test_engine_->Initialize(MessageLoop::current(), this, config_); |
| 147 EXPECT_FALSE(info_.success_); | 147 EXPECT_FALSE(info_.success); |
| 148 } | 148 } |
| 149 | 149 |
| 150 // Note There are 2 threads for FFmpeg-mt. | 150 // Note There are 2 threads for FFmpeg-mt. |
| 151 TEST_F(FFmpegVideoDecodeEngineTest, Initialize_InitThreadFails) { | 151 TEST_F(FFmpegVideoDecodeEngineTest, Initialize_InitThreadFails) { |
| 152 // Test avcodec_thread_init() failing. | 152 // Test avcodec_thread_init() failing. |
| 153 EXPECT_CALL(*MockFFmpeg::get(), AVCodecFindDecoder(CODEC_ID_NONE)) | 153 EXPECT_CALL(*MockFFmpeg::get(), AVCodecFindDecoder(CODEC_ID_NONE)) |
| 154 .WillOnce(Return(&codec_)); | 154 .WillOnce(Return(&codec_)); |
| 155 EXPECT_CALL(*MockFFmpeg::get(), AVCodecAllocFrame()) | 155 EXPECT_CALL(*MockFFmpeg::get(), AVCodecAllocFrame()) |
| 156 .WillOnce(Return(&yuv_frame_)); | 156 .WillOnce(Return(&yuv_frame_)); |
| 157 EXPECT_CALL(*MockFFmpeg::get(), AVCodecThreadInit(&codec_context_, 2)) | 157 EXPECT_CALL(*MockFFmpeg::get(), AVCodecThreadInit(&codec_context_, 2)) |
| 158 .WillOnce(Return(-1)); | 158 .WillOnce(Return(-1)); |
| 159 EXPECT_CALL(*MockFFmpeg::get(), AVFree(&yuv_frame_)) | 159 EXPECT_CALL(*MockFFmpeg::get(), AVFree(&yuv_frame_)) |
| 160 .Times(1); | 160 .Times(1); |
| 161 | 161 |
| 162 config_.codec_ = kCodecH264; | 162 config_.codec = kCodecH264; |
| 163 config_.opaque_context_ = &stream_; | 163 config_.opaque_context = &stream_; |
| 164 config_.width_ = kWidth; | 164 config_.width = kWidth; |
| 165 config_.height_ = kHeight; | 165 config_.height = kHeight; |
| 166 EXPECT_CALL(*this, OnInitializeComplete(_)) | 166 EXPECT_CALL(*this, OnInitializeComplete(_)) |
| 167 .WillOnce(SaveInitializeResult(this)); | 167 .WillOnce(SaveInitializeResult(this)); |
| 168 test_engine_->Initialize(MessageLoop::current(), this, config_); | 168 test_engine_->Initialize(MessageLoop::current(), this, config_); |
| 169 EXPECT_FALSE(info_.success_); | 169 EXPECT_FALSE(info_.success); |
| 170 } | 170 } |
| 171 | 171 |
| 172 TEST_F(FFmpegVideoDecodeEngineTest, Initialize_OpenDecoderFails) { | 172 TEST_F(FFmpegVideoDecodeEngineTest, Initialize_OpenDecoderFails) { |
| 173 // Test avcodec_open() failing. | 173 // Test avcodec_open() failing. |
| 174 EXPECT_CALL(*MockFFmpeg::get(), AVCodecFindDecoder(CODEC_ID_NONE)) | 174 EXPECT_CALL(*MockFFmpeg::get(), AVCodecFindDecoder(CODEC_ID_NONE)) |
| 175 .WillOnce(Return(&codec_)); | 175 .WillOnce(Return(&codec_)); |
| 176 EXPECT_CALL(*MockFFmpeg::get(), AVCodecAllocFrame()) | 176 EXPECT_CALL(*MockFFmpeg::get(), AVCodecAllocFrame()) |
| 177 .WillOnce(Return(&yuv_frame_)); | 177 .WillOnce(Return(&yuv_frame_)); |
| 178 EXPECT_CALL(*MockFFmpeg::get(), AVCodecThreadInit(&codec_context_, 2)) | 178 EXPECT_CALL(*MockFFmpeg::get(), AVCodecThreadInit(&codec_context_, 2)) |
| 179 .WillOnce(Return(0)); | 179 .WillOnce(Return(0)); |
| 180 EXPECT_CALL(*MockFFmpeg::get(), AVCodecOpen(&codec_context_, &codec_)) | 180 EXPECT_CALL(*MockFFmpeg::get(), AVCodecOpen(&codec_context_, &codec_)) |
| 181 .WillOnce(Return(-1)); | 181 .WillOnce(Return(-1)); |
| 182 EXPECT_CALL(*MockFFmpeg::get(), AVFree(&yuv_frame_)) | 182 EXPECT_CALL(*MockFFmpeg::get(), AVFree(&yuv_frame_)) |
| 183 .Times(1); | 183 .Times(1); |
| 184 | 184 |
| 185 config_.codec_ = kCodecH264; | 185 config_.codec = kCodecH264; |
| 186 config_.opaque_context_ = &stream_; | 186 config_.opaque_context = &stream_; |
| 187 config_.width_ = kWidth; | 187 config_.width = kWidth; |
| 188 config_.height_ = kHeight; | 188 config_.height = kHeight; |
| 189 EXPECT_CALL(*this, OnInitializeComplete(_)) | 189 EXPECT_CALL(*this, OnInitializeComplete(_)) |
| 190 .WillOnce(SaveInitializeResult(this)); | 190 .WillOnce(SaveInitializeResult(this)); |
| 191 test_engine_->Initialize(MessageLoop::current(), this, config_); | 191 test_engine_->Initialize(MessageLoop::current(), this, config_); |
| 192 EXPECT_FALSE(info_.success_); | 192 EXPECT_FALSE(info_.success); |
| 193 } | 193 } |
| 194 | 194 |
| 195 ACTION_P2(DemuxComplete, engine, buffer) { | 195 ACTION_P2(DemuxComplete, engine, buffer) { |
| 196 engine->ConsumeVideoSample(buffer); | 196 engine->ConsumeVideoSample(buffer); |
| 197 } | 197 } |
| 198 | 198 |
| 199 ACTION_P(DecodeComplete, decoder) { | 199 ACTION_P(DecodeComplete, decoder) { |
| 200 decoder->video_frame_ = arg0; | 200 decoder->video_frame_ = arg0; |
| 201 } | 201 } |
| 202 | 202 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 EXPECT_EQ(VideoFrame::YV16, test_engine_->GetSurfaceFormat()); | 283 EXPECT_EQ(VideoFrame::YV16, test_engine_->GetSurfaceFormat()); |
| 284 codec_context_.pix_fmt = PIX_FMT_YUVJ422P; | 284 codec_context_.pix_fmt = PIX_FMT_YUVJ422P; |
| 285 EXPECT_EQ(VideoFrame::YV16, test_engine_->GetSurfaceFormat()); | 285 EXPECT_EQ(VideoFrame::YV16, test_engine_->GetSurfaceFormat()); |
| 286 | 286 |
| 287 // Invalid value. | 287 // Invalid value. |
| 288 codec_context_.pix_fmt = PIX_FMT_NONE; | 288 codec_context_.pix_fmt = PIX_FMT_NONE; |
| 289 EXPECT_EQ(VideoFrame::INVALID, test_engine_->GetSurfaceFormat()); | 289 EXPECT_EQ(VideoFrame::INVALID, test_engine_->GetSurfaceFormat()); |
| 290 } | 290 } |
| 291 | 291 |
| 292 } // namespace media | 292 } // namespace media |
| OLD | NEW |