tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

still_picture_test.cc (3707B)


      1 /*
      2 * Copyright (c) 2020, Alliance for Open Media. All rights reserved.
      3 *
      4 * This source code is subject to the terms of the BSD 2 Clause License and
      5 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
      6 * was not distributed with this source code in the LICENSE file, you can
      7 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
      8 * Media Patent License 1.0 was not distributed with this source code in the
      9 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
     10 */
     11 
     12 #include "gtest/gtest.h"
     13 #include "test/codec_factory.h"
     14 #include "test/encode_test_driver.h"
     15 #include "test/i420_video_source.h"
     16 #include "test/util.h"
     17 
     18 namespace {
     19 
     20 // This class is used to test the presence of still picture feature.
     21 class StillPicturePresenceTest
     22    : public ::libaom_test::CodecTestWith2Params<libaom_test::TestMode, int>,
     23      public ::libaom_test::EncoderTest {
     24 protected:
     25  StillPicturePresenceTest()
     26      : EncoderTest(GET_PARAM(0)), encoding_mode_(GET_PARAM(1)),
     27        enable_full_header_(GET_PARAM(2)) {
     28    still_picture_coding_violated_ = false;
     29  }
     30  ~StillPicturePresenceTest() override = default;
     31 
     32  void SetUp() override {
     33    InitializeConfig(encoding_mode_);
     34    const aom_rational timebase = { 1, 30 };
     35    cfg_.g_timebase = timebase;
     36    cfg_.rc_end_usage = AOM_Q;
     37    cfg_.g_threads = 1;
     38    cfg_.full_still_picture_hdr = enable_full_header_;
     39    cfg_.g_limit = 1;
     40  }
     41 
     42  bool DoDecode() const override { return true; }
     43 
     44  void PreEncodeFrameHook(::libaom_test::VideoSource *video,
     45                          ::libaom_test::Encoder *encoder) override {
     46    if (video->frame() == 0) {
     47      encoder->Control(AOME_SET_CPUUSED, 5);
     48      encoder->Control(AV1E_SET_FORCE_VIDEO_MODE, 0);
     49    }
     50  }
     51 
     52  bool HandleDecodeResult(const aom_codec_err_t res_dec,
     53                          libaom_test::Decoder *decoder) override {
     54    EXPECT_EQ(AOM_CODEC_OK, res_dec) << decoder->DecodeError();
     55    if (AOM_CODEC_OK == res_dec) {
     56      aom_codec_ctx_t *ctx_dec = decoder->GetDecoder();
     57      AOM_CODEC_CONTROL_TYPECHECKED(ctx_dec, AOMD_GET_STILL_PICTURE,
     58                                    &still_pic_info_);
     59      if (still_pic_info_.is_still_picture != 1) {
     60        still_picture_coding_violated_ = true;
     61      }
     62      if (still_pic_info_.is_reduced_still_picture_hdr == enable_full_header_) {
     63        /* If full_still_picture_header is enabled in encoder config but
     64         * bitstream contains reduced_still_picture_header set, then set
     65         * still_picture_coding_violated_ to true.
     66         * Similarly, if full_still_picture_header is disabled in encoder config
     67         * but bitstream contains reduced_still_picture_header not set, then set
     68         * still_picture_coding_violated_ to true.
     69         */
     70        still_picture_coding_violated_ = true;
     71      }
     72    }
     73    return AOM_CODEC_OK == res_dec;
     74  }
     75 
     76  ::libaom_test::TestMode encoding_mode_;
     77  bool still_picture_coding_violated_;
     78  int enable_full_header_;
     79  aom_still_picture_info still_pic_info_;
     80  aom_rc_mode end_usage_check_;
     81 };
     82 
     83 TEST_P(StillPicturePresenceTest, StillPictureEncodePresenceTest) {
     84  libaom_test::I420VideoSource video("hantro_collage_w352h288.yuv", 352, 288,
     85                                     cfg_.g_timebase.den, cfg_.g_timebase.num,
     86                                     0, 1);
     87  ASSERT_NO_FATAL_FAILURE(RunLoop(&video));
     88  ASSERT_EQ(still_picture_coding_violated_, false);
     89 }
     90 
     91 AV1_INSTANTIATE_TEST_SUITE(StillPicturePresenceTest,
     92                           ::testing::Values(::libaom_test::kOnePassGood,
     93                                             ::libaom_test::kTwoPassGood),
     94                           ::testing::Values(1, 0));
     95 }  // namespace