/* * Copyright (c) 2019, Alliance for Open Media. All rights reserved. * * This source code is subject to the terms of the BSD 2 Clause License and * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License * was not distributed with this source code in the LICENSE file, you can * obtain it at www.aomedia.org/license/software. If the Alliance for Open * Media Patent License 1.0 was not distributed with this source code in the * PATENTS file, you can obtain it at www.aomedia.org/license/patent. */ #include <climits> #include <vector> #include "config/aom_config.h" #include "gtest/gtest.h" #include "test/codec_factory.h" #include "test/datarate_test.h" #include "test/encode_test_driver.h" #include "test/i420_video_source.h" #include "test/util.h" #include "test/y4m_video_source.h" #include "aom/aom_codec.h" #include "av1/common/enums.h" #include "av1/encoder/encoder.h" namespace datarate_test { namespace { struct FrameInfo { … }; class DatarateTestSVC : public ::libaom_test::CodecTestWith4Params<libaom_test::TestMode, int, unsigned int, int>, public DatarateTest { … }; // Check basic rate targeting for CBR, for 3 temporal layers, 1 spatial. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL1SL) { … } TEST_P(DatarateTestSVC, SetFrameQpSVC3TL1SL) { … } TEST_P(DatarateTestSVC, SetFrameQpSVC3TL3SL) { … } // Check basic rate targeting for CBR, for 3 temporal layers, 1 spatial // for screen mode. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL1SLScreen) { … } // Check basic rate targeting for CBR, for 2 temporal layers, 1 spatial // for screen mode, with frame dropper on at low bitrates. Use small // values of rc_buf_initial/optimal/sz to trigger postencode frame drop. TEST_P(DatarateTestSVC, BasicRateTargetingSVC2TL1SLScreenDropFrame) { … } // Check basic rate targeting for CBR, for 3 spatial layers, 1 temporal // for screen mode. TEST_P(DatarateTestSVC, BasicRateTargetingSVC1TL3SLScreen) { … } // Check basic rate targeting for CBR, for 1 temporal layer, 1 spatial // for screen mode, with source with many scene cuts and motion. TEST_P(DatarateTestSVC, BasicRateTargetingSVC1TL1SLScreenScCutsMotion) { … } // Check basic rate targeting for CBR, for 3 temporal layers, 1 spatial, // with dynamic resize on. Encode at very low bitrate and check that // there is at least one resize (down) event. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL1SLResize) { … } // Check basic rate targeting for CBR, for 2 spatial layers, 1 temporal. TEST_P(DatarateTestSVC, BasicRateTargetingSVC1TL2SL) { … } // Check basic rate targeting for CBR, for 3 spatial layers, 3 temporal, // with Intra-only frame inserted in the stream. Verify that we can start // decoding the SL0 stream at the intra_only frame in mid-sequence. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL3SLIntraStartDecodeBaseMidSeq) { … } // Check basic rate targeting for CBR, for 3spatial layers, 3 temporal, // with Intra-only frame inserted in the stream. Verify that we can // decode all frames and layers with no mismatch. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL3SLIntraMidSeqDecodeAll) { … } // Check simulcast mode for 3 spatial layers, 3 temporal, // Key frame is inserted on base SLO in mid-stream, and verify that the // top spatial layer (SL2) case be decoded, starting with an Intra-only frame. // Verify that we can decode all frames for SL2 with no mismatch. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL3SLSimulcast) { … } // Check basic rate targeting for CBR, for 2 spatial layers, 1 temporal, // with Intra-only frame inserted in the stream. TEST_P(DatarateTestSVC, BasicRateTargetingSVC1TL2SLIntraOnly) { … } // Check basic rate targeting for CBR, for 1 spatial layers, 1 temporal, // with Intra-only frame (frame with no references) inserted in the stream. TEST_P(DatarateTestSVC, BasicRateTargetingSVC1TL1SLIntraOnly) { … } // Check basic rate targeting for CBR, for 3 spatial layers, 1 temporal. TEST_P(DatarateTestSVC, BasicRateTargetingSVC1TL3SL) { … } // Check basic rate targeting for CBR, for 3 spatial layers, 1 temporal, // with additional temporal reference for top spatial layer. TEST_P(DatarateTestSVC, BasicRateTargetingSVC1TL3SLMultiRef) { … } // Check basic rate targeting for CBR, for 3 spatial, 3 temporal layers. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL3SL) { … } // Check basic rate targeting for CBR, for 3 spatial, 3 temporal layers. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL3SLHD) { … } // Check basic rate targeting for CBR, for 3 spatial, 3 temporal layers, // for fixed mode SVC. TEST_P(DatarateTestSVC, BasicRateTargetingFixedModeSVC3TL3SLHD) { … } // Check basic rate targeting for CBR, for 3 spatial, 3 temporal layers, // for 2 threads, 2 tile_columns, row-mt enabled, and different speed // per layer. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL3SLMultiThreadSpeedPerLayer) { … } // Check basic rate targeting for CBR, for 3 spatial, 3 temporal layers, // for 2 threads, 2 tile_columns, row-mt enabled. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL3SLHDMultiThread2) { … } // Check basic rate targeting for CBR, for 1 spatial, 2 temporal layers, // for 4 threads, 2 tile_columns, 2 tiles_rows, row-mt enabled. TEST_P(DatarateTestSVC, BasicRateTargetingSVC2TL1SLHDMultiThread4) { … } // Check basic rate targeting for CBR, for 1 spatial, 2 temporal layers, // for 4 threads, row-mt enabled, and auto_tiling enabled. TEST_P(DatarateTestSVC, BasicRateTargetingSVC2TL1SLHDMultiThread4AutoTiles) { … } // Check basic rate targeting for CBR, for 3 spatial, 3 temporal layers, // for 4 threads, 2 tile_columns, 2 tiles_rows, row-mt enabled. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL3SLHDMultiThread4) { … } // Check basic rate targeting for CBR, for 3 spatial, 3 temporal layers, // with additional temporal reference for top spatial layer. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL3SLHDMultiRef) { … } // Check basic rate targeting for CBR, for 3 spatial, 3 temporal layers, // for auto key frame mode with short key frame period. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL3SLKf) { … } // Check basic rate targeting for CBR, for 3 spatial, 3 temporal layers, // for 4:4:4 input. #if defined(CONFIG_MAX_DECODE_PROFILE) && CONFIG_MAX_DECODE_PROFILE < 1 TEST_P(DatarateTestSVC, DISABLED_BasicRateTargeting444SVC3TL3SL) { #else TEST_P(DatarateTestSVC, BasicRateTargeting444SVC3TL3SL) { … } // Check basic rate targeting for CBR, for 3 temporal layers, 1 spatial layer, // with dropping of all enhancement layers (TL 1 and TL2). Check that the base // layer (TL0) can still be decodeable (with no mismatch) with the // error_resilient flag set to 0. This test used the pattern with multiple // references (last, golden, and altref), updated on base layer. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL1SLMultiRefDropAllEnh) { … } // Check basic rate targeting for CBR, for 3 temporal layers, 1 spatial layer, // with dropping of all enhancement layers (TL 1 and TL2). Check that the base // layer (TL0) can still be decodeable (with no mismatch) with the // error_resilient flag set to 0. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL1SLDropAllEnh) { … } // Check basic rate targeting for CBR, for 3 temporal layers, 1 spatial layer, // with dropping of the TL2 enhancement layer, which are non-reference // (droppble) frames. For the base layer (TL0) and TL1 to still be decodeable // (with no mismatch), the error_resilient_flag may be off (set to 0), // since TL2 are non-reference frames. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL1SLDropTL2Enh) { … } // Check basic rate targeting for CBR, for 3 temporal layers, 1 spatial layer, // with dropping of all enhancement layers (TL 1 and TL2). Test that the // error_resilient flag can be set at frame level, with on/1 on // enhancement layers and off/0 on base layer. // This allows for successful decoding after dropping enhancement layer frames. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL1SLDropAllEnhFrameER) { … } // Check basic rate targeting for CBR, for 3 temporal layers, 1 spatial layer, // with dropping set of enhancement layers (TL 1 and TL2) in middle of sequence. // Test that the error_resilient flag can be set at frame level, with on/1 on // enhancement layers and off/0 on base layer. // This allows for successful decoding after dropping a set enhancement layer // frames in the sequence. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL1SLDropSetEnhFrameER) { … } // Check basic rate targeting for CBR, for 2 temporal layers, 1 spatial layer, // with dropping set of enhancement layers (TL 1) in middle of sequence. // Test that the error_resilient flag can be 0/off for all frames. // This allows for successful decoding after dropping a set enhancement layer // frames in the sequence. TEST_P(DatarateTestSVC, BasicRateTargetingSVC2TL1SLDropSetEnhER0) { … } // Check basic rate targeting for CBR, for 3 temporal layers, 1 spatial layer, // with dropping set of enhancement layers (TL 1 and TL2) in middle of sequence. // Test that the error_resilient flag can be 0/off for all frames. // This allows for successful decoding after dropping a set enhancement layer // frames in the sequence. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL1SLDropSetEnhER0) { … } // Check basic rate targeting for CBR, for 3 temporal layers, 3 spatial layers, // with dropping set of enhancement layers (superframe TL 1 and TL2) in middle // of sequence. Test that the error_resilient flag can be 0/off for all frames. // This allows for successful decoding after dropping a set enhancement layer // frames in the sequence. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL3SLDropSetEnhER0) { … } // Check basic rate targeting for CBR, for 3 temporal layers, 1 spatial layer, // with compound prediction on, for pattern with two additional refereces // (golden and altref), both updated on base TLO frames. TEST_P(DatarateTestSVC, BasicRateTargetingSVC3TL1SLMultiRefCompound) { … } // Check basic rate targeting for CBR, for 3 spatial layers, 1 temporal, // with the top spatial layer starting disabled (0 bitrate) and then // dynamically enabled after x frames with nonzero bitrate. TEST_P(DatarateTestSVC, BasicRateTargetingSVC1TL3SLDynEnabl) { … } // Check basic rate targeting for CBR, for 3 spatial layers, 1 temporal, // with the top spatial layer dynamically disabled snd enabled during the // middle of the sequence. TEST_P(DatarateTestSVC, BasicRateTargetingSVC1TL3SLDynDisEnabl) { … } // Check basic rate targeting and encoder/decodermismatch, for RPS // with 1 layer. A number of consecutive frames are lost midway in // sequence, and encoder resorts to a longer term reference to recovery // and continue decoding successfully. TEST_P(DatarateTestSVC, BasicRateTargetingRPS1TL1SLDropFrames) { … } TEST(SvcParams, BitrateOverflow) { … } AV1_INSTANTIATE_TEST_SUITE(…) …; } // namespace } // namespace datarate_test