xref: /aosp_15_r20/external/libvpx/test/vpxenc.sh (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
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