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 |