ref: fb9083c5f8e0aea1059585f22366e14f9bf5b0a0
parent: 4a08619d8df4e9c8cc3a353b9fd4a99c63c06779
author: lieff <[email protected]>
date: Mon Feb 3 18:59:42 EST 2020
support seek in test
--- a/minimp3_test.c
+++ b/minimp3_test.c
@@ -95,7 +95,7 @@
return 0;
}
-static void decode_file(const char *input_file_name, const unsigned char *buf_ref, int ref_size, FILE *file_out, const int wave_out, const int mode)
+static void decode_file(const char *input_file_name, const unsigned char *buf_ref, int ref_size, FILE *file_out, const int wave_out, const int mode, int position)
{
mp3dec_t mp3d;
int i, res = -1, data_bytes, total_samples = 0, maxdiff = 0;
@@ -102,6 +102,7 @@
double MSE = 0.0, psnr;
mp3dec_file_info_t info;
+ memset(&info, 0, sizeof(info));
if (MODE_LOAD == mode)
{
res = mp3dec_load(&mp3d, input_file_name, &info, 0, 0);
@@ -109,7 +110,6 @@
{
frames_iterate_data d = { &mp3d, &info, 0 };
mp3dec_init(&mp3d);
- memset(&info, 0, sizeof(info));
res = mp3dec_iterate(input_file_name, frames_iterate_cb, &d);
} else if (MODE_STREAM == mode)
{
@@ -117,7 +117,22 @@
res = mp3dec_ex_open(&dec, input_file_name, MP3D_SEEK_TO_SAMPLE);
info.samples = dec.samples;
info.buffer = malloc(dec.samples*sizeof(int16_t));
- mp3dec_ex_read(&dec, info.buffer, dec.samples);
+ info.hz = dec.info.hz;
+ info.channels = dec.info.channels;
+ if (position < 0)
+ {
+ position = (uint64_t)info.samples*rand()/RAND_MAX;
+ printf("info: seek to %d/%d\n", position, (int)info.samples);
+ }
+ if (position)
+ {
+ info.samples -= MINIMP3_MIN(info.samples, (size_t)position);
+ int skip_ref = MINIMP3_MIN((size_t)ref_size, position*sizeof(int16_t));
+ buf_ref += skip_ref;
+ ref_size -= skip_ref;
+ mp3dec_ex_seek(&dec, position);
+ }
+ mp3dec_ex_read(&dec, info.buffer, info.samples);
} else
{
printf("error: unknown mode");
@@ -206,7 +221,7 @@
int main(int argc, char *argv[])
#endif
{
- int wave_out = 0, mode = 0, i, ref_size;
+ int wave_out = 0, mode = 0, position = 0, i, ref_size;
for(i = 1; i < argc; i++)
{
if (argv[i][0] != '-')
@@ -214,6 +229,7 @@
switch (argv[i][1])
{
case 'm': i++; if (i < argc) mode = atoi(argv[i]); break;
+ case 's': i++; if (i < argc) position = atoi(argv[i]); break;
default:
printf("error: unrecognized option\n");
return 1;
@@ -245,7 +261,7 @@
printf("error: no file names given\n");
return 1;
}
- decode_file(input_file_name, buf_ref, ref_size, file_out, wave_out, mode);
+ decode_file(input_file_name, buf_ref, ref_size, file_out, wave_out, mode, position);
#ifdef __AFL_HAVE_MANUAL_CONTROL
}
#endif
--- a/scripts/build.sh
+++ b/scripts/build.sh
@@ -11,11 +11,10 @@
echo testing mp4 mode...
gcc $CFLAGS -DMP4_MODE -o minimp3 minimp3_test.c -lm
-scripts/test_mode.sh 1
+scripts/test_mode.sh 1 0
echo testing stream mode...
-gcc $CFLAGS -DMP4_MODE -o minimp3 minimp3_test.c -lm
-scripts/test_mode.sh 2
+scripts/test_mode.sh 2 0
echo testing coverage x86 w sse...
gcc -coverage -O0 -m32 -std=c89 -msse2 -DMINIMP3_TEST -DMINIMP3_NO_WAV -o minimp3 minimp3_test.c -lm
--- a/scripts/test_mode.sh
+++ b/scripts/test_mode.sh
@@ -6,6 +6,7 @@
APP=./minimp3
MODE=$1
+POSITION=$2
set +e
for i in vectors/l3-compl.bit vectors/l3-he_32khz.bit vectors/l3-he_44khz.bit vectors/l3-he_48khz.bit \
@@ -12,9 +13,9 @@
vectors/l3-hecommon.bit vectors/l3-he_mode.bit vectors/l3-si.bit vectors/l3-si_block.bit vectors/l3-si_huff.bit \
vectors/l3-sin1k0db.bit vectors/l3-test45.bit vectors/l3-test46.bit vectors/M2L3_bitrate_16_all.bit \
vectors/M2L3_bitrate_22_all.bit vectors/M2L3_bitrate_24_all.bit vectors/M2L3_compl24.bit vectors/M2L3_noise.bit; do
-$APP -m $MODE $i ${i%.*}.pcm
+$APP -m $MODE -s $POSITION $i ${i%.*}.pcm
retval=$?
-echo $i exited with code=$retval
+echo -m $MODE -s $POSITION $i exited with code=$retval
if [ ! $retval -eq 0 ]; then
exit 1
fi