Commit 8b83d15d authored by Tom Finegan's avatar Tom Finegan

test/vpxenc.sh: Convert vpxenc() to a simple wrapper.

- Split vpxenc() into vpxenc() and vpxenc_pipe().
- Drop all but one positional param (the input file) in favor
  of passing args directly to vpxenc.
- Add an extra lossless test that explicitly sets min-q and
  max-q to 0.

Change-Id: I7d5f7b495f8b9447388c5f459bc9f6de2214caf2
parent 57de34de
......@@ -15,7 +15,7 @@
##
. $(dirname $0)/tools_common.sh
TEST_FRAMES=10
readonly TEST_FRAMES=10
# Environment check: Make sure input is available.
vpxenc_verify_environment() {
......@@ -41,112 +41,168 @@ vpxenc_can_encode_vp9() {
# Echoes yes to stdout when vpxenc exists according to vpx_tool_available().
vpxenc_available() {
[ -n $(vpx_tool_available vpxenc) ] && echo yes
[ -n "$(vpx_tool_available vpxenc)" ] && echo yes
}
# Wrapper function for running vpxenc. Positional parameters are interpreted as
# follows:
# 1 - codec name
# 2 - input width
# 3 - input height
# 4 - number of frames to encode
# 5 - path to input file
# 6 - path to output file
# Note: The output file path must end in .ivf to output an IVF file.
# 7 - extra flags
# Note: Extra flags currently supports a special case: when set to "-"
# input is piped to vpxenc via cat.
vpxenc() {
local encoder="${LIBVPX_BIN_PATH}/vpxenc${VPX_TEST_EXE_SUFFIX}"
local codec="${1}"
local width=${2}
local height=${3}
local frames=${4}
local input=${5}
local output="${VPX_TEST_OUTPUT_DIR}/${6}"
local extra_flags=${7}
# Because --ivf must be within the command line to get IVF from vpxenc.
if echo "${output}" | egrep -q 'ivf$'; then
use_ivf=--ivf
else
unset use_ivf
fi
if [ "${extra_flags}" = "-" ]; then
pipe_input=yes
extra_flags=${8}
else
unset pipe_input
fi
if [ -z "${pipe_input}" ]; then
eval "${VPX_TEST_PREFIX}" "${encoder}" --codec=${codec} --width=${width} \
--height=${height} --limit=${frames} ${use_ivf} ${extra_flags} \
--output="${output}" "${input}" ${devnull}
else
cat "${input}" \
| eval "${VPX_TEST_PREFIX}" "${encoder}" --codec=${codec} \
--width=${width} --height=${height} --limit=${frames} ${use_ivf} \
${extra_flags} --output="${output}" - ${devnull}
fi
# Wrapper function for running vpxenc with pipe input. Requires that
# LIBVPX_BIN_PATH points to the directory containing vpxenc. $1 is used as the
# input file path and shifted away. All remaining parameters are passed through
# to vpxenc.
vpxenc_pipe() {
local readonly encoder="${LIBVPX_BIN_PATH}/vpxenc${VPX_TEST_EXE_SUFFIX}"
local readonly input="$1"
shift
cat "${input}" | eval "${VPX_TEST_PREFIX}" "${encoder}" - "$@" ${devnull}
}
if [ ! -e "${output}" ]; then
# Return non-zero exit status: output file doesn't exist, so something
# definitely went wrong.
return 1
fi
# Wrapper function for running vpxenc. Requires that LIBVPX_BIN_PATH points to
# the directory containing vpxenc. $1 one is used as the input file path and
# shifted away. All remaining parameters are passed through to vpxenc.
vpxenc() {
local readonly encoder="${LIBVPX_BIN_PATH}/vpxenc${VPX_TEST_EXE_SUFFIX}"
local readonly input="${1}"
shift
eval "${VPX_TEST_PREFIX}" "${encoder}" "$input" "$@" ${devnull}
}
vpxenc_vp8_ivf() {
if [ "$(vpxenc_can_encode_vp8)" = "yes" ]; then
vpxenc vp8 ${YUV_RAW_INPUT_WIDTH} ${YUV_RAW_INPUT_HEIGHT} ${TEST_FRAMES} \
"${YUV_RAW_INPUT}" vp8.ivf
local readonly output="${VPX_TEST_OUTPUT_DIR}/vp8.ivf"
vpxenc --codec=vp8 \
--width="${YUV_RAW_INPUT_WIDTH}" \
--height="${YUV_RAW_INPUT_HEIGHT}" \
--limit="${TEST_FRAMES}" \
--ivf \
--output="${output}" \
"${YUV_RAW_INPUT}"
if [ ! -e "${output}" ]; then
elog "Output file does not exist."
return 1
fi
fi
}
vpxenc_vp8_ivf_pipe_input() {
vpxenc_vp8_ivf_piped_input() {
if [ "$(vpxenc_can_encode_vp8)" = "yes" ]; then
vpxenc vp8 ${YUV_RAW_INPUT_WIDTH} ${YUV_RAW_INPUT_HEIGHT} ${TEST_FRAMES} \
"${YUV_RAW_INPUT}" vp8.ivf -
local readonly output="${VPX_TEST_OUTPUT_DIR}/vp8_piped_input.ivf"
cat "${YUV_RAW_INPUT}" \
| vpxenc --codec=vp8 \
--width="${YUV_RAW_INPUT_WIDTH}" \
--height="${YUV_RAW_INPUT_HEIGHT}" \
--limit="${TEST_FRAMES}" \
--ivf \
--output="${output}" \
-
if [ ! -e "${output}" ]; then
elog "Output file does not exist."
return 1
fi
fi
}
vpxenc_vp8_webm() {
if [ "$(vpxenc_can_encode_vp8)" = "yes" ] &&
[ "$(webm_io_available)" = "yes" ] ; then
vpxenc vp8 ${YUV_RAW_INPUT_WIDTH} ${YUV_RAW_INPUT_HEIGHT} ${TEST_FRAMES} \
"${YUV_RAW_INPUT}" vp8.webm
if [ "$(vpxenc_can_encode_vp8)" = "yes" ] && \
[ "$(webm_io_available)" = "yes" ]; then
local readonly output="${VPX_TEST_OUTPUT_DIR}/vp8.webm"
vpxenc --codec=vp8 \
--width="${YUV_RAW_INPUT_WIDTH}" \
--height="${YUV_RAW_INPUT_HEIGHT}" \
--limit="${TEST_FRAMES}" \
--output="${output}" \
"${YUV_RAW_INPUT}"
if [ ! -e "${output}" ]; then
elog "Output file does not exist."
return 1
fi
fi
}
vpxenc_vp9_ivf() {
if [ "$(vpxenc_can_encode_vp9)" = "yes" ]; then
vpxenc vp9 ${YUV_RAW_INPUT_WIDTH} ${YUV_RAW_INPUT_HEIGHT} ${TEST_FRAMES} \
"${YUV_RAW_INPUT}" vp9.ivf
local readonly output="${VPX_TEST_OUTPUT_DIR}/vp9.ivf"
vpxenc --codec=vp9 \
--width="${YUV_RAW_INPUT_WIDTH}" \
--height="${YUV_RAW_INPUT_HEIGHT}" \
--limit="${TEST_FRAMES}" \
--ivf \
--output="${output}" \
"${YUV_RAW_INPUT}"
if [ ! -e "${output}" ]; then
elog "Output file does not exist."
return 1
fi
fi
}
vpxenc_vp9_webm() {
if [ "$(vpxenc_can_encode_vp9)" = "yes" ] &&
[ "$(webm_io_available)" = "yes" ] ; then
vpxenc vp9 ${YUV_RAW_INPUT_WIDTH} ${YUV_RAW_INPUT_HEIGHT} ${TEST_FRAMES} \
"${YUV_RAW_INPUT}" vp9.webm
if [ "$(vpxenc_can_encode_vp9)" = "yes" ] && \
[ "$(webm_io_available)" = "yes" ]; then
local readonly output="${VPX_TEST_OUTPUT_DIR}/vp9.webm"
vpxenc --codec=vp9 \
--width="${YUV_RAW_INPUT_WIDTH}" \
--height="${YUV_RAW_INPUT_HEIGHT}" \
--limit="${TEST_FRAMES}" \
--output="${output}" \
"${YUV_RAW_INPUT}"
if [ ! -e "${output}" ]; then
elog "Output file does not exist."
return 1
fi
fi
}
vpxenc_vp9_ivf_lossless() {
if [ "$(vpxenc_can_encode_vp9)" = "yes" ]; then
vpxenc vp9 ${YUV_RAW_INPUT_WIDTH} ${YUV_RAW_INPUT_HEIGHT} ${TEST_FRAMES} \
"${YUV_RAW_INPUT}" vp9_lossless.ivf --lossless=1
local readonly output="${VPX_TEST_OUTPUT_DIR}/vp9_lossless.ivf"
vpxenc --codec=vp9 \
--width="${YUV_RAW_INPUT_WIDTH}" \
--height="${YUV_RAW_INPUT_HEIGHT}" \
--limit="${TEST_FRAMES}" \
--ivf \
--output="${output}" \
--lossless=1 \
--test-decode=fatal \
"${YUV_RAW_INPUT}"
if [ ! -e "${output}" ]; then
elog "Output file does not exist."
return 1
fi
fi
}
vpxenc_vp9_ivf_minq0_maxq0() {
if [ "$(vpxenc_can_encode_vp9)" = "yes" ]; then
local readonly output="${VPX_TEST_OUTPUT_DIR}/vp9_lossless_minq0_maxq0.ivf"
vpxenc --codec=vp9 \
--width="${YUV_RAW_INPUT_WIDTH}" \
--height="${YUV_RAW_INPUT_HEIGHT}" \
--limit="${TEST_FRAMES}" \
--ivf \
--output="${output}" \
--min-q=0 \
--max-q=0 \
--test-decode=fatal \
"${YUV_RAW_INPUT}"
if [ ! -e "${output}" ]; then
elog "Output file does not exist."
return 1
fi
fi
}
vpxenc_tests="vpxenc_vp8_ivf
vpxenc_vp8_webm
vpxenc_vp8_ivf_pipe_input
vpxenc_vp8_ivf_piped_input
vpxenc_vp9_ivf
vpxenc_vp9_webm
vpxenc_vp9_ivf_lossless"
vpxenc_vp9_ivf_lossless
vpxenc_vp9_ivf_minq0_maxq0"
run_tests vpxenc_verify_environment "${vpxenc_tests}"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment