| OLD | NEW |
| 1 #!/bin/sh | 1 #!/bin/sh |
| 2 ## | 2 ## |
| 3 ## Copyright (c) 2014 The WebM project authors. All Rights Reserved. | 3 ## Copyright (c) 2014 The WebM project authors. All Rights Reserved. |
| 4 ## | 4 ## |
| 5 ## Use of this source code is governed by a BSD-style license | 5 ## Use of this source code is governed by a BSD-style license |
| 6 ## that can be found in the LICENSE file in the root of the source | 6 ## that can be found in the LICENSE file in the root of the source |
| 7 ## tree. An additional intellectual property rights grant can be found | 7 ## tree. An additional intellectual property rights grant can be found |
| 8 ## in the file PATENTS. All contributing project authors may | 8 ## in the file PATENTS. All contributing project authors may |
| 9 ## be found in the AUTHORS file in the root of the source tree. | 9 ## be found in the AUTHORS file in the root of the source tree. |
| 10 ## | 10 ## |
| 11 ## This file tests vpxenc using hantro_collage_w352h288.yuv as input. To add | 11 ## This file tests vpxenc using hantro_collage_w352h288.yuv as input. To add |
| 12 ## new tests to this file, do the following: | 12 ## new tests to this file, do the following: |
| 13 ## 1. Write a shell function (this is your test). | 13 ## 1. Write a shell function (this is your test). |
| 14 ## 2. Add the function to vpxenc_tests (on a new line). | 14 ## 2. Add the function to vpxenc_tests (on a new line). |
| 15 ## | 15 ## |
| 16 . $(dirname $0)/tools_common.sh | 16 . $(dirname $0)/tools_common.sh |
| 17 | 17 |
| 18 readonly TEST_FRAMES=10 | 18 readonly TEST_FRAMES=10 |
| 19 | 19 |
| 20 # Environment check: Make sure input is available. | 20 # Environment check: Make sure input is available. |
| 21 vpxenc_verify_environment() { | 21 vpxenc_verify_environment() { |
| 22 if [ ! -e "${YUV_RAW_INPUT}" ]; then | 22 if [ ! -e "${YUV_RAW_INPUT}" ]; then |
| 23 echo "The file ${YUV_RAW_INPUT##*/} must exist in LIBVPX_TEST_DATA_PATH." | 23 elog "The file ${YUV_RAW_INPUT##*/} must exist in LIBVPX_TEST_DATA_PATH." |
| 24 return 1 | 24 return 1 |
| 25 fi | 25 fi |
| 26 if [ -z "$(vpx_tool_path vpxenc)" ]; then | 26 if [ -z "$(vpx_tool_path vpxenc)" ]; then |
| 27 elog "vpxenc not found. It must exist in LIBVPX_BIN_PATH or its parent." | 27 elog "vpxenc not found. It must exist in LIBVPX_BIN_PATH or its parent." |
| 28 return 1 | 28 return 1 |
| 29 fi | 29 fi |
| 30 } | 30 } |
| 31 | 31 |
| 32 vpxenc_can_encode_vp8() { | 32 vpxenc_can_encode_vp8() { |
| 33 if [ "$(vp8_encode_available)" = "yes" ]; then | 33 if [ "$(vp8_encode_available)" = "yes" ]; then |
| 34 echo yes | 34 echo yes |
| 35 fi | 35 fi |
| 36 } | 36 } |
| 37 | 37 |
| 38 vpxenc_can_encode_vp9() { | 38 vpxenc_can_encode_vp9() { |
| 39 if [ "$(vp9_encode_available)" = "yes" ]; then | 39 if [ "$(vp9_encode_available)" = "yes" ]; then |
| 40 echo yes | 40 echo yes |
| 41 fi | 41 fi |
| 42 } | 42 } |
| 43 | 43 |
| 44 # Wrapper function for running vpxenc with pipe input. Requires that | 44 # Wrapper function for running vpxenc with pipe input. Requires that |
| 45 # LIBVPX_BIN_PATH points to the directory containing vpxenc. $1 is used as the | 45 # LIBVPX_BIN_PATH points to the directory containing vpxenc. $1 is used as the |
| 46 # input file path and shifted away. All remaining parameters are passed through | 46 # input file path and shifted away. All remaining parameters are passed through |
| 47 # to vpxenc. | 47 # to vpxenc. |
| 48 vpxenc_pipe() { | 48 vpxenc_pipe() { |
| 49 local readonly encoder="$(vpx_tool_path vpxenc)" | 49 local readonly encoder="$(vpx_tool_path vpxenc)" |
| 50 local readonly input="$1" | 50 local readonly input="$1" |
| 51 shift | 51 shift |
| 52 cat "${input}" | eval "${VPX_TEST_PREFIX}" "${encoder}" - "$@" ${devnull} | 52 cat "${input}" | eval "${VPX_TEST_PREFIX}" "${encoder}" - \ |
| 53 --test-decode=fatal \ |
| 54 "$@" ${devnull} |
| 53 } | 55 } |
| 54 | 56 |
| 55 # Wrapper function for running vpxenc. Requires that LIBVPX_BIN_PATH points to | 57 # Wrapper function for running vpxenc. Requires that LIBVPX_BIN_PATH points to |
| 56 # the directory containing vpxenc. $1 one is used as the input file path and | 58 # the directory containing vpxenc. $1 one is used as the input file path and |
| 57 # shifted away. All remaining parameters are passed through to vpxenc. | 59 # shifted away. All remaining parameters are passed through to vpxenc. |
| 58 vpxenc() { | 60 vpxenc() { |
| 59 local readonly encoder="$(vpx_tool_path vpxenc)" | 61 local readonly encoder="$(vpx_tool_path vpxenc)" |
| 60 local readonly input="${1}" | 62 local readonly input="${1}" |
| 61 shift | 63 shift |
| 62 eval "${VPX_TEST_PREFIX}" "${encoder}" "$input" "$@" ${devnull} | 64 eval "${VPX_TEST_PREFIX}" "${encoder}" "$input" \ |
| 65 --test-decode=fatal \ |
| 66 "$@" ${devnull} |
| 63 } | 67 } |
| 64 | 68 |
| 65 vpxenc_vp8_ivf() { | 69 vpxenc_vp8_ivf() { |
| 66 if [ "$(vpxenc_can_encode_vp8)" = "yes" ]; then | 70 if [ "$(vpxenc_can_encode_vp8)" = "yes" ]; then |
| 67 local readonly output="${VPX_TEST_OUTPUT_DIR}/vp8.ivf" | 71 local readonly output="${VPX_TEST_OUTPUT_DIR}/vp8.ivf" |
| 68 vpxenc --codec=vp8 \ | 72 vpxenc --codec=vp8 \ |
| 69 --width="${YUV_RAW_INPUT_WIDTH}" \ | 73 --width="${YUV_RAW_INPUT_WIDTH}" \ |
| 70 --height="${YUV_RAW_INPUT_HEIGHT}" \ | 74 --height="${YUV_RAW_INPUT_HEIGHT}" \ |
| 71 --limit="${TEST_FRAMES}" \ | 75 --limit="${TEST_FRAMES}" \ |
| 72 --ivf \ | 76 --ivf \ |
| 73 --output="${output}" \ | 77 --output="${output}" \ |
| 74 "${YUV_RAW_INPUT}" | 78 "${YUV_RAW_INPUT}" |
| 75 | 79 |
| 76 if [ ! -e "${output}" ]; then | 80 if [ ! -e "${output}" ]; then |
| 77 elog "Output file does not exist." | 81 elog "Output file does not exist." |
| 78 return 1 | 82 return 1 |
| 79 fi | 83 fi |
| 80 fi | 84 fi |
| 81 } | 85 } |
| 82 | 86 |
| 87 vpxenc_vp8_webm() { |
| 88 if [ "$(vpxenc_can_encode_vp8)" = "yes" ] && \ |
| 89 [ "$(webm_io_available)" = "yes" ]; then |
| 90 local readonly output="${VPX_TEST_OUTPUT_DIR}/vp8.webm" |
| 91 vpxenc --codec=vp8 \ |
| 92 --width="${YUV_RAW_INPUT_WIDTH}" \ |
| 93 --height="${YUV_RAW_INPUT_HEIGHT}" \ |
| 94 --limit="${TEST_FRAMES}" \ |
| 95 --output="${output}" \ |
| 96 "${YUV_RAW_INPUT}" |
| 97 |
| 98 if [ ! -e "${output}" ]; then |
| 99 elog "Output file does not exist." |
| 100 return 1 |
| 101 fi |
| 102 fi |
| 103 } |
| 104 |
| 105 vpxenc_vp8_webm_2pass() { |
| 106 if [ "$(vpxenc_can_encode_vp8)" = "yes" ] && \ |
| 107 [ "$(webm_io_available)" = "yes" ]; then |
| 108 local readonly output="${VPX_TEST_OUTPUT_DIR}/vp8.webm" |
| 109 vpxenc --codec=vp8 \ |
| 110 --width="${YUV_RAW_INPUT_WIDTH}" \ |
| 111 --height="${YUV_RAW_INPUT_HEIGHT}" \ |
| 112 --limit="${TEST_FRAMES}" \ |
| 113 --output="${output}" \ |
| 114 --passes=2 \ |
| 115 "${YUV_RAW_INPUT}" |
| 116 |
| 117 if [ ! -e "${output}" ]; then |
| 118 elog "Output file does not exist." |
| 119 return 1 |
| 120 fi |
| 121 fi |
| 122 } |
| 123 |
| 124 vpxenc_vp8_webm_lag10_frames20() { |
| 125 if [ "$(vpxenc_can_encode_vp8)" = "yes" ] && \ |
| 126 [ "$(webm_io_available)" = "yes" ]; then |
| 127 local readonly lag_total_frames=20 |
| 128 local readonly lag_frames=10 |
| 129 local readonly output="${VPX_TEST_OUTPUT_DIR}/vp8_lag10_frames20.webm" |
| 130 vpxenc --codec=vp8 \ |
| 131 --width="${YUV_RAW_INPUT_WIDTH}" \ |
| 132 --height="${YUV_RAW_INPUT_HEIGHT}" \ |
| 133 --limit="${lag_total_frames}" \ |
| 134 --lag-in-frames="${lag_frames}" \ |
| 135 --output="${output}" \ |
| 136 --auto-alt-ref=1 \ |
| 137 --passes=2 \ |
| 138 "${YUV_RAW_INPUT}" |
| 139 |
| 140 if [ ! -e "${output}" ]; then |
| 141 elog "Output file does not exist." |
| 142 return 1 |
| 143 fi |
| 144 fi |
| 145 } |
| 146 |
| 83 vpxenc_vp8_ivf_piped_input() { | 147 vpxenc_vp8_ivf_piped_input() { |
| 84 if [ "$(vpxenc_can_encode_vp8)" = "yes" ]; then | 148 if [ "$(vpxenc_can_encode_vp8)" = "yes" ]; then |
| 85 local readonly output="${VPX_TEST_OUTPUT_DIR}/vp8_piped_input.ivf" | 149 local readonly output="${VPX_TEST_OUTPUT_DIR}/vp8_piped_input.ivf" |
| 86 cat "${YUV_RAW_INPUT}" \ | 150 cat "${YUV_RAW_INPUT}" \ |
| 87 | vpxenc --codec=vp8 \ | 151 | vpxenc --codec=vp8 \ |
| 88 --width="${YUV_RAW_INPUT_WIDTH}" \ | 152 --width="${YUV_RAW_INPUT_WIDTH}" \ |
| 89 --height="${YUV_RAW_INPUT_HEIGHT}" \ | 153 --height="${YUV_RAW_INPUT_HEIGHT}" \ |
| 90 --limit="${TEST_FRAMES}" \ | 154 --limit="${TEST_FRAMES}" \ |
| 91 --ivf \ | 155 --ivf \ |
| 92 --output="${output}" \ | 156 --output="${output}" \ |
| 93 - | 157 - |
| 94 | 158 |
| 95 if [ ! -e "${output}" ]; then | 159 if [ ! -e "${output}" ]; then |
| 96 elog "Output file does not exist." | 160 elog "Output file does not exist." |
| 97 return 1 | 161 return 1 |
| 98 fi | 162 fi |
| 99 fi | 163 fi |
| 100 } | 164 } |
| 101 | 165 |
| 102 vpxenc_vp8_webm() { | 166 vpxenc_vp9_ivf() { |
| 103 if [ "$(vpxenc_can_encode_vp8)" = "yes" ] && \ | 167 if [ "$(vpxenc_can_encode_vp9)" = "yes" ]; then |
| 104 [ "$(webm_io_available)" = "yes" ]; then | 168 local readonly output="${VPX_TEST_OUTPUT_DIR}/vp9.ivf" |
| 105 local readonly output="${VPX_TEST_OUTPUT_DIR}/vp8.webm" | 169 vpxenc --codec=vp9 \ |
| 106 vpxenc --codec=vp8 \ | |
| 107 --width="${YUV_RAW_INPUT_WIDTH}" \ | 170 --width="${YUV_RAW_INPUT_WIDTH}" \ |
| 108 --height="${YUV_RAW_INPUT_HEIGHT}" \ | 171 --height="${YUV_RAW_INPUT_HEIGHT}" \ |
| 109 --limit="${TEST_FRAMES}" \ | 172 --limit="${TEST_FRAMES}" \ |
| 173 --ivf \ |
| 110 --output="${output}" \ | 174 --output="${output}" \ |
| 111 "${YUV_RAW_INPUT}" | 175 "${YUV_RAW_INPUT}" |
| 112 | 176 |
| 113 if [ ! -e "${output}" ]; then | 177 if [ ! -e "${output}" ]; then |
| 114 elog "Output file does not exist." | 178 elog "Output file does not exist." |
| 115 return 1 | 179 return 1 |
| 116 fi | 180 fi |
| 117 fi | 181 fi |
| 118 } | 182 } |
| 119 | 183 |
| 120 vpxenc_vp9_ivf() { | 184 vpxenc_vp9_webm() { |
| 121 if [ "$(vpxenc_can_encode_vp9)" = "yes" ]; then | 185 if [ "$(vpxenc_can_encode_vp9)" = "yes" ] && \ |
| 122 local readonly output="${VPX_TEST_OUTPUT_DIR}/vp9.ivf" | 186 [ "$(webm_io_available)" = "yes" ]; then |
| 187 local readonly output="${VPX_TEST_OUTPUT_DIR}/vp9.webm" |
| 123 vpxenc --codec=vp9 \ | 188 vpxenc --codec=vp9 \ |
| 124 --width="${YUV_RAW_INPUT_WIDTH}" \ | 189 --width="${YUV_RAW_INPUT_WIDTH}" \ |
| 125 --height="${YUV_RAW_INPUT_HEIGHT}" \ | 190 --height="${YUV_RAW_INPUT_HEIGHT}" \ |
| 126 --limit="${TEST_FRAMES}" \ | 191 --limit="${TEST_FRAMES}" \ |
| 127 --ivf \ | |
| 128 --test-decode=fatal \ | |
| 129 --output="${output}" \ | 192 --output="${output}" \ |
| 130 "${YUV_RAW_INPUT}" | 193 "${YUV_RAW_INPUT}" |
| 131 | 194 |
| 132 if [ ! -e "${output}" ]; then | 195 if [ ! -e "${output}" ]; then |
| 133 elog "Output file does not exist." | 196 elog "Output file does not exist." |
| 134 return 1 | 197 return 1 |
| 135 fi | 198 fi |
| 136 fi | 199 fi |
| 137 } | 200 } |
| 138 | 201 |
| 139 vpxenc_vp9_webm() { | 202 vpxenc_vp9_webm_2pass() { |
| 140 if [ "$(vpxenc_can_encode_vp9)" = "yes" ] && \ | 203 if [ "$(vpxenc_can_encode_vp9)" = "yes" ] && \ |
| 141 [ "$(webm_io_available)" = "yes" ]; then | 204 [ "$(webm_io_available)" = "yes" ]; then |
| 142 local readonly output="${VPX_TEST_OUTPUT_DIR}/vp9.webm" | 205 local readonly output="${VPX_TEST_OUTPUT_DIR}/vp9.webm" |
| 143 vpxenc --codec=vp9 \ | 206 vpxenc --codec=vp9 \ |
| 144 --width="${YUV_RAW_INPUT_WIDTH}" \ | 207 --width="${YUV_RAW_INPUT_WIDTH}" \ |
| 145 --height="${YUV_RAW_INPUT_HEIGHT}" \ | 208 --height="${YUV_RAW_INPUT_HEIGHT}" \ |
| 146 --limit="${TEST_FRAMES}" \ | 209 --limit="${TEST_FRAMES}" \ |
| 147 --test-decode=fatal \ | 210 --test-decode=fatal \ |
| 148 --output="${output}" \ | 211 --output="${output}" \ |
| 212 --passes=2 \ |
| 149 "${YUV_RAW_INPUT}" | 213 "${YUV_RAW_INPUT}" |
| 150 | 214 |
| 151 if [ ! -e "${output}" ]; then | 215 if [ ! -e "${output}" ]; then |
| 152 elog "Output file does not exist." | 216 elog "Output file does not exist." |
| 153 return 1 | 217 return 1 |
| 154 fi | 218 fi |
| 155 fi | 219 fi |
| 156 } | 220 } |
| 157 | 221 |
| 158 vpxenc_vp9_ivf_lossless() { | 222 vpxenc_vp9_ivf_lossless() { |
| 159 if [ "$(vpxenc_can_encode_vp9)" = "yes" ]; then | 223 if [ "$(vpxenc_can_encode_vp9)" = "yes" ]; then |
| 160 local readonly output="${VPX_TEST_OUTPUT_DIR}/vp9_lossless.ivf" | 224 local readonly output="${VPX_TEST_OUTPUT_DIR}/vp9_lossless.ivf" |
| 161 vpxenc --codec=vp9 \ | 225 vpxenc --codec=vp9 \ |
| 162 --width="${YUV_RAW_INPUT_WIDTH}" \ | 226 --width="${YUV_RAW_INPUT_WIDTH}" \ |
| 163 --height="${YUV_RAW_INPUT_HEIGHT}" \ | 227 --height="${YUV_RAW_INPUT_HEIGHT}" \ |
| 164 --limit="${TEST_FRAMES}" \ | 228 --limit="${TEST_FRAMES}" \ |
| 165 --ivf \ | 229 --ivf \ |
| 166 --output="${output}" \ | 230 --output="${output}" \ |
| 167 --lossless=1 \ | 231 --lossless=1 \ |
| 168 --test-decode=fatal \ | |
| 169 "${YUV_RAW_INPUT}" | 232 "${YUV_RAW_INPUT}" |
| 170 | 233 |
| 171 if [ ! -e "${output}" ]; then | 234 if [ ! -e "${output}" ]; then |
| 172 elog "Output file does not exist." | 235 elog "Output file does not exist." |
| 173 return 1 | 236 return 1 |
| 174 fi | 237 fi |
| 175 fi | 238 fi |
| 176 } | 239 } |
| 177 | 240 |
| 178 vpxenc_vp9_ivf_minq0_maxq0() { | 241 vpxenc_vp9_ivf_minq0_maxq0() { |
| 179 if [ "$(vpxenc_can_encode_vp9)" = "yes" ]; then | 242 if [ "$(vpxenc_can_encode_vp9)" = "yes" ]; then |
| 180 local readonly output="${VPX_TEST_OUTPUT_DIR}/vp9_lossless_minq0_maxq0.ivf" | 243 local readonly output="${VPX_TEST_OUTPUT_DIR}/vp9_lossless_minq0_maxq0.ivf" |
| 181 vpxenc --codec=vp9 \ | 244 vpxenc --codec=vp9 \ |
| 182 --width="${YUV_RAW_INPUT_WIDTH}" \ | 245 --width="${YUV_RAW_INPUT_WIDTH}" \ |
| 183 --height="${YUV_RAW_INPUT_HEIGHT}" \ | 246 --height="${YUV_RAW_INPUT_HEIGHT}" \ |
| 184 --limit="${TEST_FRAMES}" \ | 247 --limit="${TEST_FRAMES}" \ |
| 185 --ivf \ | 248 --ivf \ |
| 186 --output="${output}" \ | 249 --output="${output}" \ |
| 187 --min-q=0 \ | 250 --min-q=0 \ |
| 188 --max-q=0 \ | 251 --max-q=0 \ |
| 189 --test-decode=fatal \ | |
| 190 "${YUV_RAW_INPUT}" | 252 "${YUV_RAW_INPUT}" |
| 191 | 253 |
| 192 if [ ! -e "${output}" ]; then | 254 if [ ! -e "${output}" ]; then |
| 255 elog "Output file does not exist." |
| 256 return 1 |
| 257 fi |
| 258 fi |
| 259 } |
| 260 |
| 261 vpxenc_vp9_webm_lag10_frames20() { |
| 262 if [ "$(vpxenc_can_encode_vp9)" = "yes" ] && \ |
| 263 [ "$(webm_io_available)" = "yes" ]; then |
| 264 local readonly lag_total_frames=20 |
| 265 local readonly lag_frames=10 |
| 266 local readonly output="${VPX_TEST_OUTPUT_DIR}/vp9_lag10_frames20.webm" |
| 267 vpxenc --codec=vp9 \ |
| 268 --width="${YUV_RAW_INPUT_WIDTH}" \ |
| 269 --height="${YUV_RAW_INPUT_HEIGHT}" \ |
| 270 --limit="${lag_total_frames}" \ |
| 271 --lag-in-frames="${lag_frames}" \ |
| 272 --output="${output}" \ |
| 273 --test-decode=fatal \ |
| 274 --passes=2 \ |
| 275 --auto-alt-ref=1 \ |
| 276 "${YUV_RAW_INPUT}" |
| 277 |
| 278 if [ ! -e "${output}" ]; then |
| 193 elog "Output file does not exist." | 279 elog "Output file does not exist." |
| 194 return 1 | 280 return 1 |
| 195 fi | 281 fi |
| 196 fi | 282 fi |
| 197 } | 283 } |
| 198 | 284 |
| 199 vpxenc_tests="vpxenc_vp8_ivf | 285 vpxenc_tests="vpxenc_vp8_ivf |
| 200 vpxenc_vp8_webm | 286 vpxenc_vp8_webm |
| 287 vpxenc_vp8_webm_2pass |
| 288 vpxenc_vp8_webm_lag10_frames20 |
| 201 vpxenc_vp8_ivf_piped_input | 289 vpxenc_vp8_ivf_piped_input |
| 202 vpxenc_vp9_ivf | 290 vpxenc_vp9_ivf |
| 203 vpxenc_vp9_webm | 291 vpxenc_vp9_webm |
| 292 vpxenc_vp9_webm_2pass |
| 204 vpxenc_vp9_ivf_lossless | 293 vpxenc_vp9_ivf_lossless |
| 205 vpxenc_vp9_ivf_minq0_maxq0" | 294 vpxenc_vp9_ivf_minq0_maxq0 |
| 295 vpxenc_vp9_webm_lag10_frames20" |
| 206 | 296 |
| 207 run_tests vpxenc_verify_environment "${vpxenc_tests}" | 297 run_tests vpxenc_verify_environment "${vpxenc_tests}" |
| OLD | NEW |