193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org/* 293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org * Copyright (c) 2014 The WebM project authors. All Rights Reserved. 393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org * 493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org * Use of this source code is governed by a BSD-style license 593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org * that can be found in the LICENSE file in the root of the source 693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org * tree. An additional intellectual property rights grant can be found 793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org * in the file PATENTS. All contributing project authors may 893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org * be found in the AUTHORS file in the root of the source tree. 993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org */ 1093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#include <climits> 1193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#include <vector> 1293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#include "third_party/googletest/src/include/gtest/gtest.h" 1393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#include "test/codec_factory.h" 1493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#include "test/encode_test_driver.h" 1593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#include "test/i420_video_source.h" 1693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org#include "test/util.h" 1793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 1893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgnamespace { 1993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 2093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgclass ActiveMapTest 2193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org : public ::libvpx_test::EncoderTest, 2293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org public ::libvpx_test::CodecTestWith2Params<libvpx_test::TestMode, int> { 2393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org protected: 2493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org static const int kWidth = 208; 2593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org static const int kHeight = 144; 2693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 2793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org ActiveMapTest() : EncoderTest(GET_PARAM(0)) {} 2893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org virtual ~ActiveMapTest() {} 2993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 3093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org virtual void SetUp() { 3193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org InitializeConfig(); 3293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org SetMode(GET_PARAM(1)); 3393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org cpu_used_ = GET_PARAM(2); 3493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org } 3593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 3693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org virtual void PreEncodeFrameHook(::libvpx_test::VideoSource *video, 3793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org ::libvpx_test::Encoder *encoder) { 3893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org if (video->frame() == 1) { 3993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org encoder->Control(VP8E_SET_CPUUSED, cpu_used_); 4093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org } else if (video->frame() == 3) { 41d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org vpx_active_map_t map = vpx_active_map_t(); 4293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org uint8_t active_map[9 * 13] = { 4393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 4493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 4593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 4693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 4793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 4893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 4993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 5093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 5193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 5293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org }; 5393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org map.cols = (kWidth + 15) / 16; 5493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org map.rows = (kHeight + 15) / 16; 5593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org ASSERT_EQ(map.cols, 13u); 5693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org ASSERT_EQ(map.rows, 9u); 5793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org map.active_map = active_map; 5893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org encoder->Control(VP8E_SET_ACTIVEMAP, &map); 5993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org } else if (video->frame() == 15) { 60d95585fb0ec024f6abd96f7b02e0df58019d46afjohannkoenig@chromium.org vpx_active_map_t map = vpx_active_map_t(); 6193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org map.cols = (kWidth + 15) / 16; 6293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org map.rows = (kHeight + 15) / 16; 6393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org map.active_map = NULL; 6493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org encoder->Control(VP8E_SET_ACTIVEMAP, &map); 6593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org } 6693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org } 6793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 6893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org int cpu_used_; 6993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org}; 7093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 7193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgTEST_P(ActiveMapTest, Test) { 7293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org // Validate that this non multiple of 64 wide clip encodes 7393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org cfg_.g_lag_in_frames = 0; 7493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org cfg_.rc_target_bitrate = 400; 7593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org cfg_.rc_resize_allowed = 0; 7693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org cfg_.g_pass = VPX_RC_ONE_PASS; 7793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org cfg_.rc_end_usage = VPX_CBR; 7893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org cfg_.kf_max_dist = 90000; 7993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 8093a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org ::libvpx_test::I420VideoSource video("hantro_odd.yuv", kWidth, kHeight, 30, 8193a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 1, 0, 20); 8293a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 8393a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org ASSERT_NO_FATAL_FAILURE(RunLoop(&video)); 8493a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org} 8593a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org 8693a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.orgVP9_INSTANTIATE_TEST_CASE(ActiveMapTest, 8793a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org ::testing::Values(::libvpx_test::kRealTime), 8893a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org ::testing::Range(0, 6)); 8993a74791c8e808ea76001ee07693aa2a5fdd3500johannkoenig@chromium.org} // namespace 90