annotate src/libsamplerate-0.1.9/tests/simple_test.c @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents 481f5f8c5634
children
rev   line source
Chris@41 1 /*
Chris@41 2 ** Copyright (c) 2002-2016, Erik de Castro Lopo <erikd@mega-nerd.com>
Chris@41 3 ** All rights reserved.
Chris@41 4 **
Chris@41 5 ** This code is released under 2-clause BSD license. Please see the
Chris@41 6 ** file at : https://github.com/erikd/libsamplerate/blob/master/COPYING
Chris@41 7 */
Chris@41 8
Chris@41 9 #include <stdio.h>
Chris@41 10 #include <stdlib.h>
Chris@41 11 #include <string.h>
Chris@41 12 #include <math.h>
Chris@41 13
Chris@41 14 #include <samplerate.h>
Chris@41 15
Chris@41 16 #include "util.h"
Chris@41 17
Chris@41 18 #define BUFFER_LEN 2048
Chris@41 19
Chris@41 20 static void simple_test (int converter, double ratio) ;
Chris@41 21
Chris@41 22 int
Chris@41 23 main (void)
Chris@41 24 { static double src_ratios [] =
Chris@41 25 { 1.0001, 0.099, 0.1, 0.33333333, 0.789, 1.9, 3.1, 9.9
Chris@41 26 } ;
Chris@41 27
Chris@41 28 int k ;
Chris@41 29
Chris@41 30 puts ("") ;
Chris@41 31
Chris@41 32 puts (" Zero Order Hold interpolator :") ;
Chris@41 33 for (k = 0 ; k < ARRAY_LEN (src_ratios) ; k++)
Chris@41 34 simple_test (SRC_ZERO_ORDER_HOLD, src_ratios [k]) ;
Chris@41 35
Chris@41 36 puts (" Linear interpolator :") ;
Chris@41 37 for (k = 0 ; k < ARRAY_LEN (src_ratios) ; k++)
Chris@41 38 simple_test (SRC_LINEAR, src_ratios [k]) ;
Chris@41 39
Chris@41 40 puts (" Sinc interpolator :") ;
Chris@41 41 for (k = 0 ; k < ARRAY_LEN (src_ratios) ; k++)
Chris@41 42 simple_test (SRC_SINC_FASTEST, src_ratios [k]) ;
Chris@41 43
Chris@41 44 puts ("") ;
Chris@41 45
Chris@41 46 return 0 ;
Chris@41 47 } /* main */
Chris@41 48
Chris@41 49 static void
Chris@41 50 simple_test (int converter, double src_ratio)
Chris@41 51 { static float input [BUFFER_LEN], output [BUFFER_LEN] ;
Chris@41 52
Chris@41 53 SRC_DATA src_data ;
Chris@41 54
Chris@41 55 int input_len, output_len, error, terminate ;
Chris@41 56
Chris@41 57 printf ("\tsimple_test (SRC ratio = %6.4f) ........... ", src_ratio) ;
Chris@41 58 fflush (stdout) ;
Chris@41 59
Chris@41 60 /* Calculate maximun input and output lengths. */
Chris@41 61 if (src_ratio >= 1.0)
Chris@41 62 { output_len = BUFFER_LEN ;
Chris@41 63 input_len = (int) floor (BUFFER_LEN / src_ratio) ;
Chris@41 64 }
Chris@41 65 else
Chris@41 66 { input_len = BUFFER_LEN ;
Chris@41 67 output_len = (int) floor (BUFFER_LEN * src_ratio) ;
Chris@41 68 } ;
Chris@41 69
Chris@41 70 /* Reduce input_len by 10 so output is longer than necessary. */
Chris@41 71 input_len -= 10 ;
Chris@41 72
Chris@41 73 if (output_len > BUFFER_LEN)
Chris@41 74 { printf ("\n\nLine %d : output_len > BUFFER_LEN\n\n", __LINE__) ;
Chris@41 75 exit (1) ;
Chris@41 76 } ;
Chris@41 77
Chris@41 78 memset (&src_data, 0, sizeof (src_data)) ;
Chris@41 79
Chris@41 80 src_data.data_in = input ;
Chris@41 81 src_data.input_frames = input_len ;
Chris@41 82
Chris@41 83 src_data.src_ratio = src_ratio ;
Chris@41 84
Chris@41 85 src_data.data_out = output ;
Chris@41 86 src_data.output_frames = BUFFER_LEN ;
Chris@41 87
Chris@41 88 if ((error = src_simple (&src_data, converter, 1)))
Chris@41 89 { printf ("\n\nLine %d : %s\n\n", __LINE__, src_strerror (error)) ;
Chris@41 90 exit (1) ;
Chris@41 91 } ;
Chris@41 92
Chris@41 93 terminate = (int) ceil ((src_ratio >= 1.0) ? src_ratio : 1.0 / src_ratio) ;
Chris@41 94
Chris@41 95 if (fabs (src_data.output_frames_gen - src_ratio * input_len) > 2 * terminate)
Chris@41 96 { printf ("\n\nLine %d : bad output data length %ld should be %d.\n", __LINE__,
Chris@41 97 src_data.output_frames_gen, (int) floor (src_ratio * input_len)) ;
Chris@41 98 printf ("\tsrc_ratio : %.4f\n", src_ratio) ;
Chris@41 99 printf ("\tinput_len : %d\n\toutput_len : %d\n\n", input_len, output_len) ;
Chris@41 100 exit (1) ;
Chris@41 101 } ;
Chris@41 102
Chris@41 103 puts ("ok") ;
Chris@41 104
Chris@41 105 return ;
Chris@41 106 } /* simple_test */
Chris@41 107