/* * Copyright (c) 2012 The WebM project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #include "./vpx_config.h" #include "gtest/gtest.h" #include "test/codec_factory.h" #include "test/encode_test_driver.h" #include "test/i420_video_source.h" #include "test/svc_test.h" #include "test/util.h" #include "test/y4m_video_source.h" #include "vp9/common/vp9_onyxc_int.h" #include "vpx/vpx_codec.h" #include "vpx_ports/bitops.h" namespace svc_test { namespace { INTER_LAYER_PRED; class DatarateOnePassCbrSvc : public OnePassCbrSvc { … }; // Params: speed setting. class DatarateOnePassCbrSvcSingleBR : public DatarateOnePassCbrSvc, public ::libvpx_test::CodecTestWithParam<int> { … }; // Check basic rate targeting for 1 pass CBR SVC: 3 spatial layers and 3 // temporal layers, for 4:4:4 Profile 1. TEST_P(DatarateOnePassCbrSvcSingleBR, OnePassCbrSvc3SL3TL444Profile1) { … } // Check basic rate targeting for 1 pass CBR SVC: 2 spatial layers and 3 // temporal layers, for 4:2:2 Profile 1. TEST_P(DatarateOnePassCbrSvcSingleBR, OnePassCbrSvc2SL3TL422Profile1) { … } #if CONFIG_VP9_HIGHBITDEPTH // Check basic rate targeting for 1 pass CBR SVC: 3 spatial layers and 3 // temporal layers, for Profle 2 10bit. TEST_P(DatarateOnePassCbrSvcSingleBR, OnePassCbrSvc3SL3TL10bitProfile2) { … } // Check basic rate targeting for 1 pass CBR SVC: 3 spatial layers and 3 // temporal layers, for Profle 2 12bit. TEST_P(DatarateOnePassCbrSvcSingleBR, OnePassCbrSvc3SL3TL12bitProfile2) { … } #endif // Check basic rate targeting for 1 pass CBR SVC: 2 spatial layers and 1 // temporal layer, with screen content mode on and same speed setting for all // layers. TEST_P(DatarateOnePassCbrSvcSingleBR, OnePassCbrSvc2SL1TLScreenContent1) { … } // Check basic rate targeting for 1 pass CBR SVC: 3 spatial layers and // 3 temporal layers, with force key frame after frame drop TEST_P(DatarateOnePassCbrSvcSingleBR, OnePassCbrSvc3SL3TLForceKey) { … } // Check basic rate targeting for 1 pass CBR SVC: 3 spatial layers and // 2 temporal layers, with a change on the fly from the fixed SVC pattern to one // generate via SVC_SET_REF_FRAME_CONFIG. The new pattern also disables // inter-layer prediction. TEST_P(DatarateOnePassCbrSvcSingleBR, OnePassCbrSvc3SL2TLDynamicPatternChange) { … } // Check basic rate targeting for 1 pass CBR SVC with 3 spatial and 3 temporal // layers, for inter_layer_pred=OffKey (K-SVC) and on the fly switching // of denoiser from off to on (on at frame = 100). Key frame period is set to // 1000 so denoise is enabled on non-key. TEST_P(DatarateOnePassCbrSvcSingleBR, OnePassCbrSvc3SL3TL_DenoiserOffOnFixedLayers) { … } // Check basic rate targeting for 1 pass CBR SVC with 3 spatial and 3 temporal // layers, for inter_layer_pred=OffKey (K-SVC) and on the fly switching // of denoiser from off to on, for dynamic layers. Start at 2 spatial layers // and enable 3rd spatial layer at frame = 100. Use periodic key frame with // period 100 so enabling of spatial layer occurs at key frame. Enable denoiser // at frame > 100, after the key frame sync. TEST_P(DatarateOnePassCbrSvcSingleBR, OnePassCbrSvc3SL3TL_DenoiserOffOnEnableLayers) { … } // Check basic rate targeting for 1 pass CBR SVC with 3 spatial layers and on // the fly switching to 1 and then 2 and back to 3 spatial layers. This switch // is done by setting spatial layer bitrates to 0, and then back to non-zero, // during the sequence. TEST_P(DatarateOnePassCbrSvcSingleBR, OnePassCbrSvc3SL_DisableEnableLayers) { … } // Check basic rate targeting for 1 pass CBR SVC with 2 spatial layers and on // the fly switching to 1 spatial layer with dynamic resize enabled. // The resizer will resize the single layer down and back up again, as the // bitrate goes back up. TEST_P(DatarateOnePassCbrSvcSingleBR, OnePassCbrSvc2SL_SingleLayerResize) { … } // For pass CBR SVC with 1 spatial and 2 temporal layers with dynamic resize // and denoiser enabled. The resizer will resize the single layer down and back // up again, as the bitrate goes back up. TEST_P(DatarateOnePassCbrSvcSingleBR, OnePassCbrSvc1SL2TL_DenoiseResize) { … } // Run SVC encoder for 1 temporal layer, 2 spatial layers, with spatial // downscale 5x5. TEST_P(DatarateOnePassCbrSvcSingleBR, OnePassCbrSvc2SL1TL5x5MultipleRuns) { … } // Params: speed setting and index for bitrate array. class DatarateOnePassCbrSvcMultiBR : public DatarateOnePassCbrSvc, public ::libvpx_test::CodecTestWith2Params<int, int> { … }; // Check basic rate targeting for 1 pass CBR SVC: 2 spatial layers and // 3 temporal layers. Run CIF clip with 1 thread. TEST_P(DatarateOnePassCbrSvcMultiBR, OnePassCbrSvc2SL3TL) { … } // Check basic rate targeting for 1 pass VBR SVC: 2 spatial layers and // 3 temporal layers. Run VGA clip with 1 thread. TEST_P(DatarateOnePassCbrSvcMultiBR, OnePassVbrSvc2SL3TL) { … } // Params: speed setting, layer framedrop control and index for bitrate array. class DatarateOnePassCbrSvcFrameDropMultiBR : public DatarateOnePassCbrSvc, public ::libvpx_test::CodecTestWith3Params<int, int, int> { … }; // Check basic rate targeting for 1 pass CBR SVC: 2 spatial layers and // 3 temporal layers. Run HD clip with 4 threads. TEST_P(DatarateOnePassCbrSvcFrameDropMultiBR, OnePassCbrSvc2SL3TL4Threads) { … } // Check basic rate targeting for 1 pass CBR SVC: 3 spatial layers and // 3 temporal layers. Run HD clip with 4 threads. TEST_P(DatarateOnePassCbrSvcFrameDropMultiBR, OnePassCbrSvc3SL3TL4Threads) { … } // Check basic rate targeting for 1 pass CBR SVC: 3 spatial layers and // 2 temporal layers, for KSVC in flexible mode with no update of reference // frames for all spatial layers on TL > 0 superframes. // Run HD clip with 4 threads. TEST_P(DatarateOnePassCbrSvcFrameDropMultiBR, OnePassCbrSvc3SL2TL4ThKSVCFlex) { … } // Params: speed setting, inter-layer prediction mode. class DatarateOnePassCbrSvcInterLayerPredSingleBR : public DatarateOnePassCbrSvc, public ::libvpx_test::CodecTestWith2Params<int, int> { … }; // Check basic rate targeting with different inter-layer prediction modes for 1 // pass CBR SVC: 3 spatial layers and 3 temporal layers. Run CIF clip with 1 // thread. TEST_P(DatarateOnePassCbrSvcInterLayerPredSingleBR, OnePassCbrSvc3SL3TL) { … } // Check rate targeting with different inter-layer prediction modes for 1 pass // CBR SVC: 3 spatial layers and 3 temporal layers, changing the target bitrate // at the middle of encoding. TEST_P(DatarateOnePassCbrSvcSingleBR, OnePassCbrSvc3SL3TLDynamicBitrateChange) { … } #if CONFIG_VP9_TEMPORAL_DENOISING // Params: speed setting, noise sensitivity, index for bitrate array and inter // layer pred mode. class DatarateOnePassCbrSvcDenoiser : public DatarateOnePassCbrSvc, public ::libvpx_test::CodecTestWith4Params<int, int, int, int> { … }; // Check basic rate targeting for 1 pass CBR SVC with denoising. // 2 spatial layers and 3 temporal layer. Run HD clip with 2 threads. TEST_P(DatarateOnePassCbrSvcDenoiser, OnePassCbrSvc2SL3TLDenoiserOn) { … } #endif // Params: speed setting, key frame dist. class DatarateOnePassCbrSvcSmallKF : public DatarateOnePassCbrSvc, public ::libvpx_test::CodecTestWith2Params<int, int> { … }; // Check basic rate targeting for 1 pass CBR SVC: 3 spatial layers and 3 // temporal layers. Run CIF clip with 1 thread, and few short key frame periods. TEST_P(DatarateOnePassCbrSvcSmallKF, OnePassCbrSvc3SL3TLSmallKf) { … } // Check basic rate targeting for 1 pass CBR SVC: 2 spatial layers and 3 // temporal layers. Run CIF clip with 1 thread, and few short key frame periods. TEST_P(DatarateOnePassCbrSvcSmallKF, OnePassCbrSvc2SL3TLSmallKf) { … } // Check basic rate targeting for 1 pass CBR SVC: 3 spatial layers and 3 // temporal layers. Run VGA clip with 1 thread, and place layer sync frames: // one at middle layer first, then another one for top layer, and another // insert for base spatial layer (which forces key frame). TEST_P(DatarateOnePassCbrSvcSingleBR, OnePassCbrSvc3SL3TLSyncFrames) { … } // Run SVC encoder for 3 spatial layers, 1 temporal layer, with // intra-only frame as sync frame on base spatial layer. // Intra_only is inserted at start and in middle of sequence. TEST_P(DatarateOnePassCbrSvcSingleBR, OnePassCbrSvc3SL1TLSyncWithIntraOnly) { … } // Run SVC encoder for 2 quality layers (same resolution different, // bitrates), 1 temporal layer, with screen content mode. TEST_P(DatarateOnePassCbrSvcSingleBR, OnePassCbrSvc2QL1TLScreen) { … } // Params: speed setting. class DatarateOnePassCbrSvcPostencodeDrop : public DatarateOnePassCbrSvc, public ::libvpx_test::CodecTestWithParam<int> { … }; // Run SVC encoder for 2 quality layers (same resolution different, // bitrates), 1 temporal layer, with screen content mode. TEST_P(DatarateOnePassCbrSvcPostencodeDrop, OnePassCbrSvc2QL1TLScreen) { … } VP9_INSTANTIATE_TEST_SUITE(…); VP9_INSTANTIATE_TEST_SUITE(…); VP9_INSTANTIATE_TEST_SUITE(…) …; VP9_INSTANTIATE_TEST_SUITE(…) …; VP9_INSTANTIATE_TEST_SUITE(…) …; #if CONFIG_VP9_TEMPORAL_DENOISING VP9_INSTANTIATE_TEST_SUITE(…) …; #endif VP9_INSTANTIATE_TEST_SUITE(…) …; } // namespace } // namespace svc_test