xref: /aosp_15_r20/external/libvpx/test/vpxdec.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 vpxdec. To add new tests to this file, do the following:
12*fb1b10abSAndroid Build Coastguard Worker##    1. Write a shell function (this is your test).
13*fb1b10abSAndroid Build Coastguard Worker##    2. Add the function to vpxdec_tests (on a new line).
14*fb1b10abSAndroid Build Coastguard Worker##
15*fb1b10abSAndroid Build Coastguard Worker. $(dirname $0)/tools_common.sh
16*fb1b10abSAndroid Build Coastguard Worker
17*fb1b10abSAndroid Build Coastguard Worker# Environment check: Make sure input is available.
18*fb1b10abSAndroid Build Coastguard Workervpxdec_verify_environment() {
19*fb1b10abSAndroid Build Coastguard Worker  if [ ! -e "${VP8_IVF_FILE}" ] || [ ! -e "${VP9_WEBM_FILE}" ] || \
20*fb1b10abSAndroid Build Coastguard Worker    [ ! -e "${VP9_FPM_WEBM_FILE}" ] || \
21*fb1b10abSAndroid Build Coastguard Worker    [ ! -e "${VP9_LT_50_FRAMES_WEBM_FILE}" ] || \
22*fb1b10abSAndroid Build Coastguard Worker    [ ! -e "${VP9_RAW_FILE}" ]; then
23*fb1b10abSAndroid Build Coastguard Worker    elog "Libvpx test data 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 [ -z "$(vpx_tool_path vpxdec)" ]; then
27*fb1b10abSAndroid Build Coastguard Worker    elog "vpxdec not found. It must exist in LIBVPX_BIN_PATH or its parent."
28*fb1b10abSAndroid Build Coastguard Worker    return 1
29*fb1b10abSAndroid Build Coastguard Worker  fi
30*fb1b10abSAndroid Build Coastguard Worker}
31*fb1b10abSAndroid Build Coastguard Worker
32*fb1b10abSAndroid Build Coastguard Worker# Wrapper function for running vpxdec with pipe input. Requires that
33*fb1b10abSAndroid Build Coastguard Worker# LIBVPX_BIN_PATH points to the directory containing vpxdec. $1 is used as the
34*fb1b10abSAndroid Build Coastguard Worker# input file path and shifted away. All remaining parameters are passed through
35*fb1b10abSAndroid Build Coastguard Worker# to vpxdec.
36*fb1b10abSAndroid Build Coastguard Workervpxdec_pipe() {
37*fb1b10abSAndroid Build Coastguard Worker  local decoder="$(vpx_tool_path vpxdec)"
38*fb1b10abSAndroid Build Coastguard Worker  local input="$1"
39*fb1b10abSAndroid Build Coastguard Worker  shift
40*fb1b10abSAndroid Build Coastguard Worker  cat "${input}" | eval "${VPX_TEST_PREFIX}" "${decoder}" - "$@" ${devnull}
41*fb1b10abSAndroid Build Coastguard Worker}
42*fb1b10abSAndroid Build Coastguard Worker
43*fb1b10abSAndroid Build Coastguard Worker# Wrapper function for running vpxdec. Requires that LIBVPX_BIN_PATH points to
44*fb1b10abSAndroid Build Coastguard Worker# the directory containing vpxdec. $1 one is used as the input file path and
45*fb1b10abSAndroid Build Coastguard Worker# shifted away. All remaining parameters are passed through to vpxdec.
46*fb1b10abSAndroid Build Coastguard Workervpxdec() {
47*fb1b10abSAndroid Build Coastguard Worker  local decoder="$(vpx_tool_path vpxdec)"
48*fb1b10abSAndroid Build Coastguard Worker  local input="$1"
49*fb1b10abSAndroid Build Coastguard Worker  shift
50*fb1b10abSAndroid Build Coastguard Worker  eval "${VPX_TEST_PREFIX}" "${decoder}" "$input" "$@" ${devnull}
51*fb1b10abSAndroid Build Coastguard Worker}
52*fb1b10abSAndroid Build Coastguard Worker
53*fb1b10abSAndroid Build Coastguard Workervpxdec_can_decode_vp8() {
54*fb1b10abSAndroid Build Coastguard Worker  if [ "$(vp8_decode_available)" = "yes" ]; then
55*fb1b10abSAndroid Build Coastguard Worker    echo yes
56*fb1b10abSAndroid Build Coastguard Worker  fi
57*fb1b10abSAndroid Build Coastguard Worker}
58*fb1b10abSAndroid Build Coastguard Worker
59*fb1b10abSAndroid Build Coastguard Workervpxdec_can_decode_vp9() {
60*fb1b10abSAndroid Build Coastguard Worker  if [ "$(vp9_decode_available)" = "yes" ]; then
61*fb1b10abSAndroid Build Coastguard Worker    echo yes
62*fb1b10abSAndroid Build Coastguard Worker  fi
63*fb1b10abSAndroid Build Coastguard Worker}
64*fb1b10abSAndroid Build Coastguard Worker
65*fb1b10abSAndroid Build Coastguard Workervpxdec_vp8_ivf() {
66*fb1b10abSAndroid Build Coastguard Worker  if [ "$(vpxdec_can_decode_vp8)" = "yes" ]; then
67*fb1b10abSAndroid Build Coastguard Worker    vpxdec "${VP8_IVF_FILE}" --summary --noblit
68*fb1b10abSAndroid Build Coastguard Worker  fi
69*fb1b10abSAndroid Build Coastguard Worker}
70*fb1b10abSAndroid Build Coastguard Worker
71*fb1b10abSAndroid Build Coastguard Workervpxdec_vp8_ivf_pipe_input() {
72*fb1b10abSAndroid Build Coastguard Worker  if [ "$(vpxdec_can_decode_vp8)" = "yes" ]; then
73*fb1b10abSAndroid Build Coastguard Worker    vpxdec_pipe "${VP8_IVF_FILE}" --summary --noblit
74*fb1b10abSAndroid Build Coastguard Worker  fi
75*fb1b10abSAndroid Build Coastguard Worker}
76*fb1b10abSAndroid Build Coastguard Worker
77*fb1b10abSAndroid Build Coastguard Workervpxdec_vp9_webm() {
78*fb1b10abSAndroid Build Coastguard Worker  if [ "$(vpxdec_can_decode_vp9)" = "yes" ] && \
79*fb1b10abSAndroid Build Coastguard Worker     [ "$(webm_io_available)" = "yes" ]; then
80*fb1b10abSAndroid Build Coastguard Worker    vpxdec "${VP9_WEBM_FILE}" --summary --noblit
81*fb1b10abSAndroid Build Coastguard Worker  fi
82*fb1b10abSAndroid Build Coastguard Worker}
83*fb1b10abSAndroid Build Coastguard Worker
84*fb1b10abSAndroid Build Coastguard Workervpxdec_vp9_webm_frame_parallel() {
85*fb1b10abSAndroid Build Coastguard Worker  if [ "$(vpxdec_can_decode_vp9)" = "yes" ] && \
86*fb1b10abSAndroid Build Coastguard Worker     [ "$(webm_io_available)" = "yes" ]; then
87*fb1b10abSAndroid Build Coastguard Worker    for threads in 2 3 4 5 6 7 8; do
88*fb1b10abSAndroid Build Coastguard Worker      vpxdec "${VP9_FPM_WEBM_FILE}" --summary --noblit --threads=$threads \
89*fb1b10abSAndroid Build Coastguard Worker        --frame-parallel || return 1
90*fb1b10abSAndroid Build Coastguard Worker    done
91*fb1b10abSAndroid Build Coastguard Worker  fi
92*fb1b10abSAndroid Build Coastguard Worker}
93*fb1b10abSAndroid Build Coastguard Worker
94*fb1b10abSAndroid Build Coastguard Workervpxdec_vp9_webm_less_than_50_frames() {
95*fb1b10abSAndroid Build Coastguard Worker  # ensure that reaching eof in webm_guess_framerate doesn't result in invalid
96*fb1b10abSAndroid Build Coastguard Worker  # frames in actual webm_read_frame calls.
97*fb1b10abSAndroid Build Coastguard Worker  if [ "$(vpxdec_can_decode_vp9)" = "yes" ] && \
98*fb1b10abSAndroid Build Coastguard Worker     [ "$(webm_io_available)" = "yes" ]; then
99*fb1b10abSAndroid Build Coastguard Worker    local decoder="$(vpx_tool_path vpxdec)"
100*fb1b10abSAndroid Build Coastguard Worker    local expected=10
101*fb1b10abSAndroid Build Coastguard Worker    local num_frames=$(${VPX_TEST_PREFIX} "${decoder}" \
102*fb1b10abSAndroid Build Coastguard Worker      "${VP9_LT_50_FRAMES_WEBM_FILE}" --summary --noblit 2>&1 \
103*fb1b10abSAndroid Build Coastguard Worker      | awk '/^[0-9]+ decoded frames/ { print $1 }')
104*fb1b10abSAndroid Build Coastguard Worker    if [ "$num_frames" -ne "$expected" ]; then
105*fb1b10abSAndroid Build Coastguard Worker      elog "Output frames ($num_frames) != expected ($expected)"
106*fb1b10abSAndroid Build Coastguard Worker      return 1
107*fb1b10abSAndroid Build Coastguard Worker    fi
108*fb1b10abSAndroid Build Coastguard Worker  fi
109*fb1b10abSAndroid Build Coastguard Worker}
110*fb1b10abSAndroid Build Coastguard Worker
111*fb1b10abSAndroid Build Coastguard Worker# Ensures VP9_RAW_FILE correctly produces 1 frame instead of causing a hang.
112*fb1b10abSAndroid Build Coastguard Workervpxdec_vp9_raw_file() {
113*fb1b10abSAndroid Build Coastguard Worker  # Ensure a raw file properly reports eof and doesn't cause a hang.
114*fb1b10abSAndroid Build Coastguard Worker  if [ "$(vpxdec_can_decode_vp9)" = "yes" ]; then
115*fb1b10abSAndroid Build Coastguard Worker    local decoder="$(vpx_tool_path vpxdec)"
116*fb1b10abSAndroid Build Coastguard Worker    local expected=1
117*fb1b10abSAndroid Build Coastguard Worker    [ -x /usr/bin/timeout ] && local TIMEOUT="/usr/bin/timeout 30s"
118*fb1b10abSAndroid Build Coastguard Worker    local num_frames=$(${TIMEOUT} ${VPX_TEST_PREFIX} "${decoder}" \
119*fb1b10abSAndroid Build Coastguard Worker      "${VP9_RAW_FILE}" --summary --noblit 2>&1 \
120*fb1b10abSAndroid Build Coastguard Worker      | awk '/^[0-9]+ decoded frames/ { print $1 }')
121*fb1b10abSAndroid Build Coastguard Worker    if [ -z "$num_frames" ] || [ "$num_frames" -ne "$expected" ]; then
122*fb1b10abSAndroid Build Coastguard Worker      elog "Output frames ($num_frames) != expected ($expected)"
123*fb1b10abSAndroid Build Coastguard Worker      return 1
124*fb1b10abSAndroid Build Coastguard Worker    fi
125*fb1b10abSAndroid Build Coastguard Worker  fi
126*fb1b10abSAndroid Build Coastguard Worker}
127*fb1b10abSAndroid Build Coastguard Worker
128*fb1b10abSAndroid Build Coastguard Workervpxdec_tests="vpxdec_vp8_ivf
129*fb1b10abSAndroid Build Coastguard Worker              vpxdec_vp8_ivf_pipe_input
130*fb1b10abSAndroid Build Coastguard Worker              vpxdec_vp9_webm
131*fb1b10abSAndroid Build Coastguard Worker              vpxdec_vp9_webm_frame_parallel
132*fb1b10abSAndroid Build Coastguard Worker              vpxdec_vp9_webm_less_than_50_frames
133*fb1b10abSAndroid Build Coastguard Worker              vpxdec_vp9_raw_file"
134*fb1b10abSAndroid Build Coastguard Worker
135*fb1b10abSAndroid Build Coastguard Workerrun_tests vpxdec_verify_environment "${vpxdec_tests}"
136