summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtest/vpxenc.sh200
1 files changed, 128 insertions, 72 deletions
diff --git a/test/vpxenc.sh b/test/vpxenc.sh
index dcfa7f7aa..6e9ad3564 100755
--- a/test/vpxenc.sh
+++ b/test/vpxenc.sh
@@ -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}"