Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(306)

Unified Diff: webrtc/modules/video_coding/codecs/vp8/test/vp8_impl_unittest.cc

Issue 2656603002: Add QP for libvpx VP8 decoder. (Closed)
Patch Set: Rebase. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..9a0f3db145a82dedf6ee53250cc955ee8d4c09f7 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,21 @@ TEST_F(TestVp8Impl, EncoderParameterTest) {
EXPECT_EQ(WEBRTC_VIDEO_CODEC_OK, decoder_->InitDecode(&codec_inst_, 1));
}
+TEST_F(TestVp8Impl, DecodedQpEqualsEncodedQp) {
+ SetUpEncodeDecode();
+ encoder_->Encode(*input_frame_, nullptr, nullptr);
+ 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, nullptr));
+ EXPECT_GT(WaitForDecodedFrame(), 0u);
+ ASSERT_TRUE(decoded_frame_);
+ EXPECT_GT(I420PSNR(input_frame_.get(), &*decoded_frame_), 36);
+ ASSERT_TRUE(decoded_qp_);
+ EXPECT_EQ(encoded_frame_.qp_, *decoded_qp_);
+}
+
#if defined(WEBRTC_ANDROID)
#define MAYBE_AlignedStrideEncodeDecode DISABLED_AlignedStrideEncodeDecode
#else
« no previous file with comments | « webrtc/modules/video_coding/codecs/vp8/simulcast_unittest.h ('k') | webrtc/modules/video_coding/codecs/vp8/vp8_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698