1*fb1b10abSAndroid Build Coastguard Worker#!/bin/sh 2*fb1b10abSAndroid Build Coastguard Worker## 3*fb1b10abSAndroid Build Coastguard Worker## Copyright (c) 2014 The WebM project authors. All Rights Reserved. 4*fb1b10abSAndroid Build Coastguard Worker## 5*fb1b10abSAndroid Build Coastguard Worker## Use of this source code is governed by a BSD-style license 6*fb1b10abSAndroid Build Coastguard Worker## that can be found in the LICENSE file in the root of the source 7*fb1b10abSAndroid Build Coastguard Worker## tree. An additional intellectual property rights grant can be found 8*fb1b10abSAndroid Build Coastguard Worker## in the file PATENTS. All contributing project authors may 9*fb1b10abSAndroid Build Coastguard Worker## be found in the AUTHORS file in the root of the source tree. 10*fb1b10abSAndroid Build Coastguard Worker## 11*fb1b10abSAndroid Build Coastguard Worker## This file tests vpxenc using hantro_collage_w352h288.yuv as input. To add 12*fb1b10abSAndroid Build Coastguard Worker## new tests to this file, do the following: 13*fb1b10abSAndroid Build Coastguard Worker## 1. Write a shell function (this is your test). 14*fb1b10abSAndroid Build Coastguard Worker## 2. Add the function to vpxenc_tests (on a new line). 15*fb1b10abSAndroid Build Coastguard Worker## 16*fb1b10abSAndroid Build Coastguard Worker. $(dirname $0)/tools_common.sh 17*fb1b10abSAndroid Build Coastguard Worker 18*fb1b10abSAndroid Build Coastguard Workerreadonly TEST_FRAMES=10 19*fb1b10abSAndroid Build Coastguard Worker 20*fb1b10abSAndroid Build Coastguard Worker# Environment check: Make sure input is available. 21*fb1b10abSAndroid Build Coastguard Workervpxenc_verify_environment() { 22*fb1b10abSAndroid Build Coastguard Worker if [ ! -e "${YUV_RAW_INPUT}" ]; then 23*fb1b10abSAndroid Build Coastguard Worker elog "The file ${YUV_RAW_INPUT##*/} must exist in LIBVPX_TEST_DATA_PATH." 24*fb1b10abSAndroid Build Coastguard Worker return 1 25*fb1b10abSAndroid Build Coastguard Worker fi 26*fb1b10abSAndroid Build Coastguard Worker if [ "$(vpxenc_can_encode_vp9)" = "yes" ]; then 27*fb1b10abSAndroid Build Coastguard Worker if [ ! -e "${Y4M_NOSQ_PAR_INPUT}" ]; then 28*fb1b10abSAndroid Build Coastguard Worker elog "The file ${Y4M_NOSQ_PAR_INPUT##*/} must exist in" 29*fb1b10abSAndroid Build Coastguard Worker elog "LIBVPX_TEST_DATA_PATH." 30*fb1b10abSAndroid Build Coastguard Worker return 1 31*fb1b10abSAndroid Build Coastguard Worker fi 32*fb1b10abSAndroid Build Coastguard Worker fi 33*fb1b10abSAndroid Build Coastguard Worker if [ -z "$(vpx_tool_path vpxenc)" ]; then 34*fb1b10abSAndroid Build Coastguard Worker elog "vpxenc not found. It must exist in LIBVPX_BIN_PATH or its parent." 35*fb1b10abSAndroid Build Coastguard Worker return 1 36*fb1b10abSAndroid Build Coastguard Worker fi 37*fb1b10abSAndroid Build Coastguard Worker} 38*fb1b10abSAndroid Build Coastguard Worker 39*fb1b10abSAndroid Build Coastguard Workervpxenc_can_encode_vp8() { 40*fb1b10abSAndroid Build Coastguard Worker if [ "$(vp8_encode_available)" = "yes" ]; then 41*fb1b10abSAndroid Build Coastguard Worker echo yes 42*fb1b10abSAndroid Build Coastguard Worker fi 43*fb1b10abSAndroid Build Coastguard Worker} 44*fb1b10abSAndroid Build Coastguard Worker 45*fb1b10abSAndroid Build Coastguard Workervpxenc_can_encode_vp9() { 46*fb1b10abSAndroid Build Coastguard Worker if [ "$(vp9_encode_available)" = "yes" ]; then 47*fb1b10abSAndroid Build Coastguard Worker echo yes 48*fb1b10abSAndroid Build Coastguard Worker fi 49*fb1b10abSAndroid Build Coastguard Worker} 50*fb1b10abSAndroid Build Coastguard Worker 51*fb1b10abSAndroid Build Coastguard Worker# Echo vpxenc command line parameters allowing use of 52*fb1b10abSAndroid Build Coastguard Worker# hantro_collage_w352h288.yuv as input. 53*fb1b10abSAndroid Build Coastguard Workeryuv_input_hantro_collage() { 54*fb1b10abSAndroid Build Coastguard Worker echo ""${YUV_RAW_INPUT}" 55*fb1b10abSAndroid Build Coastguard Worker --width="${YUV_RAW_INPUT_WIDTH}" 56*fb1b10abSAndroid Build Coastguard Worker --height="${YUV_RAW_INPUT_HEIGHT}"" 57*fb1b10abSAndroid Build Coastguard Worker} 58*fb1b10abSAndroid Build Coastguard Worker 59*fb1b10abSAndroid Build Coastguard Workery4m_input_non_square_par() { 60*fb1b10abSAndroid Build Coastguard Worker echo ""${Y4M_NOSQ_PAR_INPUT}"" 61*fb1b10abSAndroid Build Coastguard Worker} 62*fb1b10abSAndroid Build Coastguard Worker 63*fb1b10abSAndroid Build Coastguard Workery4m_input_720p() { 64*fb1b10abSAndroid Build Coastguard Worker echo ""${Y4M_720P_INPUT}"" 65*fb1b10abSAndroid Build Coastguard Worker} 66*fb1b10abSAndroid Build Coastguard Worker 67*fb1b10abSAndroid Build Coastguard Worker# Echo default vpxenc real time encoding params. $1 is the codec, which defaults 68*fb1b10abSAndroid Build Coastguard Worker# to vp8 if unspecified. 69*fb1b10abSAndroid Build Coastguard Workervpxenc_rt_params() { 70*fb1b10abSAndroid Build Coastguard Worker local codec="${1:-vp8}" 71*fb1b10abSAndroid Build Coastguard Worker echo "--codec=${codec} 72*fb1b10abSAndroid Build Coastguard Worker --buf-initial-sz=500 73*fb1b10abSAndroid Build Coastguard Worker --buf-optimal-sz=600 74*fb1b10abSAndroid Build Coastguard Worker --buf-sz=1000 75*fb1b10abSAndroid Build Coastguard Worker --cpu-used=-6 76*fb1b10abSAndroid Build Coastguard Worker --end-usage=cbr 77*fb1b10abSAndroid Build Coastguard Worker --error-resilient=1 78*fb1b10abSAndroid Build Coastguard Worker --kf-max-dist=90000 79*fb1b10abSAndroid Build Coastguard Worker --lag-in-frames=0 80*fb1b10abSAndroid Build Coastguard Worker --max-intra-rate=300 81*fb1b10abSAndroid Build Coastguard Worker --max-q=56 82*fb1b10abSAndroid Build Coastguard Worker --min-q=2 83*fb1b10abSAndroid Build Coastguard Worker --noise-sensitivity=0 84*fb1b10abSAndroid Build Coastguard Worker --overshoot-pct=50 85*fb1b10abSAndroid Build Coastguard Worker --passes=1 86*fb1b10abSAndroid Build Coastguard Worker --profile=0 87*fb1b10abSAndroid Build Coastguard Worker --resize-allowed=0 88*fb1b10abSAndroid Build Coastguard Worker --rt 89*fb1b10abSAndroid Build Coastguard Worker --static-thresh=0 90*fb1b10abSAndroid Build Coastguard Worker --undershoot-pct=50" 91*fb1b10abSAndroid Build Coastguard Worker} 92*fb1b10abSAndroid Build Coastguard Worker 93*fb1b10abSAndroid Build Coastguard Worker# Forces --passes to 1 with CONFIG_REALTIME_ONLY. 94*fb1b10abSAndroid Build Coastguard Workervpxenc_passes_param() { 95*fb1b10abSAndroid Build Coastguard Worker if [ "$(vpx_config_option_enabled CONFIG_REALTIME_ONLY)" = "yes" ]; then 96*fb1b10abSAndroid Build Coastguard Worker echo "--passes=1" 97*fb1b10abSAndroid Build Coastguard Worker else 98*fb1b10abSAndroid Build Coastguard Worker echo "--passes=2" 99*fb1b10abSAndroid Build Coastguard Worker fi 100*fb1b10abSAndroid Build Coastguard Worker} 101*fb1b10abSAndroid Build Coastguard Worker 102*fb1b10abSAndroid Build Coastguard Worker# Wrapper function for running vpxenc with pipe input. Requires that 103*fb1b10abSAndroid Build Coastguard Worker# LIBVPX_BIN_PATH points to the directory containing vpxenc. $1 is used as the 104*fb1b10abSAndroid Build Coastguard Worker# input file path and shifted away. All remaining parameters are passed through 105*fb1b10abSAndroid Build Coastguard Worker# to vpxenc. 106*fb1b10abSAndroid Build Coastguard Workervpxenc_pipe() { 107*fb1b10abSAndroid Build Coastguard Worker local encoder="$(vpx_tool_path vpxenc)" 108*fb1b10abSAndroid Build Coastguard Worker local input="$1" 109*fb1b10abSAndroid Build Coastguard Worker shift 110*fb1b10abSAndroid Build Coastguard Worker cat "${input}" | eval "${VPX_TEST_PREFIX}" "${encoder}" - \ 111*fb1b10abSAndroid Build Coastguard Worker --test-decode=fatal \ 112*fb1b10abSAndroid Build Coastguard Worker "$@" ${devnull} 113*fb1b10abSAndroid Build Coastguard Worker} 114*fb1b10abSAndroid Build Coastguard Worker 115*fb1b10abSAndroid Build Coastguard Worker# Wrapper function for running vpxenc. Requires that LIBVPX_BIN_PATH points to 116*fb1b10abSAndroid Build Coastguard Worker# the directory containing vpxenc. $1 one is used as the input file path and 117*fb1b10abSAndroid Build Coastguard Worker# shifted away. All remaining parameters are passed through to vpxenc. 118*fb1b10abSAndroid Build Coastguard Workervpxenc() { 119*fb1b10abSAndroid Build Coastguard Worker local encoder="$(vpx_tool_path vpxenc)" 120*fb1b10abSAndroid Build Coastguard Worker local input="$1" 121*fb1b10abSAndroid Build Coastguard Worker shift 122*fb1b10abSAndroid Build Coastguard Worker eval "${VPX_TEST_PREFIX}" "${encoder}" "${input}" \ 123*fb1b10abSAndroid Build Coastguard Worker --test-decode=fatal \ 124*fb1b10abSAndroid Build Coastguard Worker "$@" ${devnull} 125*fb1b10abSAndroid Build Coastguard Worker} 126*fb1b10abSAndroid Build Coastguard Worker 127*fb1b10abSAndroid Build Coastguard Workervpxenc_vp8_ivf() { 128*fb1b10abSAndroid Build Coastguard Worker if [ "$(vpxenc_can_encode_vp8)" = "yes" ]; then 129*fb1b10abSAndroid Build Coastguard Worker local output="${VPX_TEST_OUTPUT_DIR}/vp8.ivf" 130*fb1b10abSAndroid Build Coastguard Worker vpxenc $(yuv_input_hantro_collage) \ 131*fb1b10abSAndroid Build Coastguard Worker --codec=vp8 \ 132*fb1b10abSAndroid Build Coastguard Worker --limit="${TEST_FRAMES}" \ 133*fb1b10abSAndroid Build Coastguard Worker --ivf \ 134*fb1b10abSAndroid Build Coastguard Worker --output="${output}" || return 1 135*fb1b10abSAndroid Build Coastguard Worker 136*fb1b10abSAndroid Build Coastguard Worker if [ ! -e "${output}" ]; then 137*fb1b10abSAndroid Build Coastguard Worker elog "Output file does not exist." 138*fb1b10abSAndroid Build Coastguard Worker return 1 139*fb1b10abSAndroid Build Coastguard Worker fi 140*fb1b10abSAndroid Build Coastguard Worker fi 141*fb1b10abSAndroid Build Coastguard Worker} 142*fb1b10abSAndroid Build Coastguard Worker 143*fb1b10abSAndroid Build Coastguard Workervpxenc_vp8_webm() { 144*fb1b10abSAndroid Build Coastguard Worker if [ "$(vpxenc_can_encode_vp8)" = "yes" ] && \ 145*fb1b10abSAndroid Build Coastguard Worker [ "$(webm_io_available)" = "yes" ]; then 146*fb1b10abSAndroid Build Coastguard Worker local output="${VPX_TEST_OUTPUT_DIR}/vp8.webm" 147*fb1b10abSAndroid Build Coastguard Worker vpxenc $(yuv_input_hantro_collage) \ 148*fb1b10abSAndroid Build Coastguard Worker --codec=vp8 \ 149*fb1b10abSAndroid Build Coastguard Worker --limit="${TEST_FRAMES}" \ 150*fb1b10abSAndroid Build Coastguard Worker --output="${output}" || return 1 151*fb1b10abSAndroid Build Coastguard Worker 152*fb1b10abSAndroid Build Coastguard Worker if [ ! -e "${output}" ]; then 153*fb1b10abSAndroid Build Coastguard Worker elog "Output file does not exist." 154*fb1b10abSAndroid Build Coastguard Worker return 1 155*fb1b10abSAndroid Build Coastguard Worker fi 156*fb1b10abSAndroid Build Coastguard Worker fi 157*fb1b10abSAndroid Build Coastguard Worker} 158*fb1b10abSAndroid Build Coastguard Worker 159*fb1b10abSAndroid Build Coastguard Workervpxenc_vp8_webm_rt() { 160*fb1b10abSAndroid Build Coastguard Worker if [ "$(vpxenc_can_encode_vp8)" = "yes" ] && \ 161*fb1b10abSAndroid Build Coastguard Worker [ "$(webm_io_available)" = "yes" ]; then 162*fb1b10abSAndroid Build Coastguard Worker local output="${VPX_TEST_OUTPUT_DIR}/vp8_rt.webm" 163*fb1b10abSAndroid Build Coastguard Worker vpxenc $(yuv_input_hantro_collage) \ 164*fb1b10abSAndroid Build Coastguard Worker $(vpxenc_rt_params vp8) \ 165*fb1b10abSAndroid Build Coastguard Worker --output="${output}" || return 1 166*fb1b10abSAndroid Build Coastguard Worker 167*fb1b10abSAndroid Build Coastguard Worker if [ ! -e "${output}" ]; then 168*fb1b10abSAndroid Build Coastguard Worker elog "Output file does not exist." 169*fb1b10abSAndroid Build Coastguard Worker return 1 170*fb1b10abSAndroid Build Coastguard Worker fi 171*fb1b10abSAndroid Build Coastguard Worker fi 172*fb1b10abSAndroid Build Coastguard Worker} 173*fb1b10abSAndroid Build Coastguard Worker 174*fb1b10abSAndroid Build Coastguard Workervpxenc_vp8_webm_2pass() { 175*fb1b10abSAndroid Build Coastguard Worker if [ "$(vpxenc_can_encode_vp8)" = "yes" ] && \ 176*fb1b10abSAndroid Build Coastguard Worker [ "$(webm_io_available)" = "yes" ]; then 177*fb1b10abSAndroid Build Coastguard Worker local output="${VPX_TEST_OUTPUT_DIR}/vp8.webm" 178*fb1b10abSAndroid Build Coastguard Worker vpxenc $(yuv_input_hantro_collage) \ 179*fb1b10abSAndroid Build Coastguard Worker --codec=vp8 \ 180*fb1b10abSAndroid Build Coastguard Worker --limit="${TEST_FRAMES}" \ 181*fb1b10abSAndroid Build Coastguard Worker --output="${output}" \ 182*fb1b10abSAndroid Build Coastguard Worker --passes=2 || return 1 183*fb1b10abSAndroid Build Coastguard Worker 184*fb1b10abSAndroid Build Coastguard Worker if [ ! -e "${output}" ]; then 185*fb1b10abSAndroid Build Coastguard Worker elog "Output file does not exist." 186*fb1b10abSAndroid Build Coastguard Worker return 1 187*fb1b10abSAndroid Build Coastguard Worker fi 188*fb1b10abSAndroid Build Coastguard Worker fi 189*fb1b10abSAndroid Build Coastguard Worker} 190*fb1b10abSAndroid Build Coastguard Worker 191*fb1b10abSAndroid Build Coastguard Workervpxenc_vp8_webm_lag10_frames20() { 192*fb1b10abSAndroid Build Coastguard Worker if [ "$(vpxenc_can_encode_vp8)" = "yes" ] && \ 193*fb1b10abSAndroid Build Coastguard Worker [ "$(webm_io_available)" = "yes" ]; then 194*fb1b10abSAndroid Build Coastguard Worker local lag_total_frames=20 195*fb1b10abSAndroid Build Coastguard Worker local lag_frames=10 196*fb1b10abSAndroid Build Coastguard Worker local output="${VPX_TEST_OUTPUT_DIR}/vp8_lag10_frames20.webm" 197*fb1b10abSAndroid Build Coastguard Worker vpxenc $(yuv_input_hantro_collage) \ 198*fb1b10abSAndroid Build Coastguard Worker --codec=vp8 \ 199*fb1b10abSAndroid Build Coastguard Worker --limit="${lag_total_frames}" \ 200*fb1b10abSAndroid Build Coastguard Worker --lag-in-frames="${lag_frames}" \ 201*fb1b10abSAndroid Build Coastguard Worker --output="${output}" \ 202*fb1b10abSAndroid Build Coastguard Worker --auto-alt-ref=1 \ 203*fb1b10abSAndroid Build Coastguard Worker --passes=2 || return 1 204*fb1b10abSAndroid Build Coastguard Worker 205*fb1b10abSAndroid Build Coastguard Worker if [ ! -e "${output}" ]; then 206*fb1b10abSAndroid Build Coastguard Worker elog "Output file does not exist." 207*fb1b10abSAndroid Build Coastguard Worker return 1 208*fb1b10abSAndroid Build Coastguard Worker fi 209*fb1b10abSAndroid Build Coastguard Worker fi 210*fb1b10abSAndroid Build Coastguard Worker} 211*fb1b10abSAndroid Build Coastguard Worker 212*fb1b10abSAndroid Build Coastguard Workervpxenc_vp8_ivf_piped_input() { 213*fb1b10abSAndroid Build Coastguard Worker if [ "$(vpxenc_can_encode_vp8)" = "yes" ]; then 214*fb1b10abSAndroid Build Coastguard Worker local output="${VPX_TEST_OUTPUT_DIR}/vp8_piped_input.ivf" 215*fb1b10abSAndroid Build Coastguard Worker vpxenc_pipe $(yuv_input_hantro_collage) \ 216*fb1b10abSAndroid Build Coastguard Worker --codec=vp8 \ 217*fb1b10abSAndroid Build Coastguard Worker --limit="${TEST_FRAMES}" \ 218*fb1b10abSAndroid Build Coastguard Worker --ivf \ 219*fb1b10abSAndroid Build Coastguard Worker --output="${output}" || return 1 220*fb1b10abSAndroid Build Coastguard Worker 221*fb1b10abSAndroid Build Coastguard Worker if [ ! -e "${output}" ]; then 222*fb1b10abSAndroid Build Coastguard Worker elog "Output file does not exist." 223*fb1b10abSAndroid Build Coastguard Worker return 1 224*fb1b10abSAndroid Build Coastguard Worker fi 225*fb1b10abSAndroid Build Coastguard Worker fi 226*fb1b10abSAndroid Build Coastguard Worker} 227*fb1b10abSAndroid Build Coastguard Worker 228*fb1b10abSAndroid Build Coastguard Workervpxenc_vp9_ivf() { 229*fb1b10abSAndroid Build Coastguard Worker if [ "$(vpxenc_can_encode_vp9)" = "yes" ]; then 230*fb1b10abSAndroid Build Coastguard Worker local output="${VPX_TEST_OUTPUT_DIR}/vp9.ivf" 231*fb1b10abSAndroid Build Coastguard Worker local passes=$(vpxenc_passes_param) 232*fb1b10abSAndroid Build Coastguard Worker vpxenc $(yuv_input_hantro_collage) \ 233*fb1b10abSAndroid Build Coastguard Worker --codec=vp9 \ 234*fb1b10abSAndroid Build Coastguard Worker --limit="${TEST_FRAMES}" \ 235*fb1b10abSAndroid Build Coastguard Worker "${passes}" \ 236*fb1b10abSAndroid Build Coastguard Worker --ivf \ 237*fb1b10abSAndroid Build Coastguard Worker --output="${output}" || return 1 238*fb1b10abSAndroid Build Coastguard Worker 239*fb1b10abSAndroid Build Coastguard Worker if [ ! -e "${output}" ]; then 240*fb1b10abSAndroid Build Coastguard Worker elog "Output file does not exist." 241*fb1b10abSAndroid Build Coastguard Worker return 1 242*fb1b10abSAndroid Build Coastguard Worker fi 243*fb1b10abSAndroid Build Coastguard Worker fi 244*fb1b10abSAndroid Build Coastguard Worker} 245*fb1b10abSAndroid Build Coastguard Worker 246*fb1b10abSAndroid Build Coastguard Workervpxenc_vp9_webm() { 247*fb1b10abSAndroid Build Coastguard Worker if [ "$(vpxenc_can_encode_vp9)" = "yes" ] && \ 248*fb1b10abSAndroid Build Coastguard Worker [ "$(webm_io_available)" = "yes" ]; then 249*fb1b10abSAndroid Build Coastguard Worker local output="${VPX_TEST_OUTPUT_DIR}/vp9.webm" 250*fb1b10abSAndroid Build Coastguard Worker local passes=$(vpxenc_passes_param) 251*fb1b10abSAndroid Build Coastguard Worker vpxenc $(yuv_input_hantro_collage) \ 252*fb1b10abSAndroid Build Coastguard Worker --codec=vp9 \ 253*fb1b10abSAndroid Build Coastguard Worker --limit="${TEST_FRAMES}" \ 254*fb1b10abSAndroid Build Coastguard Worker "${passes}" \ 255*fb1b10abSAndroid Build Coastguard Worker --output="${output}" || return 1 256*fb1b10abSAndroid Build Coastguard Worker 257*fb1b10abSAndroid Build Coastguard Worker if [ ! -e "${output}" ]; then 258*fb1b10abSAndroid Build Coastguard Worker elog "Output file does not exist." 259*fb1b10abSAndroid Build Coastguard Worker return 1 260*fb1b10abSAndroid Build Coastguard Worker fi 261*fb1b10abSAndroid Build Coastguard Worker fi 262*fb1b10abSAndroid Build Coastguard Worker} 263*fb1b10abSAndroid Build Coastguard Worker 264*fb1b10abSAndroid Build Coastguard Workervpxenc_vp9_webm_rt() { 265*fb1b10abSAndroid Build Coastguard Worker if [ "$(vpxenc_can_encode_vp9)" = "yes" ] && \ 266*fb1b10abSAndroid Build Coastguard Worker [ "$(webm_io_available)" = "yes" ]; then 267*fb1b10abSAndroid Build Coastguard Worker local output="${VPX_TEST_OUTPUT_DIR}/vp9_rt.webm" 268*fb1b10abSAndroid Build Coastguard Worker vpxenc $(yuv_input_hantro_collage) \ 269*fb1b10abSAndroid Build Coastguard Worker $(vpxenc_rt_params vp9) \ 270*fb1b10abSAndroid Build Coastguard Worker --output="${output}" || return 1 271*fb1b10abSAndroid Build Coastguard Worker 272*fb1b10abSAndroid Build Coastguard Worker if [ ! -e "${output}" ]; then 273*fb1b10abSAndroid Build Coastguard Worker elog "Output file does not exist." 274*fb1b10abSAndroid Build Coastguard Worker return 1 275*fb1b10abSAndroid Build Coastguard Worker fi 276*fb1b10abSAndroid Build Coastguard Worker fi 277*fb1b10abSAndroid Build Coastguard Worker} 278*fb1b10abSAndroid Build Coastguard Worker 279*fb1b10abSAndroid Build Coastguard Workervpxenc_vp9_webm_rt_multithread_tiled() { 280*fb1b10abSAndroid Build Coastguard Worker if [ "$(vpxenc_can_encode_vp9)" = "yes" ] && \ 281*fb1b10abSAndroid Build Coastguard Worker [ "$(webm_io_available)" = "yes" ]; then 282*fb1b10abSAndroid Build Coastguard Worker local output="${VPX_TEST_OUTPUT_DIR}/vp9_rt_multithread_tiled.webm" 283*fb1b10abSAndroid Build Coastguard Worker local tilethread_min=2 284*fb1b10abSAndroid Build Coastguard Worker local tilethread_max=4 285*fb1b10abSAndroid Build Coastguard Worker local num_threads="$(seq ${tilethread_min} ${tilethread_max})" 286*fb1b10abSAndroid Build Coastguard Worker local num_tile_cols="$(seq ${tilethread_min} ${tilethread_max})" 287*fb1b10abSAndroid Build Coastguard Worker 288*fb1b10abSAndroid Build Coastguard Worker for threads in ${num_threads}; do 289*fb1b10abSAndroid Build Coastguard Worker for tile_cols in ${num_tile_cols}; do 290*fb1b10abSAndroid Build Coastguard Worker vpxenc $(y4m_input_720p) \ 291*fb1b10abSAndroid Build Coastguard Worker $(vpxenc_rt_params vp9) \ 292*fb1b10abSAndroid Build Coastguard Worker --threads=${threads} \ 293*fb1b10abSAndroid Build Coastguard Worker --tile-columns=${tile_cols} \ 294*fb1b10abSAndroid Build Coastguard Worker --output="${output}" || return 1 295*fb1b10abSAndroid Build Coastguard Worker 296*fb1b10abSAndroid Build Coastguard Worker if [ ! -e "${output}" ]; then 297*fb1b10abSAndroid Build Coastguard Worker elog "Output file does not exist." 298*fb1b10abSAndroid Build Coastguard Worker return 1 299*fb1b10abSAndroid Build Coastguard Worker fi 300*fb1b10abSAndroid Build Coastguard Worker rm "${output}" 301*fb1b10abSAndroid Build Coastguard Worker done 302*fb1b10abSAndroid Build Coastguard Worker done 303*fb1b10abSAndroid Build Coastguard Worker fi 304*fb1b10abSAndroid Build Coastguard Worker} 305*fb1b10abSAndroid Build Coastguard Worker 306*fb1b10abSAndroid Build Coastguard Workervpxenc_vp9_webm_rt_multithread_tiled_frameparallel() { 307*fb1b10abSAndroid Build Coastguard Worker if [ "$(vpxenc_can_encode_vp9)" = "yes" ] && \ 308*fb1b10abSAndroid Build Coastguard Worker [ "$(webm_io_available)" = "yes" ]; then 309*fb1b10abSAndroid Build Coastguard Worker local output="${VPX_TEST_OUTPUT_DIR}/vp9_rt_mt_t_fp.webm" 310*fb1b10abSAndroid Build Coastguard Worker local tilethread_min=2 311*fb1b10abSAndroid Build Coastguard Worker local tilethread_max=4 312*fb1b10abSAndroid Build Coastguard Worker local num_threads="$(seq ${tilethread_min} ${tilethread_max})" 313*fb1b10abSAndroid Build Coastguard Worker local num_tile_cols="$(seq ${tilethread_min} ${tilethread_max})" 314*fb1b10abSAndroid Build Coastguard Worker 315*fb1b10abSAndroid Build Coastguard Worker for threads in ${num_threads}; do 316*fb1b10abSAndroid Build Coastguard Worker for tile_cols in ${num_tile_cols}; do 317*fb1b10abSAndroid Build Coastguard Worker vpxenc $(y4m_input_720p) \ 318*fb1b10abSAndroid Build Coastguard Worker $(vpxenc_rt_params vp9) \ 319*fb1b10abSAndroid Build Coastguard Worker --threads=${threads} \ 320*fb1b10abSAndroid Build Coastguard Worker --tile-columns=${tile_cols} \ 321*fb1b10abSAndroid Build Coastguard Worker --frame-parallel=1 \ 322*fb1b10abSAndroid Build Coastguard Worker --output="${output}" || return 1 323*fb1b10abSAndroid Build Coastguard Worker 324*fb1b10abSAndroid Build Coastguard Worker if [ ! -e "${output}" ]; then 325*fb1b10abSAndroid Build Coastguard Worker elog "Output file does not exist." 326*fb1b10abSAndroid Build Coastguard Worker return 1 327*fb1b10abSAndroid Build Coastguard Worker fi 328*fb1b10abSAndroid Build Coastguard Worker rm "${output}" 329*fb1b10abSAndroid Build Coastguard Worker done 330*fb1b10abSAndroid Build Coastguard Worker done 331*fb1b10abSAndroid Build Coastguard Worker fi 332*fb1b10abSAndroid Build Coastguard Worker} 333*fb1b10abSAndroid Build Coastguard Worker 334*fb1b10abSAndroid Build Coastguard Workervpxenc_vp9_webm_2pass() { 335*fb1b10abSAndroid Build Coastguard Worker if [ "$(vpxenc_can_encode_vp9)" = "yes" ] && \ 336*fb1b10abSAndroid Build Coastguard Worker [ "$(webm_io_available)" = "yes" ]; then 337*fb1b10abSAndroid Build Coastguard Worker local output="${VPX_TEST_OUTPUT_DIR}/vp9.webm" 338*fb1b10abSAndroid Build Coastguard Worker vpxenc $(yuv_input_hantro_collage) \ 339*fb1b10abSAndroid Build Coastguard Worker --codec=vp9 \ 340*fb1b10abSAndroid Build Coastguard Worker --limit="${TEST_FRAMES}" \ 341*fb1b10abSAndroid Build Coastguard Worker --output="${output}" \ 342*fb1b10abSAndroid Build Coastguard Worker --passes=2 || return 1 343*fb1b10abSAndroid Build Coastguard Worker 344*fb1b10abSAndroid Build Coastguard Worker if [ ! -e "${output}" ]; then 345*fb1b10abSAndroid Build Coastguard Worker elog "Output file does not exist." 346*fb1b10abSAndroid Build Coastguard Worker return 1 347*fb1b10abSAndroid Build Coastguard Worker fi 348*fb1b10abSAndroid Build Coastguard Worker fi 349*fb1b10abSAndroid Build Coastguard Worker} 350*fb1b10abSAndroid Build Coastguard Worker 351*fb1b10abSAndroid Build Coastguard Workervpxenc_vp9_ivf_lossless() { 352*fb1b10abSAndroid Build Coastguard Worker if [ "$(vpxenc_can_encode_vp9)" = "yes" ]; then 353*fb1b10abSAndroid Build Coastguard Worker local output="${VPX_TEST_OUTPUT_DIR}/vp9_lossless.ivf" 354*fb1b10abSAndroid Build Coastguard Worker local passes=$(vpxenc_passes_param) 355*fb1b10abSAndroid Build Coastguard Worker vpxenc $(yuv_input_hantro_collage) \ 356*fb1b10abSAndroid Build Coastguard Worker --codec=vp9 \ 357*fb1b10abSAndroid Build Coastguard Worker --limit="${TEST_FRAMES}" \ 358*fb1b10abSAndroid Build Coastguard Worker --ivf \ 359*fb1b10abSAndroid Build Coastguard Worker --output="${output}" \ 360*fb1b10abSAndroid Build Coastguard Worker "${passes}" \ 361*fb1b10abSAndroid Build Coastguard Worker --lossless=1 || return 1 362*fb1b10abSAndroid Build Coastguard Worker 363*fb1b10abSAndroid Build Coastguard Worker if [ ! -e "${output}" ]; then 364*fb1b10abSAndroid Build Coastguard Worker elog "Output file does not exist." 365*fb1b10abSAndroid Build Coastguard Worker return 1 366*fb1b10abSAndroid Build Coastguard Worker fi 367*fb1b10abSAndroid Build Coastguard Worker fi 368*fb1b10abSAndroid Build Coastguard Worker} 369*fb1b10abSAndroid Build Coastguard Worker 370*fb1b10abSAndroid Build Coastguard Workervpxenc_vp9_ivf_minq0_maxq0() { 371*fb1b10abSAndroid Build Coastguard Worker if [ "$(vpxenc_can_encode_vp9)" = "yes" ]; then 372*fb1b10abSAndroid Build Coastguard Worker local output="${VPX_TEST_OUTPUT_DIR}/vp9_lossless_minq0_maxq0.ivf" 373*fb1b10abSAndroid Build Coastguard Worker local passes=$(vpxenc_passes_param) 374*fb1b10abSAndroid Build Coastguard Worker vpxenc $(yuv_input_hantro_collage) \ 375*fb1b10abSAndroid Build Coastguard Worker --codec=vp9 \ 376*fb1b10abSAndroid Build Coastguard Worker --limit="${TEST_FRAMES}" \ 377*fb1b10abSAndroid Build Coastguard Worker --ivf \ 378*fb1b10abSAndroid Build Coastguard Worker --output="${output}" \ 379*fb1b10abSAndroid Build Coastguard Worker "${passes}" \ 380*fb1b10abSAndroid Build Coastguard Worker --min-q=0 \ 381*fb1b10abSAndroid Build Coastguard Worker --max-q=0 || return 1 382*fb1b10abSAndroid Build Coastguard Worker 383*fb1b10abSAndroid Build Coastguard Worker if [ ! -e "${output}" ]; then 384*fb1b10abSAndroid Build Coastguard Worker elog "Output file does not exist." 385*fb1b10abSAndroid Build Coastguard Worker return 1 386*fb1b10abSAndroid Build Coastguard Worker fi 387*fb1b10abSAndroid Build Coastguard Worker fi 388*fb1b10abSAndroid Build Coastguard Worker} 389*fb1b10abSAndroid Build Coastguard Worker 390*fb1b10abSAndroid Build Coastguard Workervpxenc_vp9_webm_lag10_frames20() { 391*fb1b10abSAndroid Build Coastguard Worker if [ "$(vpxenc_can_encode_vp9)" = "yes" ] && \ 392*fb1b10abSAndroid Build Coastguard Worker [ "$(webm_io_available)" = "yes" ]; then 393*fb1b10abSAndroid Build Coastguard Worker local lag_total_frames=20 394*fb1b10abSAndroid Build Coastguard Worker local lag_frames=10 395*fb1b10abSAndroid Build Coastguard Worker local output="${VPX_TEST_OUTPUT_DIR}/vp9_lag10_frames20.webm" 396*fb1b10abSAndroid Build Coastguard Worker local passes=$(vpxenc_passes_param) 397*fb1b10abSAndroid Build Coastguard Worker vpxenc $(yuv_input_hantro_collage) \ 398*fb1b10abSAndroid Build Coastguard Worker --codec=vp9 \ 399*fb1b10abSAndroid Build Coastguard Worker --limit="${lag_total_frames}" \ 400*fb1b10abSAndroid Build Coastguard Worker --lag-in-frames="${lag_frames}" \ 401*fb1b10abSAndroid Build Coastguard Worker --output="${output}" \ 402*fb1b10abSAndroid Build Coastguard Worker "${passes}" \ 403*fb1b10abSAndroid Build Coastguard Worker --auto-alt-ref=1 || return 1 404*fb1b10abSAndroid Build Coastguard Worker 405*fb1b10abSAndroid Build Coastguard Worker if [ ! -e "${output}" ]; then 406*fb1b10abSAndroid Build Coastguard Worker elog "Output file does not exist." 407*fb1b10abSAndroid Build Coastguard Worker return 1 408*fb1b10abSAndroid Build Coastguard Worker fi 409*fb1b10abSAndroid Build Coastguard Worker fi 410*fb1b10abSAndroid Build Coastguard Worker} 411*fb1b10abSAndroid Build Coastguard Worker 412*fb1b10abSAndroid Build Coastguard Worker# TODO(fgalligan): Test that DisplayWidth is different than video width. 413*fb1b10abSAndroid Build Coastguard Workervpxenc_vp9_webm_non_square_par() { 414*fb1b10abSAndroid Build Coastguard Worker if [ "$(vpxenc_can_encode_vp9)" = "yes" ] && \ 415*fb1b10abSAndroid Build Coastguard Worker [ "$(webm_io_available)" = "yes" ]; then 416*fb1b10abSAndroid Build Coastguard Worker local output="${VPX_TEST_OUTPUT_DIR}/vp9_non_square_par.webm" 417*fb1b10abSAndroid Build Coastguard Worker local passes=$(vpxenc_passes_param) 418*fb1b10abSAndroid Build Coastguard Worker vpxenc $(y4m_input_non_square_par) \ 419*fb1b10abSAndroid Build Coastguard Worker --codec=vp9 \ 420*fb1b10abSAndroid Build Coastguard Worker --limit="${TEST_FRAMES}" \ 421*fb1b10abSAndroid Build Coastguard Worker "${passes}" \ 422*fb1b10abSAndroid Build Coastguard Worker --output="${output}" || return 1 423*fb1b10abSAndroid Build Coastguard Worker 424*fb1b10abSAndroid Build Coastguard Worker if [ ! -e "${output}" ]; then 425*fb1b10abSAndroid Build Coastguard Worker elog "Output file does not exist." 426*fb1b10abSAndroid Build Coastguard Worker return 1 427*fb1b10abSAndroid Build Coastguard Worker fi 428*fb1b10abSAndroid Build Coastguard Worker fi 429*fb1b10abSAndroid Build Coastguard Worker} 430*fb1b10abSAndroid Build Coastguard Worker 431*fb1b10abSAndroid Build Coastguard Workervpxenc_vp9_webm_sharpness() { 432*fb1b10abSAndroid Build Coastguard Worker if [ "$(vpxenc_can_encode_vp9)" = "yes" ]; then 433*fb1b10abSAndroid Build Coastguard Worker local sharpnesses="0 1 2 3 4 5 6 7" 434*fb1b10abSAndroid Build Coastguard Worker local output="${VPX_TEST_OUTPUT_DIR}/vpxenc_vp9_webm_sharpness.ivf" 435*fb1b10abSAndroid Build Coastguard Worker local last_size=0 436*fb1b10abSAndroid Build Coastguard Worker local this_size=0 437*fb1b10abSAndroid Build Coastguard Worker 438*fb1b10abSAndroid Build Coastguard Worker for sharpness in ${sharpnesses}; do 439*fb1b10abSAndroid Build Coastguard Worker 440*fb1b10abSAndroid Build Coastguard Worker vpxenc $(yuv_input_hantro_collage) \ 441*fb1b10abSAndroid Build Coastguard Worker --sharpness="${sharpness}" \ 442*fb1b10abSAndroid Build Coastguard Worker --codec=vp9 \ 443*fb1b10abSAndroid Build Coastguard Worker --limit=1 \ 444*fb1b10abSAndroid Build Coastguard Worker --cpu-used=2 \ 445*fb1b10abSAndroid Build Coastguard Worker --end-usage=q \ 446*fb1b10abSAndroid Build Coastguard Worker --cq-level=40 \ 447*fb1b10abSAndroid Build Coastguard Worker --output="${output}" \ 448*fb1b10abSAndroid Build Coastguard Worker "${passes}" || return 1 449*fb1b10abSAndroid Build Coastguard Worker 450*fb1b10abSAndroid Build Coastguard Worker if [ ! -e "${output}" ]; then 451*fb1b10abSAndroid Build Coastguard Worker elog "Output file does not exist." 452*fb1b10abSAndroid Build Coastguard Worker return 1 453*fb1b10abSAndroid Build Coastguard Worker fi 454*fb1b10abSAndroid Build Coastguard Worker 455*fb1b10abSAndroid Build Coastguard Worker this_size=$(stat -c '%s' "${output}") 456*fb1b10abSAndroid Build Coastguard Worker if [ "${this_size}" -lt "${last_size}" ]; then 457*fb1b10abSAndroid Build Coastguard Worker elog "Higher sharpness value yielded lower file size." 458*fb1b10abSAndroid Build Coastguard Worker echo "${this_size}" " < " "${last_size}" 459*fb1b10abSAndroid Build Coastguard Worker return 1 460*fb1b10abSAndroid Build Coastguard Worker fi 461*fb1b10abSAndroid Build Coastguard Worker last_size="${this_size}" 462*fb1b10abSAndroid Build Coastguard Worker 463*fb1b10abSAndroid Build Coastguard Worker done 464*fb1b10abSAndroid Build Coastguard Worker fi 465*fb1b10abSAndroid Build Coastguard Worker} 466*fb1b10abSAndroid Build Coastguard Worker 467*fb1b10abSAndroid Build Coastguard Workervpxenc_tests="vpxenc_vp8_ivf 468*fb1b10abSAndroid Build Coastguard Worker vpxenc_vp8_webm 469*fb1b10abSAndroid Build Coastguard Worker vpxenc_vp8_webm_rt 470*fb1b10abSAndroid Build Coastguard Worker vpxenc_vp8_ivf_piped_input 471*fb1b10abSAndroid Build Coastguard Worker vpxenc_vp9_ivf 472*fb1b10abSAndroid Build Coastguard Worker vpxenc_vp9_webm 473*fb1b10abSAndroid Build Coastguard Worker vpxenc_vp9_webm_rt 474*fb1b10abSAndroid Build Coastguard Worker vpxenc_vp9_webm_rt_multithread_tiled 475*fb1b10abSAndroid Build Coastguard Worker vpxenc_vp9_webm_rt_multithread_tiled_frameparallel 476*fb1b10abSAndroid Build Coastguard Worker vpxenc_vp9_ivf_lossless 477*fb1b10abSAndroid Build Coastguard Worker vpxenc_vp9_ivf_minq0_maxq0 478*fb1b10abSAndroid Build Coastguard Worker vpxenc_vp9_webm_lag10_frames20 479*fb1b10abSAndroid Build Coastguard Worker vpxenc_vp9_webm_non_square_par 480*fb1b10abSAndroid Build Coastguard Worker vpxenc_vp9_webm_sharpness" 481*fb1b10abSAndroid Build Coastguard Worker 482*fb1b10abSAndroid Build Coastguard Workerif [ "$(vpx_config_option_enabled CONFIG_REALTIME_ONLY)" != "yes" ]; then 483*fb1b10abSAndroid Build Coastguard Worker vpxenc_tests="$vpxenc_tests 484*fb1b10abSAndroid Build Coastguard Worker vpxenc_vp8_webm_2pass 485*fb1b10abSAndroid Build Coastguard Worker vpxenc_vp8_webm_lag10_frames20 486*fb1b10abSAndroid Build Coastguard Worker vpxenc_vp9_webm_2pass" 487*fb1b10abSAndroid Build Coastguard Workerfi 488*fb1b10abSAndroid Build Coastguard Worker 489*fb1b10abSAndroid Build Coastguard Workerrun_tests vpxenc_verify_environment "${vpxenc_tests}" 490