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