Chromium Code Reviews| Index: webrtc/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc |
| diff --git a/webrtc/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc b/webrtc/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc |
| index a47c209ad42945bbe4de5cd7b110aabbf3b85e1c..23ac6a523a43aafedd848a3a94c8ce827b093252 100644 |
| --- a/webrtc/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc |
| +++ b/webrtc/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc |
| @@ -76,6 +76,7 @@ Vp8UnitTestEncodeCompleteCallback::OnEncodedImage( |
| encoded_frame_->_timeStamp = encoded_frame._timeStamp; |
| encoded_frame_->_frameType = encoded_frame._frameType; |
| encoded_frame_->_completeFrame = encoded_frame._completeFrame; |
| + encoded_frame_->qp_ = encoded_frame.qp_; |
| encode_complete_ = true; |
| return Result(Result::OK, 0); |
| } |
| @@ -90,22 +91,25 @@ bool Vp8UnitTestEncodeCompleteCallback::EncodeComplete() { |
| class Vp8UnitTestDecodeCompleteCallback : public webrtc::DecodedImageCallback { |
| public: |
| - explicit Vp8UnitTestDecodeCompleteCallback(rtc::Optional<VideoFrame>* frame) |
| - : decoded_frame_(frame), decode_complete(false) {} |
| - int32_t Decoded(VideoFrame& frame) override; |
| + explicit Vp8UnitTestDecodeCompleteCallback(rtc::Optional<VideoFrame>* frame, |
| + rtc::Optional<uint8_t>* qp) |
| + : decoded_frame_(frame), decoded_qp_(qp), decode_complete(false) {} |
| + int32_t Decoded(VideoFrame& frame) override { |
| + RTC_NOTREACHED(); |
| + return -1; |
| + } |
| int32_t Decoded(VideoFrame& frame, int64_t decode_time_ms) override { |
| RTC_NOTREACHED(); |
| return -1; |
| } |
| void Decoded(VideoFrame& frame, |
| rtc::Optional<int32_t> decode_time_ms, |
| - rtc::Optional<uint8_t> qp) override { |
| - RTC_NOTREACHED(); |
| - } |
| + rtc::Optional<uint8_t> qp) override; |
| bool DecodeComplete(); |
| private: |
| rtc::Optional<VideoFrame>* decoded_frame_; |
| + rtc::Optional<uint8_t>* decoded_qp_; |
| bool decode_complete; |
| }; |
| @@ -117,10 +121,13 @@ bool Vp8UnitTestDecodeCompleteCallback::DecodeComplete() { |
| return false; |
| } |
| -int Vp8UnitTestDecodeCompleteCallback::Decoded(VideoFrame& image) { |
| - *decoded_frame_ = rtc::Optional<VideoFrame>(image); |
| +void Vp8UnitTestDecodeCompleteCallback::Decoded( |
| + VideoFrame& frame, |
| + rtc::Optional<int32_t> decode_time_ms, |
| + rtc::Optional<uint8_t> qp) { |
| + *decoded_frame_ = rtc::Optional<VideoFrame>(frame); |
| + *decoded_qp_ = qp; |
| decode_complete = true; |
| - return 0; |
| } |
| class TestVp8Impl : public ::testing::Test { |
| @@ -132,7 +139,7 @@ class TestVp8Impl : public ::testing::Test { |
| encode_complete_callback_.reset( |
| new Vp8UnitTestEncodeCompleteCallback(&encoded_frame_, 0, NULL)); |
| decode_complete_callback_.reset( |
| - new Vp8UnitTestDecodeCompleteCallback(&decoded_frame_)); |
| + new Vp8UnitTestDecodeCompleteCallback(&decoded_frame_, &decoded_qp_)); |
| encoder_->RegisterEncodeCompleteCallback(encode_complete_callback_.get()); |
| decoder_->RegisterDecodeCompleteCallback(decode_complete_callback_.get()); |
| // Using a QCIF image (aligned stride (u,v planes) > width). |
| @@ -210,6 +217,7 @@ class TestVp8Impl : public ::testing::Test { |
| std::unique_ptr<VideoDecoder> decoder_; |
| EncodedImage encoded_frame_; |
| rtc::Optional<VideoFrame> decoded_frame_; |
| + rtc::Optional<uint8_t> decoded_qp_; |
| VideoCodec codec_inst_; |
| TemporalLayersFactory tl_factory_; |
| }; |
| @@ -244,6 +252,20 @@ TEST_F(TestVp8Impl, EncoderParameterTest) { |
| EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, decoder_->InitDecode(&codec_inst_, 1)); |
| } |
| +TEST_F(TestVp8Impl, DecodedQpEqualsEncodedQp) { |
| + SetUpEncodeDecode(); |
| + encoder_->Encode(*input_frame_, NULL, NULL); |
|
sprang_webrtc
2017/02/17 12:31:59
nullptr for all new code
sakal
2017/02/17 12:41:41
Done.
|
| + EXPECT_GT(WaitForEncodedFrame(), 0u); |
| + // First frame should be a key frame. |
| + encoded_frame_._frameType = kVideoFrameKey; |
| + EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, |
| + decoder_->Decode(encoded_frame_, false, NULL)); |
| + EXPECT_GT(WaitForDecodedFrame(), 0u); |
| + ASSERT_TRUE(decoded_frame_); |
| + EXPECT_GT(I420PSNR(input_frame_.get(), &*decoded_frame_), 36); |
| + EXPECT_EQ(encoded_frame_.qp_, *decoded_qp_); |
|
sprang_webrtc
2017/02/17 12:31:59
I'd assert decoded_qp_ has a value first, or maybe
sakal
2017/02/17 12:41:41
Done.
|
| +} |
| + |
| #if defined(WEBRTC_ANDROID) |
| #define MAYBE_AlignedStrideEncodeDecode DISABLED_AlignedStrideEncodeDecode |
| #else |