Index: source/libvpx/test/cq_test.cc |
=================================================================== |
--- source/libvpx/test/cq_test.cc (revision 290053) |
+++ source/libvpx/test/cq_test.cc (working copy) |
@@ -8,6 +8,7 @@ |
* be found in the AUTHORS file in the root of the source tree. |
*/ |
#include <cmath> |
+#include <map> |
#include "third_party/googletest/src/include/gtest/gtest.h" |
#include "test/codec_factory.h" |
#include "test/encode_test_driver.h" |
@@ -24,6 +25,28 @@ |
class CQTest : public ::libvpx_test::EncoderTest, |
public ::libvpx_test::CodecTestWithParam<int> { |
+ public: |
+ // maps the cqlevel to the bitrate produced. |
+ typedef std::map<int, uint32_t> BitrateMap; |
+ |
+ static void SetUpTestCase() { |
+ bitrates_.clear(); |
+ } |
+ |
+ static void TearDownTestCase() { |
+ ASSERT_TRUE(!HasFailure()) |
+ << "skipping bitrate validation due to earlier failure."; |
+ uint32_t prev_actual_bitrate = kCQTargetBitrate; |
+ for (BitrateMap::const_iterator iter = bitrates_.begin(); |
+ iter != bitrates_.end(); ++iter) { |
+ const uint32_t cq_actual_bitrate = iter->second; |
+ EXPECT_LE(cq_actual_bitrate, prev_actual_bitrate) |
+ << "cq_level: " << iter->first |
+ << ", bitrate should decrease with increase in CQ level."; |
+ prev_actual_bitrate = cq_actual_bitrate; |
+ } |
+ } |
+ |
protected: |
CQTest() : EncoderTest(GET_PARAM(0)), cq_level_(GET_PARAM(1)) { |
init_flags_ = VPX_CODEC_USE_PSNR; |
@@ -66,9 +89,12 @@ |
return pow(10.0, avg_psnr / 10.0) / file_size_; |
} |
+ int cq_level() const { return cq_level_; } |
size_t file_size() const { return file_size_; } |
int n_frames() const { return n_frames_; } |
+ static BitrateMap bitrates_; |
+ |
private: |
int cq_level_; |
size_t file_size_; |
@@ -76,7 +102,8 @@ |
int n_frames_; |
}; |
-unsigned int prev_actual_bitrate = kCQTargetBitrate; |
+CQTest::BitrateMap CQTest::bitrates_; |
+ |
TEST_P(CQTest, LinearPSNRIsHigherForCQLevel) { |
const vpx_rational timebase = { 33333333, 1000000000 }; |
cfg_.g_timebase = timebase; |
@@ -91,8 +118,7 @@ |
const unsigned int cq_actual_bitrate = |
static_cast<unsigned int>(file_size()) * 8 * 30 / (n_frames() * 1000); |
EXPECT_LE(cq_actual_bitrate, kCQTargetBitrate); |
- EXPECT_LE(cq_actual_bitrate, prev_actual_bitrate); |
- prev_actual_bitrate = cq_actual_bitrate; |
+ bitrates_[cq_level()] = cq_actual_bitrate; |
// try targeting the approximate same bitrate with VBR mode |
cfg_.rc_end_usage = VPX_VBR; |