Verify parsed QP value when frame is encoded instead of storing parsed value and verifying later.
Removes:
- VideoProcessor: GetQpFromEncoder, GetQpFromBitstream
- FrameInfo: qp_encoder, qp_bitstream
BUG=webrtc:6634
Review-Url: https://codereview.webrtc.org/3007753002
Cr-Original-Commit-Position: refs/heads/master@{#19579}
Cr-Mirrored-From: https://chromium.googlesource.com/external/webrtc
Cr-Mirrored-Commit: a16c70b8ba37b07b6fa82b2a4314f6f608ad079e
diff --git a/modules/video_coding/codecs/test/videoprocessor.cc b/modules/video_coding/codecs/test/videoprocessor.cc
index 5ebe836..02f0e18 100644
--- a/modules/video_coding/codecs/test/videoprocessor.cc
+++ b/modules/video_coding/codecs/test/videoprocessor.cc
@@ -26,6 +26,7 @@
#include "webrtc/rtc_base/logging.h"
#include "webrtc/rtc_base/timeutils.h"
#include "webrtc/system_wrappers/include/cpu_info.h"
+#include "webrtc/test/gtest.h"
namespace webrtc {
namespace test {
@@ -91,6 +92,22 @@
}
}
+void VerifyQpParser(const EncodedImage& encoded_frame,
+ const TestConfig& config) {
+ if (config.hw_codec)
+ return;
+
+ int qp;
+ if (config.codec_settings.codecType == kVideoCodecVP8) {
+ ASSERT_TRUE(vp8::GetQp(encoded_frame._buffer, encoded_frame._length, &qp));
+ } else if (config.codec_settings.codecType == kVideoCodecVP9) {
+ ASSERT_TRUE(vp9::GetQp(encoded_frame._buffer, encoded_frame._length, &qp));
+ } else {
+ return;
+ }
+ EXPECT_EQ(encoded_frame.qp_, qp) << "Encoder QP != parsed bitstream QP.";
+}
+
int GetElapsedTimeMicroseconds(int64_t start_ns, int64_t stop_ns) {
int64_t diff_us = (stop_ns - start_ns) / rtc::kNumNanosecsPerMicrosec;
RTC_DCHECK_GE(diff_us, std::numeric_limits<int>::min());
@@ -263,18 +280,6 @@
num_spatial_resizes_ = 0;
}
-int VideoProcessor::GetQpFromEncoder(int frame_number) const {
- RTC_DCHECK_CALLED_SEQUENTIALLY(&sequence_checker_);
- RTC_CHECK_LT(frame_number, frame_infos_.size());
- return frame_infos_[frame_number].qp_encoder;
-}
-
-int VideoProcessor::GetQpFromBitstream(int frame_number) const {
- RTC_DCHECK_CALLED_SEQUENTIALLY(&sequence_checker_);
- RTC_CHECK_LT(frame_number, frame_infos_.size());
- return frame_infos_[frame_number].qp_bitstream;
-}
-
int VideoProcessor::NumberDroppedFrames() {
RTC_DCHECK_CALLED_SEQUENTIALLY(&sequence_checker_);
return num_dropped_frames_;
@@ -332,16 +337,9 @@
last_encoded_frame_num_ = frame_number;
// Frame is not dropped, so update frame information and statistics.
+ VerifyQpParser(encoded_image, config_);
RTC_CHECK_LT(frame_number, frame_infos_.size());
FrameInfo* frame_info = &frame_infos_[frame_number];
- frame_info->qp_encoder = encoded_image.qp_;
- if (codec == kVideoCodecVP8) {
- vp8::GetQp(encoded_image._buffer, encoded_image._length,
- &frame_info->qp_bitstream);
- } else if (codec == kVideoCodecVP9) {
- vp9::GetQp(encoded_image._buffer, encoded_image._length,
- &frame_info->qp_bitstream);
- }
FrameStatistic* frame_stat = &stats_->stats_[frame_number];
frame_stat->encode_time_in_us =
GetElapsedTimeMicroseconds(frame_info->encode_start_ns, encode_stop_ns);
diff --git a/modules/video_coding/codecs/test/videoprocessor.h b/modules/video_coding/codecs/test/videoprocessor.h
index a8c9858..b5ea045 100644
--- a/modules/video_coding/codecs/test/videoprocessor.h
+++ b/modules/video_coding/codecs/test/videoprocessor.h
@@ -159,13 +159,6 @@
// Updates the encoder with target rates. Must be called at least once.
void SetRates(int bitrate_kbps, int framerate_fps);
-
- // TODO(brandtr): Get rid of these functions by moving the corresponding QP
- // fields to the Stats object.
- int GetQpFromEncoder(int frame_number) const;
- int GetQpFromBitstream(int frame_number) const;
-
-
// Return the number of dropped frames.
int NumberDroppedFrames();
@@ -180,8 +173,6 @@
struct FrameInfo {
int64_t encode_start_ns = 0;
int64_t decode_start_ns = 0;
- int qp_encoder = 0;
- int qp_bitstream = 0;
int decoded_width = 0;
int decoded_height = 0;
size_t manipulated_length = 0;
diff --git a/modules/video_coding/codecs/test/videoprocessor_integrationtest.h b/modules/video_coding/codecs/test/videoprocessor_integrationtest.h
index d84145f..5fad72b 100644
--- a/modules/video_coding/codecs/test/videoprocessor_integrationtest.h
+++ b/modules/video_coding/codecs/test/videoprocessor_integrationtest.h
@@ -391,15 +391,6 @@
EXPECT_GT(ssim_result.min, quality_thresholds.min_min_ssim);
}
- void VerifyQpParser(int frame_number) {
- if (!config_.hw_codec &&
- (config_.codec_settings.codecType == kVideoCodecVP8 ||
- config_.codec_settings.codecType == kVideoCodecVP9)) {
- EXPECT_EQ(processor_->GetQpFromEncoder(frame_number),
- processor_->GetQpFromBitstream(frame_number));
- }
- }
-
static int NumberOfTemporalLayers(const VideoCodec& codec_settings) {
if (codec_settings.codecType == kVideoCodecVP8) {
return codec_settings.VP8().numberOfTemporalLayers;
@@ -494,7 +485,6 @@
while (frame_number < num_frames) {
processor_->ProcessFrame(frame_number);
- VerifyQpParser(frame_number);
const int tl_idx = TemporalLayerIndexForFrame(frame_number);
++num_frames_per_update_[tl_idx];
++num_frames_total_;