#!/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 dump_obu tool. To add new tests to this
## file, do the following:
##   1. Write a shell function (this is your test).
##   2. Add the function to dump_obu_tests (on a new line).
##
. $(dirname $0)/tools_common.sh

readonly dump_obu_test_file="${AOM_TEST_OUTPUT_DIR}/av1_obu_test.ivf"

dump_obu_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 [ "$(dump_obu_available)" = "yes" ]; then
    if [ -z "$(aom_tool_path dump_obu)" ]; then
      elog "dump_obu not found in LIBAOM_BIN_PATH, its parent, or child tools/."
    fi
  fi
}

dump_obu_available() {
  if [ "$(av1_decode_available)" = "yes" ] && \
     [ "$(av1_encode_available)" = "yes" ]; then
    echo yes
  fi
}

aomenc_available() {
  if [ -x "$(aom_tool_path aomenc)" ]; then
    echo yes
  fi
}

encode_test_file() {
  if [ "$(aomenc_available)" = "yes" ]; then
    local encoder="$(aom_tool_path aomenc)"

    eval "${encoder}" \
      $(aomenc_encode_test_fast_params) \
      $(yuv_raw_input) \
      --ivf \
      --output=${dump_obu_test_file} \
      ${devnull} || return 1

    if [ ! -e "${dump_obu_test_file}" ]; then
      elog "dump_obu test input encode failed."
      return 1
    fi
  fi
}

dump_obu() {
  encode_test_file || return 1
  eval $(aom_tool_path dump_obu) "${dump_obu_test_file}" ${devnull}
}

dump_obu_tests="dump_obu"

run_tests dump_obu_verify_environment "${dump_obu_tests}"
