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