mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-08-13 09:36:46 +00:00
libsndfile: update to 1.0.19 (LBSNDF-7)
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-0186 http://www.mega-nerd.com/libsndfile/libsndfile-1.0.19.tar.gz This will likely require a fresh boostrap to updated source checkouts. git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@13415 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
** Copyright (C) 1999-2004 Erik de Castro Lopo <erikd@mega-nerd.com>
|
||||
** Copyright (C) 1999-2009 Erik de Castro Lopo <erikd@mega-nerd.com>
|
||||
**
|
||||
** This program is free software; you can redistribute it and/or modify
|
||||
** it under the terms of the GNU General Public License as published by
|
||||
@@ -54,9 +54,27 @@ static void dbl_scale_clip_test_32 (const char *filename, int filetype, float ma
|
||||
static void dbl_scale_clip_test_08 (const char *filename, int filetype, float maxval) ;
|
||||
|
||||
|
||||
|
||||
static void flt_short_clip_read_test (const char *filename, int filetype) ;
|
||||
static void flt_int_clip_read_test (const char *filename, int filetype) ;
|
||||
|
||||
static void dbl_short_clip_read_test (const char *filename, int filetype) ;
|
||||
static void dbl_int_clip_read_test (const char *filename, int filetype) ;
|
||||
|
||||
|
||||
|
||||
static void short_flt_scale_write_test (const char *filename, int filetype) ;
|
||||
static void short_dbl_scale_write_test (const char *filename, int filetype) ;
|
||||
|
||||
static void int_flt_scale_write_test (const char *filename, int filetype) ;
|
||||
static void int_dbl_scale_write_test (const char *filename, int filetype) ;
|
||||
|
||||
|
||||
typedef union
|
||||
{ double dbl [BUFFER_SIZE] ;
|
||||
float flt [BUFFER_SIZE] ;
|
||||
int i [BUFFER_SIZE] ;
|
||||
short s [BUFFER_SIZE] ;
|
||||
} BUFFER ;
|
||||
|
||||
/* Data buffer. */
|
||||
@@ -91,6 +109,16 @@ main (void)
|
||||
dbl_scale_clip_test_32 ("scale_clip_be32.au", SF_ENDIAN_BIG | SF_FORMAT_AU | SF_FORMAT_PCM_32, 1.0 * 0x80000000) ;
|
||||
dbl_scale_clip_test_32 ("scale_clip_le32.au", SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_PCM_32, 1.0 * 0x80000000) ;
|
||||
|
||||
flt_short_clip_read_test ("flt_short.au" , SF_ENDIAN_BIG | SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
|
||||
flt_int_clip_read_test ("flt_int.au" , SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
|
||||
dbl_short_clip_read_test ("dbl_short.au" , SF_ENDIAN_BIG | SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
|
||||
dbl_int_clip_read_test ("dbl_int.au" , SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
|
||||
|
||||
short_flt_scale_write_test ("short_flt.au" , SF_ENDIAN_BIG | SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
|
||||
int_flt_scale_write_test ("int_flt.au" , SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_FLOAT) ;
|
||||
short_dbl_scale_write_test ("short_dbl.au" , SF_ENDIAN_BIG | SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
|
||||
int_dbl_scale_write_test ("int_dbl.au" , SF_ENDIAN_LITTLE | SF_FORMAT_AU | SF_FORMAT_DOUBLE) ;
|
||||
|
||||
return 0 ;
|
||||
} /* main */
|
||||
|
||||
@@ -113,7 +141,7 @@ flt_scale_clip_test_16 (const char *filename, int filetype, float maxval)
|
||||
data_in = buffer_in.flt ;
|
||||
|
||||
for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
|
||||
{ data_out [k] = SINE_AMP * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
|
||||
{ data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
|
||||
data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
|
||||
} ;
|
||||
|
||||
@@ -243,7 +271,7 @@ flt_scale_clip_test_24 (const char *filename, int filetype, float maxval)
|
||||
data_in = buffer_in.flt ;
|
||||
|
||||
for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
|
||||
{ data_out [k] = SINE_AMP * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
|
||||
{ data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
|
||||
data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
|
||||
} ;
|
||||
|
||||
@@ -373,7 +401,7 @@ flt_scale_clip_test_32 (const char *filename, int filetype, float maxval)
|
||||
data_in = buffer_in.flt ;
|
||||
|
||||
for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
|
||||
{ data_out [k] = SINE_AMP * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
|
||||
{ data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
|
||||
data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
|
||||
} ;
|
||||
|
||||
@@ -503,7 +531,7 @@ flt_scale_clip_test_08 (const char *filename, int filetype, float maxval)
|
||||
data_in = buffer_in.flt ;
|
||||
|
||||
for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
|
||||
{ data_out [k] = SINE_AMP * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
|
||||
{ data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
|
||||
data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
|
||||
} ;
|
||||
|
||||
@@ -635,7 +663,7 @@ dbl_scale_clip_test_16 (const char *filename, int filetype, float maxval)
|
||||
data_in = buffer_in.dbl ;
|
||||
|
||||
for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
|
||||
{ data_out [k] = SINE_AMP * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
|
||||
{ data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
|
||||
data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
|
||||
} ;
|
||||
|
||||
@@ -765,7 +793,7 @@ dbl_scale_clip_test_24 (const char *filename, int filetype, float maxval)
|
||||
data_in = buffer_in.dbl ;
|
||||
|
||||
for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
|
||||
{ data_out [k] = SINE_AMP * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
|
||||
{ data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
|
||||
data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
|
||||
} ;
|
||||
|
||||
@@ -895,7 +923,7 @@ dbl_scale_clip_test_32 (const char *filename, int filetype, float maxval)
|
||||
data_in = buffer_in.dbl ;
|
||||
|
||||
for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
|
||||
{ data_out [k] = SINE_AMP * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
|
||||
{ data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
|
||||
data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
|
||||
} ;
|
||||
|
||||
@@ -1025,7 +1053,7 @@ dbl_scale_clip_test_08 (const char *filename, int filetype, float maxval)
|
||||
data_in = buffer_in.dbl ;
|
||||
|
||||
for (k = 0 ; k < HALF_BUFFER_SIZE ; k++)
|
||||
{ data_out [k] = SINE_AMP * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
|
||||
{ data_out [k] = 1.2 * sin (2 * M_PI * k / HALF_BUFFER_SIZE) ;
|
||||
data_out [k + HALF_BUFFER_SIZE] = data_out [k] * maxval ;
|
||||
} ;
|
||||
|
||||
@@ -1144,4 +1172,682 @@ dbl_scale_clip_test_08 (const char *filename, int filetype, float maxval)
|
||||
|
||||
|
||||
|
||||
/*==============================================================================
|
||||
*/
|
||||
|
||||
|
||||
static void flt_short_clip_read_test (const char *filename, int filetype)
|
||||
{ SNDFILE *file ;
|
||||
SF_INFO sfinfo ;
|
||||
float *data_out ;
|
||||
short *data_in, max_value ;
|
||||
int k ;
|
||||
|
||||
print_test_name ("flt_short_clip_read_test", filename) ;
|
||||
|
||||
data_out = buffer_out.flt ;
|
||||
data_in = buffer_in.s ;
|
||||
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
data_out [k] = 0.995 * sin (4 * M_PI * k / BUFFER_SIZE) ;
|
||||
data_out [BUFFER_SIZE / 8] = 1.0 ;
|
||||
data_out [3 * BUFFER_SIZE / 8] = -1.000000001 ;
|
||||
data_out [5 * BUFFER_SIZE / 8] = 1.0 ;
|
||||
data_out [7 * BUFFER_SIZE / 8] = -1.000000001 ;
|
||||
|
||||
memset (&sfinfo, 0, sizeof (sfinfo)) ;
|
||||
sfinfo.samplerate = 44100 ;
|
||||
sfinfo.frames = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
|
||||
sfinfo.channels = 1 ;
|
||||
sfinfo.format = filetype ;
|
||||
|
||||
/* Save unclipped data to the file. */
|
||||
file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
|
||||
test_write_float_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
|
||||
sf_close (file) ;
|
||||
|
||||
memset (&sfinfo, 0, sizeof (sfinfo)) ;
|
||||
|
||||
file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
|
||||
sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
|
||||
|
||||
sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
|
||||
|
||||
if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
|
||||
{ printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
if (sfinfo.frames != BUFFER_SIZE)
|
||||
{ printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
if (sfinfo.channels != 1)
|
||||
{ printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
check_log_buffer_or_die (file, __LINE__) ;
|
||||
|
||||
sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
|
||||
test_read_short_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
|
||||
/*-sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;-*/
|
||||
sf_close (file) ;
|
||||
|
||||
/* Check the first half. */
|
||||
max_value = 0 ;
|
||||
for (k = 0 ; k < sfinfo.frames ; k++)
|
||||
{ /* Check if data_out has different sign from data_in. */
|
||||
if ((data_out [k] < 0.0 && data_in [k] > 0) || (data_out [k] > 0.0 && data_in [k] < 0))
|
||||
{ printf ("\n\nLine %d: Data wrap around at index %d/%d (%f -> %d).\n\n", __LINE__, k, BUFFER_SIZE, data_out [k], data_in [k]) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
max_value = (max_value > abs (data_in [k])) ? max_value : abs (data_in [k]) ;
|
||||
} ;
|
||||
|
||||
unlink (filename) ;
|
||||
puts ("ok") ;
|
||||
} /* flt_short_clip_read_test */
|
||||
static void flt_int_clip_read_test (const char *filename, int filetype)
|
||||
{ SNDFILE *file ;
|
||||
SF_INFO sfinfo ;
|
||||
float *data_out ;
|
||||
int *data_in, max_value ;
|
||||
int k ;
|
||||
|
||||
print_test_name ("flt_int_clip_read_test", filename) ;
|
||||
|
||||
data_out = buffer_out.flt ;
|
||||
data_in = buffer_in.i ;
|
||||
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
data_out [k] = 0.995 * sin (4 * M_PI * k / BUFFER_SIZE) ;
|
||||
data_out [BUFFER_SIZE / 8] = 1.0 ;
|
||||
data_out [3 * BUFFER_SIZE / 8] = -1.000000001 ;
|
||||
data_out [5 * BUFFER_SIZE / 8] = 1.0 ;
|
||||
data_out [7 * BUFFER_SIZE / 8] = -1.000000001 ;
|
||||
|
||||
memset (&sfinfo, 0, sizeof (sfinfo)) ;
|
||||
sfinfo.samplerate = 44100 ;
|
||||
sfinfo.frames = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
|
||||
sfinfo.channels = 1 ;
|
||||
sfinfo.format = filetype ;
|
||||
|
||||
/* Save unclipped data to the file. */
|
||||
file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
|
||||
test_write_float_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
|
||||
sf_close (file) ;
|
||||
|
||||
memset (&sfinfo, 0, sizeof (sfinfo)) ;
|
||||
|
||||
file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
|
||||
sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
|
||||
|
||||
sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
|
||||
|
||||
if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
|
||||
{ printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
if (sfinfo.frames != BUFFER_SIZE)
|
||||
{ printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
if (sfinfo.channels != 1)
|
||||
{ printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
check_log_buffer_or_die (file, __LINE__) ;
|
||||
|
||||
sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
|
||||
test_read_int_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
|
||||
/*-sf_command (file, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ;-*/
|
||||
sf_close (file) ;
|
||||
|
||||
/* Check the first half. */
|
||||
max_value = 0 ;
|
||||
for (k = 0 ; k < sfinfo.frames ; k++)
|
||||
{ /* Check if data_out has different sign from data_in. */
|
||||
if ((data_out [k] < 0.0 && data_in [k] > 0) || (data_out [k] > 0.0 && data_in [k] < 0))
|
||||
{ printf ("\n\nLine %d: Data wrap around at index %d/%d (%f -> %d).\n\n", __LINE__, k, BUFFER_SIZE, data_out [k], data_in [k]) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
max_value = (max_value > abs (data_in [k])) ? max_value : abs (data_in [k]) ;
|
||||
} ;
|
||||
|
||||
unlink (filename) ;
|
||||
puts ("ok") ;
|
||||
} /* flt_int_clip_read_test */
|
||||
|
||||
static void dbl_short_clip_read_test (const char *filename, int filetype)
|
||||
{ SNDFILE *file ;
|
||||
SF_INFO sfinfo ;
|
||||
double *data_out ;
|
||||
short *data_in, max_value ;
|
||||
int k ;
|
||||
|
||||
print_test_name ("dbl_short_clip_read_test", filename) ;
|
||||
|
||||
data_out = buffer_out.dbl ;
|
||||
data_in = buffer_in.s ;
|
||||
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
data_out [k] = 0.995 * sin (4 * M_PI * k / BUFFER_SIZE) ;
|
||||
data_out [BUFFER_SIZE / 8] = 1.0 ;
|
||||
data_out [3 * BUFFER_SIZE / 8] = -1.000000001 ;
|
||||
data_out [5 * BUFFER_SIZE / 8] = 1.0 ;
|
||||
data_out [7 * BUFFER_SIZE / 8] = -1.000000001 ;
|
||||
|
||||
memset (&sfinfo, 0, sizeof (sfinfo)) ;
|
||||
sfinfo.samplerate = 44100 ;
|
||||
sfinfo.frames = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
|
||||
sfinfo.channels = 1 ;
|
||||
sfinfo.format = filetype ;
|
||||
|
||||
/* Save unclipped data to the file. */
|
||||
file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
|
||||
test_write_double_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
|
||||
sf_close (file) ;
|
||||
|
||||
memset (&sfinfo, 0, sizeof (sfinfo)) ;
|
||||
|
||||
file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
|
||||
sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
|
||||
|
||||
sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
|
||||
|
||||
if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
|
||||
{ printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
if (sfinfo.frames != BUFFER_SIZE)
|
||||
{ printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
if (sfinfo.channels != 1)
|
||||
{ printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
check_log_buffer_or_die (file, __LINE__) ;
|
||||
|
||||
sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
|
||||
test_read_short_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
|
||||
/*-sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;-*/
|
||||
sf_close (file) ;
|
||||
|
||||
/* Check the first half. */
|
||||
max_value = 0 ;
|
||||
for (k = 0 ; k < sfinfo.frames ; k++)
|
||||
{ /* Check if data_out has different sign from data_in. */
|
||||
if ((data_out [k] < 0.0 && data_in [k] > 0) || (data_out [k] > 0.0 && data_in [k] < 0))
|
||||
{ printf ("\n\nLine %d: Data wrap around at index %d/%d (%f -> %d).\n\n", __LINE__, k, BUFFER_SIZE, data_out [k], data_in [k]) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
max_value = (max_value > abs (data_in [k])) ? max_value : abs (data_in [k]) ;
|
||||
} ;
|
||||
|
||||
unlink (filename) ;
|
||||
puts ("ok") ;
|
||||
} /* dbl_short_clip_read_test */
|
||||
static void dbl_int_clip_read_test (const char *filename, int filetype)
|
||||
{ SNDFILE *file ;
|
||||
SF_INFO sfinfo ;
|
||||
double *data_out ;
|
||||
int *data_in, max_value ;
|
||||
int k ;
|
||||
|
||||
print_test_name ("dbl_int_clip_read_test", filename) ;
|
||||
|
||||
data_out = buffer_out.dbl ;
|
||||
data_in = buffer_in.i ;
|
||||
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
data_out [k] = 0.995 * sin (4 * M_PI * k / BUFFER_SIZE) ;
|
||||
data_out [BUFFER_SIZE / 8] = 1.0 ;
|
||||
data_out [3 * BUFFER_SIZE / 8] = -1.000000001 ;
|
||||
data_out [5 * BUFFER_SIZE / 8] = 1.0 ;
|
||||
data_out [7 * BUFFER_SIZE / 8] = -1.000000001 ;
|
||||
|
||||
memset (&sfinfo, 0, sizeof (sfinfo)) ;
|
||||
sfinfo.samplerate = 44100 ;
|
||||
sfinfo.frames = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
|
||||
sfinfo.channels = 1 ;
|
||||
sfinfo.format = filetype ;
|
||||
|
||||
/* Save unclipped data to the file. */
|
||||
file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
|
||||
test_write_double_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
|
||||
sf_close (file) ;
|
||||
|
||||
memset (&sfinfo, 0, sizeof (sfinfo)) ;
|
||||
|
||||
file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
|
||||
sf_command (file, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ;
|
||||
|
||||
sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
|
||||
|
||||
if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
|
||||
{ printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
if (sfinfo.frames != BUFFER_SIZE)
|
||||
{ printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
if (sfinfo.channels != 1)
|
||||
{ printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
check_log_buffer_or_die (file, __LINE__) ;
|
||||
|
||||
sf_command (file, SFC_SET_CLIPPING, NULL, SF_TRUE) ;
|
||||
test_read_int_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
|
||||
/*-sf_command (file, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ;-*/
|
||||
sf_close (file) ;
|
||||
|
||||
/* Check the first half. */
|
||||
max_value = 0 ;
|
||||
for (k = 0 ; k < sfinfo.frames ; k++)
|
||||
{ /* Check if data_out has different sign from data_in. */
|
||||
if ((data_out [k] < 0.0 && data_in [k] > 0) || (data_out [k] > 0.0 && data_in [k] < 0))
|
||||
{ printf ("\n\nLine %d: Data wrap around at index %d/%d (%f -> %d).\n\n", __LINE__, k, BUFFER_SIZE, data_out [k], data_in [k]) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
max_value = (max_value > abs (data_in [k])) ? max_value : abs (data_in [k]) ;
|
||||
} ;
|
||||
|
||||
unlink (filename) ;
|
||||
puts ("ok") ;
|
||||
} /* dbl_int_clip_read_test */
|
||||
|
||||
|
||||
/*==============================================================================
|
||||
*/
|
||||
|
||||
|
||||
static void short_flt_scale_write_test (const char *filename, int filetype)
|
||||
{ SNDFILE *file ;
|
||||
SF_INFO sfinfo ;
|
||||
short *data_out ;
|
||||
float *data_in, max_value ;
|
||||
int k ;
|
||||
|
||||
print_test_name ("short_flt_clip_write_test", filename) ;
|
||||
|
||||
data_out = buffer_out.s ;
|
||||
data_in = buffer_in.flt ;
|
||||
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
data_out [k] = lrintf (0x7FFFF * 0.995 * sin (4 * M_PI * k / BUFFER_SIZE)) ;
|
||||
|
||||
memset (&sfinfo, 0, sizeof (sfinfo)) ;
|
||||
sfinfo.samplerate = 44100 ;
|
||||
sfinfo.frames = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
|
||||
sfinfo.channels = 1 ;
|
||||
sfinfo.format = filetype ;
|
||||
|
||||
file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
|
||||
test_write_short_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
|
||||
sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_TRUE) ;
|
||||
test_write_short_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
|
||||
sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_FALSE) ;
|
||||
test_write_short_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
|
||||
sf_close (file) ;
|
||||
|
||||
memset (&sfinfo, 0, sizeof (sfinfo)) ;
|
||||
|
||||
file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
|
||||
|
||||
sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
|
||||
|
||||
if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
|
||||
{ printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
if (sfinfo.frames != 3 * BUFFER_SIZE)
|
||||
{ printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, 3 * BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
if (sfinfo.channels != 1)
|
||||
{ printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
check_log_buffer_or_die (file, __LINE__) ;
|
||||
|
||||
/* Check the first section. */
|
||||
test_read_float_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
|
||||
|
||||
max_value = 0.0 ;
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
|
||||
|
||||
if (max_value < 1000.0)
|
||||
{ printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
/* Check the second section. */
|
||||
test_read_float_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
|
||||
|
||||
max_value = 0.0 ;
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
|
||||
|
||||
if (max_value > 1.0)
|
||||
{ printf ("\n\nLine %d: Max value (%f) > 1.0.\n\n", __LINE__, max_value) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
/* Check the third section. */
|
||||
test_read_float_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
|
||||
|
||||
max_value = 0.0 ;
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
|
||||
|
||||
if (max_value < 1000.0)
|
||||
{ printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
sf_close (file) ;
|
||||
|
||||
unlink (filename) ;
|
||||
puts ("ok") ;
|
||||
} /* short_flt_scale_write_test */
|
||||
static void short_dbl_scale_write_test (const char *filename, int filetype)
|
||||
{ SNDFILE *file ;
|
||||
SF_INFO sfinfo ;
|
||||
short *data_out ;
|
||||
double *data_in, max_value ;
|
||||
int k ;
|
||||
|
||||
print_test_name ("short_dbl_clip_write_test", filename) ;
|
||||
|
||||
data_out = buffer_out.s ;
|
||||
data_in = buffer_in.dbl ;
|
||||
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
data_out [k] = lrint (0x7FFFF * 0.995 * sin (4 * M_PI * k / BUFFER_SIZE)) ;
|
||||
|
||||
memset (&sfinfo, 0, sizeof (sfinfo)) ;
|
||||
sfinfo.samplerate = 44100 ;
|
||||
sfinfo.frames = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
|
||||
sfinfo.channels = 1 ;
|
||||
sfinfo.format = filetype ;
|
||||
|
||||
file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
|
||||
test_write_short_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
|
||||
sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_TRUE) ;
|
||||
test_write_short_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
|
||||
sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_FALSE) ;
|
||||
test_write_short_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
|
||||
sf_close (file) ;
|
||||
|
||||
memset (&sfinfo, 0, sizeof (sfinfo)) ;
|
||||
|
||||
file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
|
||||
|
||||
sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
|
||||
|
||||
if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
|
||||
{ printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
if (sfinfo.frames != 3 * BUFFER_SIZE)
|
||||
{ printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, 3 * BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
if (sfinfo.channels != 1)
|
||||
{ printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
check_log_buffer_or_die (file, __LINE__) ;
|
||||
|
||||
/* Check the first section. */
|
||||
test_read_double_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
|
||||
|
||||
max_value = 0.0 ;
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
|
||||
|
||||
if (max_value < 1000.0)
|
||||
{ printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
/* Check the second section. */
|
||||
test_read_double_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
|
||||
|
||||
max_value = 0.0 ;
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
|
||||
|
||||
if (max_value > 1.0)
|
||||
{ printf ("\n\nLine %d: Max value (%f) > 1.0.\n\n", __LINE__, max_value) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
/* Check the third section. */
|
||||
test_read_double_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
|
||||
|
||||
max_value = 0.0 ;
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
|
||||
|
||||
if (max_value < 1000.0)
|
||||
{ printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
sf_close (file) ;
|
||||
|
||||
unlink (filename) ;
|
||||
puts ("ok") ;
|
||||
} /* short_dbl_scale_write_test */
|
||||
|
||||
static void int_flt_scale_write_test (const char *filename, int filetype)
|
||||
{ SNDFILE *file ;
|
||||
SF_INFO sfinfo ;
|
||||
int *data_out ;
|
||||
float *data_in, max_value ;
|
||||
int k ;
|
||||
|
||||
print_test_name ("int_flt_clip_write_test", filename) ;
|
||||
|
||||
data_out = buffer_out.i ;
|
||||
data_in = buffer_in.flt ;
|
||||
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
data_out [k] = lrintf (0x7FFFFFFF * 0.995 * sin (4 * M_PI * k / BUFFER_SIZE)) ;
|
||||
|
||||
memset (&sfinfo, 0, sizeof (sfinfo)) ;
|
||||
sfinfo.samplerate = 44100 ;
|
||||
sfinfo.frames = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
|
||||
sfinfo.channels = 1 ;
|
||||
sfinfo.format = filetype ;
|
||||
|
||||
file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
|
||||
test_write_int_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
|
||||
sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_TRUE) ;
|
||||
test_write_int_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
|
||||
sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_FALSE) ;
|
||||
test_write_int_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
|
||||
sf_close (file) ;
|
||||
|
||||
memset (&sfinfo, 0, sizeof (sfinfo)) ;
|
||||
|
||||
file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
|
||||
|
||||
sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
|
||||
|
||||
if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
|
||||
{ printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
if (sfinfo.frames != 3 * BUFFER_SIZE)
|
||||
{ printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, 3 * BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
if (sfinfo.channels != 1)
|
||||
{ printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
check_log_buffer_or_die (file, __LINE__) ;
|
||||
|
||||
/* Check the first section. */
|
||||
test_read_float_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
|
||||
|
||||
max_value = 0.0 ;
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
|
||||
|
||||
if (max_value < 1000.0)
|
||||
{ printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
/* Check the second section. */
|
||||
test_read_float_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
|
||||
|
||||
max_value = 0.0 ;
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
|
||||
|
||||
if (max_value > 1.0)
|
||||
{ printf ("\n\nLine %d: Max value (%f) > 1.0.\n\n", __LINE__, max_value) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
/* Check the third section. */
|
||||
test_read_float_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
|
||||
|
||||
max_value = 0.0 ;
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
|
||||
|
||||
if (max_value < 1000.0)
|
||||
{ printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
sf_close (file) ;
|
||||
|
||||
unlink (filename) ;
|
||||
puts ("ok") ;
|
||||
} /* int_flt_scale_write_test */
|
||||
static void int_dbl_scale_write_test (const char *filename, int filetype)
|
||||
{ SNDFILE *file ;
|
||||
SF_INFO sfinfo ;
|
||||
int *data_out ;
|
||||
double *data_in, max_value ;
|
||||
int k ;
|
||||
|
||||
print_test_name ("int_dbl_clip_write_test", filename) ;
|
||||
|
||||
data_out = buffer_out.i ;
|
||||
data_in = buffer_in.dbl ;
|
||||
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
data_out [k] = lrint (0x7FFFFFFF * 0.995 * sin (4 * M_PI * k / BUFFER_SIZE)) ;
|
||||
|
||||
memset (&sfinfo, 0, sizeof (sfinfo)) ;
|
||||
sfinfo.samplerate = 44100 ;
|
||||
sfinfo.frames = 123456789 ; /* Wrong length. Library should correct this on sf_close. */
|
||||
sfinfo.channels = 1 ;
|
||||
sfinfo.format = filetype ;
|
||||
|
||||
file = test_open_file_or_die (filename, SFM_WRITE, &sfinfo, SF_TRUE, __LINE__) ;
|
||||
test_write_int_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
|
||||
sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_TRUE) ;
|
||||
test_write_int_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
|
||||
sf_command (file, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_FALSE) ;
|
||||
test_write_int_or_die (file, 0, data_out, BUFFER_SIZE, __LINE__) ;
|
||||
sf_close (file) ;
|
||||
|
||||
memset (&sfinfo, 0, sizeof (sfinfo)) ;
|
||||
|
||||
file = test_open_file_or_die (filename, SFM_READ, &sfinfo, SF_TRUE, __LINE__) ;
|
||||
|
||||
sfinfo.format &= (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK) ;
|
||||
|
||||
if (sfinfo.format != (filetype & (SF_FORMAT_TYPEMASK | SF_FORMAT_SUBMASK)))
|
||||
{ printf ("\n\nLine %d: Returned format incorrect (0x%08X => 0x%08X).\n\n", __LINE__, filetype, sfinfo.format) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
if (sfinfo.frames != 3 * BUFFER_SIZE)
|
||||
{ printf ("\n\nLine %d: Incorrect number of frames in file (%d => %ld).\n\n", __LINE__, 3 * BUFFER_SIZE, SF_COUNT_TO_LONG (sfinfo.frames)) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
if (sfinfo.channels != 1)
|
||||
{ printf ("\n\nLine %d: Incorrect number of channels in file.\n\n", __LINE__) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
check_log_buffer_or_die (file, __LINE__) ;
|
||||
|
||||
/* Check the first section. */
|
||||
test_read_double_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
|
||||
|
||||
max_value = 0.0 ;
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
|
||||
|
||||
if (max_value < 1000.0)
|
||||
{ printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
/* Check the second section. */
|
||||
test_read_double_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
|
||||
|
||||
max_value = 0.0 ;
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
|
||||
|
||||
if (max_value > 1.0)
|
||||
{ printf ("\n\nLine %d: Max value (%f) > 1.0.\n\n", __LINE__, max_value) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
/* Check the third section. */
|
||||
test_read_double_or_die (file, 0, data_in, BUFFER_SIZE, __LINE__) ;
|
||||
|
||||
max_value = 0.0 ;
|
||||
for (k = 0 ; k < BUFFER_SIZE ; k++)
|
||||
max_value = (max_value > fabs (data_in [k])) ? max_value : fabs (data_in [k]) ;
|
||||
|
||||
if (max_value < 1000.0)
|
||||
{ printf ("\n\nLine %d: Max value (%f) < 1000.0.\n\n", __LINE__, max_value) ;
|
||||
exit (1) ;
|
||||
} ;
|
||||
|
||||
sf_close (file) ;
|
||||
|
||||
unlink (filename) ;
|
||||
puts ("ok") ;
|
||||
} /* int_dbl_scale_write_test */
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user