blob: 4d697e2c5de18ca64bbf256aa75231c3fd1221d1 [file] [log] [blame] [edit]
#!/bin/bash
#
# Script to encode two bitstreams, mux them, and demux the muxed bitstream
#
. $(dirname $0)/tools_common.sh
# Input video file
# Generated bitstream files
readonly BITSTREAM_0="${AOM_TEST_OUTPUT_DIR}/bitstream_0.bin"
readonly BITSTREAM_1="${AOM_TEST_OUTPUT_DIR}/bitstream_1.bin"
# Output filesd
readonly MUXED_OUTPUT="${AOM_TEST_OUTPUT_DIR}/bitstream_muxed_01.bin"
readonly DEMUXED_OUTPUT="${AOM_TEST_OUTPUT_DIR}/bitstream_demuxed.bin"
readonly DEMUXED_OUTPUT_0="${AOM_TEST_OUTPUT_DIR}/bitstream_demuxed_0.bin"
readonly DEMUXED_OUTPUT_1="${AOM_TEST_OUTPUT_DIR}/bitstream_demuxed_1.bin"
# Verify environment and prerequisites
mux_demux_verify_environment() {
if [ ! -e "${YUV_RAW_INPUT}" ]; then
elog "The file ${YUV_RAW_INPUT##*/} must exist in LIBAOM_TEST_DATA_PATH."
return 1
fi
if [ -z "$(aom_tool_path aomenc)" ]; then
elog "aomenc not found in LIBAOM_BIN_PATH or tools/."
return 1
fi
if [ -z "$(aom_tool_path stream_multiplexer)" ]; then
elog "stream_multiplexer not found in LIBAOM_BIN_PATH or tools/."
return 1
fi
if [ -z "$(aom_tool_path stream_demuxer)" ]; then
elog "stream_demuxer not found in LIBAOM_BIN_PATH or tools/."
return 1
fi
}
# Encode first bitstream
encode_bitstream_0() {
local encoder="$(aom_tool_path aomenc)"
eval "${encoder}" \
$(aomenc_encode_test_fast_params) \
$(yuv_raw_input) \
--obu \
--output=${BITSTREAM_0} \
${devnull} || return 1
if [ ! -e "${BITSTREAM_0}" ]; then
elog "Encoding bitstream_0 failed."
return 1
fi
echo "Successfully encoded bitstream_0.bin"
}
# Encode second bitstream
encode_bitstream_1() {
local encoder="$(aom_tool_path aomenc)"
eval "${encoder}" \
$(aomenc_encode_test_fast_params) \
$(yuv_raw_input) \
--obu \
--output=${BITSTREAM_1} \
${devnull} || return 1
if [ ! -e "${BITSTREAM_1}" ]; then
elog "Encoding bitstream_1 failed."
return 1
fi
echo "Successfully encoded bitstream_1.bin"
}
# Mux the bitstreams
mux_bitstreams() {
local multiplexer="$(aom_tool_path stream_multiplexer)"
eval "${multiplexer}" \
"${BITSTREAM_0}" 0 1 \
"${BITSTREAM_1}" 1 1 \
"${MUXED_OUTPUT}" \
${devnull} || return 1
if [ ! -e "${MUXED_OUTPUT}" ]; then
elog "Bitstream muxing failed."
return 1
fi
echo "Successfully muxed bitstreams to bitstream_muxed_0123.bin"
}
# Demux the muxed bitstream
demux_bitstream() {
local demultiplexer="$(aom_tool_path stream_demuxer)"
# Demux to first output
eval "${demultiplexer}" \
"${MUXED_OUTPUT}" \
"${DEMUXED_OUTPUT}" \
${devnull} || return 1
if [ ! -e "${DEMUXED_OUTPUT_0}" ]; then
elog "Bitstream demuxing to output 0 failed."
return 1
fi
echo "Successfully demuxed bitstream to bitstream_demuxed_0.bin"
if [ ! -e "${DEMUXED_OUTPUT_1}" ]; then
elog "Bitstream demuxing to output 1 failed."
return 1
fi
echo "Successfully demuxed bitstream to bitstream_demuxed_1.bin"
}
# Compare demuxed bitstreams with original bitstreams
compare_bitstreams() {
echo "Comparing demuxed bitstreams with original bitstreams..."
# Compare first bitstream
if cmp -s "${BITSTREAM_0}" "${DEMUXED_OUTPUT_0}"; then
echo "PASS: bitstream_0.bin matches bitstream_demuxed_0.bin"
else
elog "FAIL: bitstream_0.bin does NOT match bitstream_demuxed_0.bin"
return 1
fi
# Compare second bitstream
if cmp -s "${BITSTREAM_1}" "${DEMUXED_OUTPUT_1}"; then
echo "PASS: bitstream_1.bin matches bitstream_demuxed_1.bin"
else
elog "FAIL: bitstream_1.bin does NOT match bitstream_demuxed_1.bin"
return 1
fi
echo "All bitstream comparisons passed successfully!"
}
# Run complete encode, mux, and demux pipeline
run_encode_mux_demux() {
encode_bitstream_0 || return 1
encode_bitstream_1 || return 1
mux_bitstreams || return 1
demux_bitstream || return 1
compare_bitstreams || return 1
}
# Test list
mux_demux_tests="run_encode_mux_demux"
# Execute tests
run_tests mux_demux_verify_environment "${mux_demux_tests}"