blob: 1cc8e4683318399710263c8f948a4f6aa5e78a0c [file] [log] [blame] [edit]
#!/bin/sh
## Copyright (c) 2021, Alliance for Open Media. All rights reserved
##
## This source code is subject to the terms of the BSD 3-Clause Clear License and the
## Alliance for Open Media Patent License 1.0. If the BSD 3-Clause Clear License was
## not distributed with this source code in the LICENSE file, you can obtain it
## at aomedia.org/license/software-license/bsd-3-c-c/. If the Alliance for Open Media Patent
## License 1.0 was not distributed with this source code in the PATENTS file, you
## can obtain it at aomedia.org/license/patent-license/.
##
## This file tests the libaom bridge frame.
##
. $(dirname $0)/tools_common.sh
Y4M_720P_INPUT_FILE="niklas_1280_720_30.y4m"
Y4M_720P_INPUT="${LIBAOM_TEST_DATA_PATH}/${Y4M_720P_INPUT_FILE}"
#Environment check : $bridge_frame_RAW_INPUT is required.
bridge_frame_tests_verify_environment() {
if [ ! -e "${Y4M_720P_INPUT}" ]; then
elog "Libaom test data must exist in LIBAOM_TEST_DATA_PATH."
return 1
fi
}
#Runs bridge_frame tests using the codec with a frame limit 3
bridge_frame_tests() {
local encoder="$(aom_tool_path aomenc)"
local decoder="$(aom_tool_path aomdec)"
local bridge_frame_total_frames=3
local output_binary="${AOM_TEST_OUTPUT_DIR}/bridge_frame.bin"
local encoder_log="${AOM_TEST_OUTPUT_DIR}/bridge_frame_encoder.log"
local decoder_log="${AOM_TEST_OUTPUT_DIR}/bridge_frame_decoder.log"
local resizemode=5
local qp=160
eval "${encoder}" "${Y4M_720P_INPUT}" --cpu-used=5 \
--passes=1 --lag-in-frames=0 \
--min-gf-interval=16 --max-gf-interval=16 \
--gf-min-pyr-height=4 --gf-max-pyr-height=4 \
--limit="${bridge_frame_total_frames}" \
--kf-min-dist=9999 --kf-max-dist=9999 \
--use-fixed-qp-offsets=1 --deltaq-mode=0 \
--enable-tpl-model=0 --end-usage=q --qp="${qp}" \
--subgop-config-str=ld --enable-keyframe-filtering=0 \
--obu --resize-mode="${resizemode}" \
--test-decode=fatal \
--tile-rows=0 --tile-columns=1 \
--output="${output_binary}" > ${encoder_log} || return 1
if [ ! -e "${output_binary}" ]; then
elog "Bridge frame output binary file does not exist."
return 1
fi
if [ ! -e "${encoder_log}" ]; then
elog "Bridge frame encoder file does not exist."
return 1
fi
local first_resolution="1280x720"
if ! grep -q "${first_resolution}" "${encoder_log}"; then
elog "String '${first_resolution}' not found in '${encoder_log}'."
return 1
fi
local second_resolution="640x360"
if ! grep -q "${second_resolution}" "${encoder_log}"; then
elog "String '${second_resolution}' not found in '${encoder_log}'."
return 1
fi
local third_resolution="320x180"
if ! grep -q "${third_resolution}" "${encoder_log}"; then
elog "String '${third_resolution}' not found in '${encoder_log}'."
return 1
fi
eval "${decoder}" --codec=av1 \
--summary -o /dev/null \
"${output_binary}" > "${decoder_log}" 2>&1 || return 1
if [ ! -e "${decoder_log}" ]; then
elog "Bridge frame decoder file does not exist."
return 1
fi
local decoded_frames="2 decoded frames"
if ! grep -q "${decoded_frames}" "${decoder_log}"; then
elog "String '${decoded_frames}' not found in '${decoder_log}'."
return 1
fi
local decoded_frames="2 showed frames"
if ! grep -q "${decoded_frames}" "${decoder_log}"; then
elog "String '${decoded_frames}' not found in '${decoder_log}'."
return 1
fi
}
bridge_frame_tests_av2() {
if [ "$(av1_encode_available)" = "yes" -a "$(av1_decode_available)" = "yes" ]; then
bridge_frame_tests || return 1
fi
}
bridge_frame_tests = "bridge_frame_tests_av2"
run_tests bridge_frame_tests_verify_environment "${bridge_frame_tests}"