blob: 640935dd0aaebe3a0397b2e8518893697d77c3a2 [file] [log] [blame]
Chase Qi50842e52017-03-27 11:31:06 +08001#!/system/bin/sh
2# shellcheck disable=SC2039
3# shellcheck disable=SC2086
4# shellcheck disable=SC2181
5# shellcheck disable=SC2155
6# shellcheck disable=SC2166
Anders Roxell54127542022-11-23 14:23:31 +01007# shellcheck disable=SC3006
8# shellcheck disable=SC3010
9# shellcheck disable=SC3018
10# shellcheck disable=SC3037
11# shellcheck disable=SC3057
Anders Roxellabd41ce2022-11-23 14:18:27 +010012# shellcheck disable=SC3060
Chase Qi50842e52017-03-27 11:31:06 +080013#############################################################################
14# Copyright (c) 2014 Linaro
15# All rights reserved. This program and the accompanying materials
16# are made available under the terms of the Eclipse Public License v1.0
17# which accompanies this distribution, and is available at
18# http://www.eclipse.org/legal/epl-v10.html
19#
20# Contributors:
21# Linaro <linaro-dev@lists.linaro.org>
22#############################################################################
23
24# Individual and batch test definitions
25ALL_AUDIO_CODECS="audio_codec_aac audio_codec_flac audio_codec_mp3 \
26 audio_codec_tremolo"
27ALL_SPEECH_CODECS="speech_codec_amrnb_dec speech_codec_amrnb_enc \
28 speech_codec_amrwb_dec speech_codec_amrwb_enc"
29ALL_VIDEO_CODECS="video_codec_h264_dec video_codec_h264_enc \
30 video_codec_h263_dec video_codec_h263_enc"
31ALL_CODECS="${ALL_AUDIO_CODECS} ${ALL_SPEECH_CODECS} ${ALL_VIDEO_CODECS}"
32ALL_TESTS="${ALL_CODECS}"
33
34# Script arguments for selecting tests to run
35ALL_AUDIO_CODECS_OPT="all_audio_codecs"
36ALL_SPEECH_CODECS_OPT="all_speech_codecs"
37ALL_VIDEO_CODECS_OPT="all_video_codecs"
38ALL_CODECS_OPT="all_codecs"
39ALL_TESTS_OPT="all_tests"
40
41func_md5(){
42 if [ -n "$(which md5)" ]; then
43 md5 "$@"
44 else
45 md5sum "$@"
46 fi
47}
48
49usage() {
50 echo
51 echo "Usage: $0 [-h] [-t TESTS] [-v]"
52 echo "Run all or specified Android userspace tests"
53 echo
54 printf " %-10s\t%s\n" "-h" "Print this help message"
55 printf " %-10s\t%s\n" "-t TESTS" "Run only specified TESTS from the following:"
56 printf " %-10s\t%s\n" "" "Individual tests:"
57 for CODEC in ${ALL_CODECS}; do
58 printf " %-10s\t\t%s\n" "" "${CODEC}"
59 done
60 printf " %-10s\t%s\n" "" "Batch tests:"
61 printf " %-10s\t\t%s\n" "" "${ALL_AUDIO_CODECS_OPT}"
62 printf " %-10s\t\t%s\n" "" "${ALL_SPEECH_CODECS_OPT}"
63 printf " %-10s\t\t%s\n" "" "${ALL_VIDEO_CODECS_OPT}"
64 printf " %-10s\t\t%s\n" "" "${ALL_CODECS_OPT}"
65 printf " %-10s\t\t%s\n" "" "${ALL_TESTS_OPT}"
66 printf " %-10s\t%s\n" "-v" "Turn on verbose output"
67 echo
68 echo "Example:"
69 printf "\t%s -t \"audio_codec_aac speech_codec_amrnb_dec\"\n" "$0"
70}
71
72run_audio_codec_aac()
73{
74 local TEST_FILE="/data/linaro-android-userspace-test/audio-codec/Retribution.wav"
75 local OUT_FILE="/data/local/tmp/audio-codec-test.out"
76 local EXPECTED_MD5SUM="f35771514701eaf5055b1705a4c660b7"
77
78 echo
79 echo "Running AAC encoder test"
80
81 if [ ! -f ${TEST_FILE} ]; then
82 echo "ERROR: AAC encoder test file ${TEST_FILE} does not exist"
83 echo "AAC encoder test: FAILED"
84 echo "[audio_codec_aac]: test failed"
85 return 1
86 fi
87 if [ "${VERBOSE}" -eq "1" ]; then
88 libaacenc_test ${TEST_FILE} ${OUT_FILE}
89 else
Anders Roxelld0a77562022-11-23 14:09:05 +010090 libaacenc_test ${TEST_FILE} ${OUT_FILE} > /dev/null 2>&1
Chase Qi50842e52017-03-27 11:31:06 +080091 fi
92 if [ "$?" -ne "0" ]; then
93 echo "ERROR: AAC encoder test returned error"
94 echo "AAC encoder test: FAILED"
95 echo "[audio_codec_aac]: test failed"
96 return 1
97 fi
98
99 echo "Checking MD5SUM of output file"
Anders Roxellabd41ce2022-11-23 14:18:27 +0100100 local MD5SUM="$(func_md5 ${OUT_FILE})"
Chase Qi50842e52017-03-27 11:31:06 +0800101 MD5SUM=${MD5SUM%% *}
102 rm ${OUT_FILE}
103 if [[ "${MD5SUM}" == "${EXPECTED_MD5SUM}" ]]; then
104 echo "AAC encoder test: PASSED"
105 echo "[audio_codec_aac]: test passed"
106 else
107 echo "ERROR: incorrect MD5SUM '${MD5SUM}' (expected '${EXPECTED_MD5SUM}')"
108 echo "AAC encoder test: FAILED"
109 echo "[audio_codec_aac]: test failed"
110 return 1
111 fi
112}
113
114run_audio_codec_flac()
115{
116 echo
117 echo "Running FLAC encoder/decoder test"
118
119 if [ "${VERBOSE}" -eq "1" ]; then
120 libFLAC_test
121 else
Anders Roxelld0a77562022-11-23 14:09:05 +0100122 libFLAC_test > /dev/null 2>&1
Chase Qi50842e52017-03-27 11:31:06 +0800123 fi
124 if [ "$?" -eq "0" ]; then
125 echo "FLAC encoder/decoder test: PASSED"
126 echo "[audio_codec_flac]: test passed"
127 else
128 echo "ERROR: FLAC encoder/decoder test returned error"
129 echo "FLAC encoder/decoder test: FAILED"
130 echo "[audio_codec_flac]: test failed"
131 return 1
132 fi
133}
134
135run_audio_codec_mp3()
136{
137 local TEST_FILE="/data/linaro-android-userspace-test/audio-codec/Retribution.mp3"
138 local OUT_FILE="/data/local/tmp/audio-codec-test.out"
139 local EXPECTED_MD5SUM="bf1456a93dfc53e474c30c9fca75c647"
140
141 echo
142 echo "Running MP3 decoder test"
143
144 if [ ! -f ${TEST_FILE} ]; then
145 echo "ERROR: MP3 test file ${TEST_FILE} does not exist"
146 echo "MP3 decoder test: FAILED"
147 echo "[audio_codec_mp3]: test failed"
148 return 1
149 fi
150 if [ "${VERBOSE}" -eq "1" ]; then
151 libstagefright_mp3dec_test ${TEST_FILE} ${OUT_FILE}
152 else
Anders Roxelld0a77562022-11-23 14:09:05 +0100153 libstagefright_mp3dec_test ${TEST_FILE} ${OUT_FILE} > /dev/null 2>&1
Chase Qi50842e52017-03-27 11:31:06 +0800154 fi
155 if [ "$?" -ne "0" ]; then
156 echo "ERROR: MP3 decoder test returned error"
157 echo "MP3 decoder test: FAILED"
158 echo "[audio_codec_mp3]: test failed"
159 return 1
160 fi
161
162 echo "Checking MD5SUM of output file"
Anders Roxellabd41ce2022-11-23 14:18:27 +0100163 local MD5SUM="$(func_md5 ${OUT_FILE})"
Chase Qi50842e52017-03-27 11:31:06 +0800164 MD5SUM=${MD5SUM%% *}
165 rm ${OUT_FILE}
166 if [[ "${MD5SUM}" == "${EXPECTED_MD5SUM}" ]]; then
167 echo "MP3 decoder test: PASSED"
168 echo "[audio_codec_mp3]: test passed"
169 else
170 echo "ERROR: incorrect MD5SUM '${MD5SUM}' (expected '${EXPECTED_MD5SUM}')"
171 echo "MP3 decoder test: FAILED"
172 echo "[audio_codec_mp3]: test failed"
173 return 1
174 fi
175}
176
177run_audio_codec_tremolo()
178{
179 local TEST_FILE="/data/linaro-android-userspace-test/audio-codec/Retribution.ogg"
180 local OUT_FILE="/data/local/tmp/audio-codec-test.out"
181 local EXPECTED_MD5SUM="49097459eb06bb624ff3d09f959d0423"
182
183 echo
184 echo "Running Tremolo decoder test"
185 if [ ! -f ${TEST_FILE} ]; then
186 echo "ERROR: Tremolo test file ${TEST_FILE} does not exist"
187 echo "Tremolo decoder test: FAILED"
188 echo "[audio_codec_tremolo]: test failed"
189 return 1
190 fi
191 if [ "${VERBOSE}" -eq "1" ]; then
192 libvorbisidec_test ${TEST_FILE} ${OUT_FILE}
193 else
Anders Roxelld0a77562022-11-23 14:09:05 +0100194 libvorbisidec_test ${TEST_FILE} ${OUT_FILE} > /dev/null 2>&1
Chase Qi50842e52017-03-27 11:31:06 +0800195 fi
196 if [ "$?" -ne "0" ]; then
197 echo "ERROR: Tremolo decoder test returned error"
198 echo "Tremolo decoder test: FAILED"
199 echo "[audio_codec_tremolo]: test failed"
200 return 1
201 fi
202
203 echo "Checking MD5SUM of output file"
Anders Roxellabd41ce2022-11-23 14:18:27 +0100204 local MD5SUM="$(func_md5 ${OUT_FILE})"
Chase Qi50842e52017-03-27 11:31:06 +0800205 MD5SUM=${MD5SUM%% *}
206 rm ${OUT_FILE}
207 if [[ "${MD5SUM}" == "${EXPECTED_MD5SUM}" ]]; then
208 echo "Tremolo decoder test: PASSED"
209 echo "[audio_codec_tremolo]: test passed"
210 else
211 echo "ERROR: incorrect MD5SUM '${MD5SUM}' (expected '${EXPECTED_MD5SUM}')"
212 echo "Tremolo decoder test: FAILED"
213 echo "[audio_codec_tremolo]: test failed"
214 return 1
215 fi
216}
217
218run_speech_codec()
219{
220 if [ "$#" -ne "6" ]; then
221 return 1
222 fi
223
224 local IS_ENCODE="${1}"
225 local TAG="${2}"
226 local NAME="${3}"
227 local DATA_DIR="${4}"
228 local MD5SUM_FILE="${5}"
229 local RUN="${6}"
230 local OUT_FILE="/data/local/tmp/speech-codec-test.out"
231
232 echo
233 echo "${TAG}: Running ${NAME}"
234 if [ ! -f ${MD5SUM_FILE} ]; then
235 echo "${TAG}: ERROR: MD5SUM file '${MD5SUM_FILE}' does not exist"
236 echo "${TAG}: ${NAME}: FAILED"
237 echo "[${TAG}]: test failed"
238 return 1
239 fi
240
241 if [ "${IS_ENCODE}" -eq "1" ]; then
242 echo -n "${TAG}: Encoding and verifying output"
243 else
244 echo -n "${TAG}: Decoding and verifying output"
245 fi
246
247 while read -r LINE
248 do
249 if [[ "${LINE:0:1}" == "#" ]]; then
250 continue
251 fi
252
253 echo -n "."
254 TEST_FILE="${LINE%%['\t' ]*}"
255 if [ -z "${TEST_FILE}" ]; then
256 echo "${TAG}: ERROR: Invalid test file/MD5SUM pair"
257 echo "${TAG}: ${NAME}: FAILED"
258 echo "[${TAG}]: test failed"
259 return 1
260 fi
261
262 # Remove the test file, leaving the MD5SUMs
Anders Roxella244abc2022-11-23 15:37:26 +0100263 LINE="${LINE#"${TEST_FILE}"}"
Chase Qi50842e52017-03-27 11:31:06 +0800264
265 TEST_FILE="${DATA_DIR}/${TEST_FILE}"
266 if [ ! -f ${TEST_FILE} ]; then
267 echo "${TAG}: ERROR: test file '${TEST_FILE}' does not exist"
268 echo "${TAG}: ${NAME}: FAILED"
269 echo "[${TAG}]: test failed"
270 return 1
271 fi
272
273 local INDEX=0
274 local result=true
275 for EXPECTED_MD5SUM in ${LINE}; do
276 local cmd=""
277 if [ "${IS_ENCODE}" -eq "1" ]; then
278 cmd="${RUN} +M${INDEX} ${TEST_FILE} ${OUT_FILE}"
279 if [ "${VERBOSE}" -eq "1" ]; then
280 ${cmd}
281 else
Anders Roxelld0a77562022-11-23 14:09:05 +0100282 ${cmd} > /dev/null 2>&1
Chase Qi50842e52017-03-27 11:31:06 +0800283 fi
284 else
285 cmd="${RUN} ${TEST_FILE} ${OUT_FILE}"
286 if [ "${VERBOSE}" -eq "1" ]; then
287 ${cmd}
288 else
Anders Roxelld0a77562022-11-23 14:09:05 +0100289 ${cmd} > /dev/null 2>&1
Chase Qi50842e52017-03-27 11:31:06 +0800290 fi
291 fi
292 if [ "$?" -ne "0" ]; then
293 echo
294 echo "${TAG}: ${cmd}"
295 echo "${TAG}: ERROR: ${NAME} returned error"
296 result=false
297 continue
298 fi
299
Anders Roxellabd41ce2022-11-23 14:18:27 +0100300 local MD5SUM="$(func_md5 ${OUT_FILE})"
Chase Qi50842e52017-03-27 11:31:06 +0800301 MD5SUM="${MD5SUM%% *}"
302 if [[ "${MD5SUM}" != "${EXPECTED_MD5SUM}" ]]; then
303 echo
304 echo "${TAG}: ${cmd}"
305 echo "${TAG}: ERROR: incorrect MD5SUM '${MD5SUM}' (expected '${EXPECTED_MD5SUM}')"
306 result=false
307 continue
308 fi
309
310 ((INDEX++))
311 done
312 done < ${MD5SUM_FILE}
313 echo "done"
314
315 if [ -f ${OUT_FILE} ]; then
316 rm ${OUT_FILE}
317 fi
318
319 if $result; then
320 echo "${TAG}: ${NAME}: PASSED"
321 echo "[${TAG}]: test passed"
322 else
323 echo "${TAG}: ${NAME}: FAILED"
324 echo "[${TAG}]: test failed"
325 fi
326}
327
328run_speech_codec_amrnb_dec()
329{
330 local TAG="speech_codec_amrnb_dec"
331 local NAME="AMR NB decoder test"
332 local DATA_DIR="/data/linaro-android-userspace-test/speech-codec/amrnb"
333 local MD5SUM_FILE="${DATA_DIR}/MD5SUM.dec"
334
335 run_speech_codec 0 "${TAG}" "${NAME}" "${DATA_DIR}" "${MD5SUM_FILE}" "libstagefright_amrnbdec_test"
336 return $?
337}
338
339run_speech_codec_amrnb_enc()
340{
341 local TAG="speech_codec_amrnb_enc"
342 local NAME="AMR NB encoder test"
343 local DATA_DIR="/data/linaro-android-userspace-test/speech-codec/amrnb"
344 local MD5SUM_FILE="${DATA_DIR}/MD5SUM.enc"
345
346 run_speech_codec 1 "${TAG}" "${NAME}" "${DATA_DIR}" "${MD5SUM_FILE}" "libstagefright_amrnbenc_test"
347 return $?
348}
349
350run_speech_codec_amrwb_dec()
351{
352 local TAG="speech_codec_amrwb_dec"
353 local NAME="AMR WB decoder test"
354 local DATA_DIR="/data/linaro-android-userspace-test/speech-codec/amrwb"
355 local MD5SUM_FILE="${DATA_DIR}/MD5SUM.dec"
356
357 run_speech_codec 0 "${TAG}" "${NAME}" "${DATA_DIR}" "${MD5SUM_FILE}" "libstagefright_amrwbdec_test"
358 return $?
359}
360
361run_speech_codec_amrwb_enc()
362{
363 local TAG="speech_codec_amrwb_enc"
364 local NAME="AMR WB encoder test"
365 local DATA_DIR="/data/linaro-android-userspace-test/speech-codec/amrwb"
366 local MD5SUM_FILE="${DATA_DIR}/MD5SUM.enc"
367
368 run_speech_codec 1 "${TAG}" "${NAME}" "${DATA_DIR}" "${MD5SUM_FILE}" "libstagefright_amrwbenc_test"
369 return $?
370}
371
372run_video_codec_h264_dec()
373{
374 local TAG="video_codec_h264_dec"
375 local NAME="H.264 decoder test"
376 local DATA_DIR="/data/linaro-android-userspace-test/video-codec/h264"
377 local MD5SUM_FILE="${DATA_DIR}/MD5SUM.dec"
378 local RUN="libstagefright_h264dec_test"
379 local OUT_FILE="/data/local/tmp/video-codec-test.out"
380
381 echo
382 echo "${TAG}: Running ${NAME}"
383 if [ ! -f ${MD5SUM_FILE} ]; then
384 echo "${TAG}: ERROR: MD5SUM file '${MD5SUM_FILE}' does not exist"
385 echo "${TAG}: ${NAME}: FAILED"
386 echo "[${TAG}]: test failed"
387 return 1
388 fi
389
390 echo -n "${TAG}: Decoding and verifying output"
391
392 local TEST_FILE=""
393 local EXPECTED_MD5SUM=""
394 local LINE=0
395 while read -r TEST_FILE EXPECTED_MD5SUM
396 do
397 ((LINE++))
398
399 # Skip comment or empty lines
400 if [[ "${TEST_FILE:0:1}" == "#" ]] || [ -z "${TEST_FILE}" ]; then
401 continue
402 fi
403
404 echo -n "."
405 if [ -z "${EXPECTED_MD5SUM}" ]; then
406 echo "${TAG}: ERROR: invalid MD5SUM entry (${MD5SUM_FILE}:${LINE})"
407 echo "${TAG}: ${NAME}: FAILED"
408 echo "[${TAG}]: test failed"
409 return 1
410 fi
411
412 TEST_FILE="${DATA_DIR}/${TEST_FILE}"
413 if [ ! -f ${TEST_FILE} ]; then
414 echo "${TAG}: ERROR: test file '${TEST_FILE}' does not exist"
415 echo "${TAG}: ${NAME}: FAILED"
416 echo "[${TAG}]: test failed"
417 return 1
418 fi
419
420 if [ "${VERBOSE}" -eq "1" ]; then
421 ${RUN} -O${OUT_FILE} ${TEST_FILE}
422 else
Anders Roxelld0a77562022-11-23 14:09:05 +0100423 ${RUN} -O${OUT_FILE} ${TEST_FILE} > /dev/null 2>&1
Chase Qi50842e52017-03-27 11:31:06 +0800424 fi
425
426 if [ "$?" -ne "0" ]; then
427 echo
428 echo "${TAG}: ERROR: ${NAME} returned error for ${MD5SUM_FILE}:${LINE}"
429 echo "${TAG}: ${NAME}: FAILED"
430 echo "[${TAG}]: test failed"
431 return 1
432 fi
433
Anders Roxellabd41ce2022-11-23 14:18:27 +0100434 local MD5SUM="$(func_md5 ${OUT_FILE})"
Chase Qi50842e52017-03-27 11:31:06 +0800435 MD5SUM="${MD5SUM%% *}"
436 if [[ "${MD5SUM}" != "${EXPECTED_MD5SUM}" ]]; then
437 echo
438 echo "${TAG}: ERROR: incorrect MD5SUM '${MD5SUM}' (expected '${EXPECTED_MD5SUM}')"
439 echo "${TAG}: ${NAME}: FAILED"
440 echo "[${TAG}]: test failed"
441 return 1
442 fi
443 done < ${MD5SUM_FILE}
444 echo "done"
445
446 if [ -f ${OUT_FILE} ]; then
447 rm ${OUT_FILE}
448 fi
449
450 echo "${TAG}: ${NAME}: PASSED"
451 echo "[${TAG}]: test passed"
452 return $?
453}
454
455run_video_codec_h264_enc()
456{
457 local TAG="video_codec_h264_enc"
458 local NAME="H.264 encoder test"
459 local DATA_DIR="/data/linaro-android-userspace-test/video-codec/h264"
460 local MD5SUM_FILE="${DATA_DIR}/MD5SUM.enc"
461 local RUN="libstagefright_h264enc_test"
462 local OUT_FILE="/data/local/tmp/video-codec-test.out"
463
464 echo
465 echo "${TAG}: Running ${NAME}"
466 if [ ! -f ${MD5SUM_FILE} ]; then
467 echo "${TAG}: ERROR: MD5SUM file '${MD5SUM_FILE}' does not exist"
468 echo "${TAG}: ${NAME}: FAILED"
469 echo "[${TAG}]: test failed"
470 return 1
471 fi
472
473 echo -n "${TAG}: Encoding and verifying output"
474
475 local TEST_FILE=""
476 local OUT_WIDTH=""
477 local OUT_HEIGHT=""
478 local OUT_FRAMERATE=""
479 local OUT_BITRATE=""
480 local EXPECTED_MD5SUM=""
481 local LINE=0
482 local result=true
483 while read -r TEST_FILE OUT_WIDTH OUT_HEIGHT OUT_FRAMERATE OUT_BITRATE EXPECTED_MD5SUM
484 do
485 ((LINE++))
486
487 # Skip comment or empty lines
488 if [[ "${TEST_FILE:0:1}" == "#" ]] || [ -z "${TEST_FILE}" ]; then
489 continue
490 fi
491
492 echo -n "."
493
494 if [ -z "${OUT_WIDTH}" -o -z "${OUT_HEIGHT}" -o -z "${OUT_FRAMERATE}" -o -z "${OUT_BITRATE}" -o -z "${EXPECTED_MD5SUM}" ]; then
495 echo "${TAG}: ERROR: invalid MD5SUM entry (${MD5SUM_FILE}:${LINE})"
496 echo "${TAG}: ${NAME}: FAILED"
497 echo "[${TAG}]: test failed"
498 return 1
499 fi
500
501 TEST_FILE="${DATA_DIR}/${TEST_FILE}"
502 if [ ! -f ${TEST_FILE} ]; then
503 echo "${TAG}: ERROR: test file '${TEST_FILE}' does not exist"
504 echo "${TAG}: ${NAME}: FAILED"
505 echo "[${TAG}]: test failed"
506 return 1
507 fi
508 local cmd="${RUN} ${TEST_FILE} ${OUT_FILE} ${OUT_WIDTH} ${OUT_HEIGHT} ${OUT_FRAMERATE} ${OUT_BITRATE}"
509 if [ "${VERBOSE}" -eq "1" ]; then
510 $cmd
511 else
Anders Roxelld0a77562022-11-23 14:09:05 +0100512 ${cmd} > /dev/null 2>&1
Chase Qi50842e52017-03-27 11:31:06 +0800513 fi
514
515 if [ "$?" -ne "0" ]; then
516 echo
517 echo "${TAG}: ${cmd}"
518 echo "${TAG}: ERROR: ${NAME} returned error for ${MD5SUM_FILE}:${LINE}"
519 result=false
520 continue
521 fi
522
Anders Roxellabd41ce2022-11-23 14:18:27 +0100523 local MD5SUM="$(func_md5 ${OUT_FILE})"
Chase Qi50842e52017-03-27 11:31:06 +0800524 MD5SUM="${MD5SUM%% *}"
525 if [[ "${MD5SUM}" != "${EXPECTED_MD5SUM}" ]]; then
526 echo
527 echo "${TAG}: ${cmd}"
528 echo "${TAG}: ERROR: incorrect MD5SUM '${MD5SUM}' (expected '${EXPECTED_MD5SUM}')"
529 result=false
530 continue
531 fi
532 done < ${MD5SUM_FILE}
533 echo "done"
534
535 if [ -f ${OUT_FILE} ]; then
536 rm ${OUT_FILE}
537 fi
538
539 if ${result}; then
540 echo "${TAG}: ${NAME}: PASSED"
541 echo "[${TAG}]: test passed"
542 else
543 echo "${TAG}: ${NAME}: FAILED"
544 echo "[${TAG}]: test failed"
545 fi
546 return 0
547}
548
549run_video_codec_h263_dec()
550{
551 local TAG="video_codec_h263_dec"
552 local NAME="H.263 decoder test"
553 local DATA_DIR="/data/linaro-android-userspace-test/video-codec/h263"
554 local MD5SUM_FILE="${DATA_DIR}/MD5SUM.dec"
555 local RUN="libstagefright_m4vh263dec_test"
556 local OUT_FILE="/data/local/tmp/video-codec-test.out"
557
558 echo
559 echo "${TAG}: Running ${NAME}"
560 if [ ! -f ${MD5SUM_FILE} ]; then
561 echo "${TAG}: ERROR: MD5SUM file '${MD5SUM_FILE}' does not exist"
562 echo "${TAG}: ${NAME}: FAILED"
563 echo "[${TAG}]: test failed"
564 return 1
565 fi
566
567 echo -n "${TAG}: Decoding and verifying output"
568
569 local TEST_FILE=""
570 local OUT_WIDTH=""
571 local OUT_HEIGHT=""
572 local EXPECTED_MD5SUM=""
573 local LINE=0
574 while read -r TEST_FILE OUT_WIDTH OUT_HEIGHT EXPECTED_MD5SUM
575 do
576 ((LINE++))
577
578 # Skip comment or empty lines
579 if [[ "${TEST_FILE:0:1}" == "#" ]] || [ -z "${TEST_FILE}" ]; then
580 continue
581 fi
582
583 echo -n "."
584
585 if [ -z "${OUT_WIDTH}" -o -z "${OUT_HEIGHT}" -o -z "${EXPECTED_MD5SUM}" ]; then
586 echo "${TAG}: ERROR: invalid MD5SUM entry (${MD5SUM_FILE}:${LINE})"
587 echo "${TAG}: ${NAME}: FAILED"
588 echo "[${TAG}]: test failed"
589 return 1
590 fi
591
592 TEST_FILE="${DATA_DIR}/${TEST_FILE}"
593 if [ ! -f ${TEST_FILE} ]; then
594 echo "${TAG}: ERROR: test file '${TEST_FILE}' does not exist"
595 echo "${TAG}: ${NAME}: FAILED"
596 echo "[${TAG}]: test failed"
597 return 1
598 fi
599
600 if [ "${VERBOSE}" -eq "1" ]; then
601 ${RUN} ${TEST_FILE} ${OUT_FILE} ${OUT_WIDTH} ${OUT_HEIGHT}
602 else
Anders Roxelld0a77562022-11-23 14:09:05 +0100603 ${RUN} ${TEST_FILE} ${OUT_FILE} ${OUT_WIDTH} ${OUT_HEIGHT} > /dev/null 2>&1
Chase Qi50842e52017-03-27 11:31:06 +0800604 fi
605
606 if [ "$?" -ne "0" ]; then
607 echo
608 echo "${TAG}: ERROR: ${NAME} returned error for ${MD5SUM_FILE}:${LINE}"
609 echo "${TAG}: ${NAME}: FAILED"
610 echo "[${TAG}]: test failed"
611 return 1
612 fi
613
Anders Roxellabd41ce2022-11-23 14:18:27 +0100614 local MD5SUM="$(func_md5 ${OUT_FILE})"
Chase Qi50842e52017-03-27 11:31:06 +0800615 MD5SUM="${MD5SUM%% *}"
616 if [[ "${MD5SUM}" != "${EXPECTED_MD5SUM}" ]]; then
617 echo
618 echo "${TAG}: ERROR: incorrect MD5SUM '${MD5SUM}' (expected '${EXPECTED_MD5SUM}')"
619 echo "${TAG}: ${NAME}: FAILED"
620 echo "[${TAG}]: test failed"
621 return 1
622 fi
623 done < ${MD5SUM_FILE}
624 echo "done"
625
626 if [ -f ${OUT_FILE} ]; then
627 rm ${OUT_FILE}
628 fi
629
630 echo "${TAG}: ${NAME}: PASSED"
631 echo "[${TAG}]: test passed"
632 return $?
633}
634
635run_video_codec_h263_enc()
636{
637 local TAG="video_codec_h263_enc"
638 local NAME="H.263 encoder test"
639 local DATA_DIR="/data/linaro-android-userspace-test/video-codec/h263"
640 local MD5SUM_FILE="${DATA_DIR}/MD5SUM.enc"
641 local RUN="libstagefright_m4vh263enc_test"
642 local OUT_FILE="/data/local/tmp/video-codec-test.out"
643
644 echo
645 echo "${TAG}: Running ${NAME}"
646 if [ ! -f ${MD5SUM_FILE} ]; then
647 echo "${TAG}: ERROR: MD5SUM file '${MD5SUM_FILE}' does not exist"
648 echo "${TAG}: ${NAME}: FAILED"
649 echo "[${TAG}]: test failed"
650 return 1
651 fi
652
653 echo -n "${TAG}: Encoding and verifying output"
654
655 local TEST_FILE=""
656 local OUT_WIDTH=""
657 local OUT_HEIGHT=""
658 local OUT_FRAMERATE=""
659 local OUT_BITRATE=""
660 local EXPECTED_MD5SUM=""
661 local LINE=0
662 while read -r TEST_FILE OUT_WIDTH OUT_HEIGHT OUT_FRAMERATE OUT_BITRATE EXPECTED_MD5SUM
663 do
664 ((LINE++))
665
666 # Skip comment or empty lines
667 if [[ "${TEST_FILE:0:1}" == "#" ]] || [ -z "${TEST_FILE}" ]; then
668 continue
669 fi
670
671 echo -n "."
672 if [ -z "${OUT_WIDTH}" -o -z "${OUT_HEIGHT}" -o -z "${OUT_FRAMERATE}" -o -z "${OUT_BITRATE}" -o -z "${EXPECTED_MD5SUM}" ]; then
673 echo "${TAG}: ERROR: invalid MD5SUM entry (${MD5SUM_FILE}:${LINE})"
674 echo "${TAG}: ${NAME}: FAILED"
675 echo "[${TAG}]: test failed"
676 return 1
677 fi
678
679 TEST_FILE="${DATA_DIR}/${TEST_FILE}"
680 if [ ! -f ${TEST_FILE} ]; then
681 echo "${TAG}: ERROR: test file '${TEST_FILE}' does not exist"
682 echo "${TAG}: ${NAME}: FAILED"
683 echo "[${TAG}]: test failed"
684 return 1
685 fi
686
687 if [ "${VERBOSE}" -eq "1" ]; then
688 ${RUN} ${TEST_FILE} ${OUT_FILE} mpeg4 ${OUT_WIDTH} ${OUT_HEIGHT} ${OUT_FRAMERATE} ${OUT_BITRATE}
689 else
Anders Roxelld0a77562022-11-23 14:09:05 +0100690 ${RUN} ${TEST_FILE} ${OUT_FILE} mpeg4 ${OUT_WIDTH} ${OUT_HEIGHT} ${OUT_FRAMERATE} ${OUT_BITRATE} > /dev/null 2>&1
Chase Qi50842e52017-03-27 11:31:06 +0800691 fi
692
693 if [ "$?" -ne "0" ]; then
694 echo
695 echo "${TAG}: ERROR: ${NAME} returned error for ${MD5SUM_FILE}:${LINE}"
696 echo "${TAG}: ${NAME}: FAILED"
697 echo "[${TAG}]: test failed"
698 return 1
699 fi
700
Anders Roxellabd41ce2022-11-23 14:18:27 +0100701 local MD5SUM="$(func_md5 ${OUT_FILE})"
Chase Qi50842e52017-03-27 11:31:06 +0800702 MD5SUM="${MD5SUM%% *}"
703 if [[ "${MD5SUM}" != "${EXPECTED_MD5SUM}" ]]; then
704 echo
705 echo "${TAG}: ERROR: incorrect MD5SUM '${MD5SUM}' (expected '${EXPECTED_MD5SUM}')"
706 echo "${TAG}: ${NAME}: FAILED"
707 echo "[${TAG}]: test failed"
708 echo "${MD5SUM}" >> /sdcard/md5.txt
709 return 1
710 fi
711 done < ${MD5SUM_FILE}
712 echo "done"
713
714 if [ -f ${OUT_FILE} ]; then
715 rm ${OUT_FILE}
716 fi
717
718 echo "${TAG}: ${NAME}: PASSED"
719 echo "[${TAG}]: test passed"
720 return $?
721}
722
723run_tests() {
724 local RET=0
725 for TEST in $TESTS;
726 do
727 if [[ "${ALL_TESTS}" == *"${TEST}"* ]]; then
728 # Function names follow the naming convention of:
729 # run_<test_name>
730 run_${TEST}
731 RET=$(( RET + $? ))
732 else
733 echo
734 echo "Unrecognized test '${TEST}'"
735 usage
736 RET=$(( RET + 1 ))
737 break
738 fi
739 done
740 return ${RET}
741}
742
743# Terse output by default
744VERBOSE=0
745
746TESTS=""
747
748while getopts "hvt:" OPT
749do
750 case $OPT in
751 h)
752 usage
753 exit 1
754 ;;
755 t)
756 TESTS=$OPTARG
757 ;;
758 v)
759 VERBOSE=1
760 ;;
761 *)
762 usage
763 exit
764 esac
765done
766
767if [ -z "${TESTS}" ]; then
768 # Run all tests by default
769 TESTS="${ALL_TESTS}"
770 echo "Running all tests"
771else
772 # Expand out any batch tests
773 TESTS="${TESTS//${ALL_AUDIO_CODECS_OPT}/${ALL_AUDIO_CODECS}}"
774 TESTS="${TESTS//${ALL_SPEECH_CODECS_OPT}/${ALL_SPEECH_CODECS}}"
775 TESTS="${TESTS//${ALL_VIDEO_CODECS_OPT}/${ALL_VIDEO_CODECS}}"
776 TESTS="${TESTS//${ALL_CODECS_OPT}/${ALL_CODECS}}"
777 TESTS="${TESTS//${ALL_TESTS_OPT}/${ALL_TESTS}}"
778fi
779
780run_tests
781return $?