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