Chris@40
|
1 /*
|
Chris@40
|
2 ** Copyright (C) 2001-2014 Erik de Castro Lopo <erikd@mega-nerd.com>
|
Chris@40
|
3 **
|
Chris@40
|
4 ** This program is free software; you can redistribute it and/or modify
|
Chris@40
|
5 ** it under the terms of the GNU General Public License as published by
|
Chris@40
|
6 ** the Free Software Foundation; either version 2 of the License, or
|
Chris@40
|
7 ** (at your option) any later version.
|
Chris@40
|
8 **
|
Chris@40
|
9 ** This program is distributed in the hope that it will be useful,
|
Chris@40
|
10 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
Chris@40
|
11 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
Chris@40
|
12 ** GNU General Public License for more details.
|
Chris@40
|
13 **
|
Chris@40
|
14 ** You should have received a copy of the GNU General Public License
|
Chris@40
|
15 ** along with this program; if not, write to the Free Software
|
Chris@40
|
16 ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
Chris@40
|
17 */
|
Chris@40
|
18
|
Chris@40
|
19 #include "sfconfig.h"
|
Chris@40
|
20
|
Chris@40
|
21 #include <stdio.h>
|
Chris@40
|
22 #include <stdlib.h>
|
Chris@40
|
23 #include <string.h>
|
Chris@40
|
24 #include <math.h>
|
Chris@40
|
25
|
Chris@40
|
26 #if HAVE_UNISTD_H
|
Chris@40
|
27 #include <unistd.h>
|
Chris@40
|
28 #endif
|
Chris@40
|
29
|
Chris@40
|
30 #include <sndfile.h>
|
Chris@40
|
31
|
Chris@40
|
32 #include "utils.h"
|
Chris@40
|
33
|
Chris@40
|
34 static void stdout_test (int typemajor, int count) ;
|
Chris@40
|
35
|
Chris@40
|
36 int
|
Chris@40
|
37 main (int argc, char *argv [])
|
Chris@40
|
38 { int do_all, test_count = 0 ;
|
Chris@40
|
39
|
Chris@40
|
40 if (argc != 2)
|
Chris@40
|
41 { fprintf (stderr, "This program cannot be run by itself. It needs\n") ;
|
Chris@40
|
42 fprintf (stderr, "to be run from the stdio_test program.\n") ;
|
Chris@40
|
43 exit (1) ;
|
Chris@40
|
44 } ;
|
Chris@40
|
45
|
Chris@40
|
46 do_all = ! strcmp (argv [1], "all") ;
|
Chris@40
|
47
|
Chris@40
|
48 if (do_all || ! strcmp (argv [1], "raw"))
|
Chris@40
|
49 { stdout_test (SF_FORMAT_RAW, PIPE_TEST_LEN) ;
|
Chris@40
|
50 test_count ++ ;
|
Chris@40
|
51 } ;
|
Chris@40
|
52
|
Chris@40
|
53 if (do_all || ! strcmp (argv [1], "wav"))
|
Chris@40
|
54 { stdout_test (SF_FORMAT_WAV, PIPE_TEST_LEN) ;
|
Chris@40
|
55 test_count ++ ;
|
Chris@40
|
56 } ;
|
Chris@40
|
57
|
Chris@40
|
58 if (do_all || ! strcmp (argv [1], "aiff"))
|
Chris@40
|
59 { stdout_test (SF_FORMAT_AIFF, PIPE_TEST_LEN) ;
|
Chris@40
|
60 test_count ++ ;
|
Chris@40
|
61 } ;
|
Chris@40
|
62
|
Chris@40
|
63 if (do_all || ! strcmp (argv [1], "au"))
|
Chris@40
|
64 { stdout_test (SF_FORMAT_AU, PIPE_TEST_LEN) ;
|
Chris@40
|
65 test_count ++ ;
|
Chris@40
|
66 } ;
|
Chris@40
|
67
|
Chris@40
|
68 if (do_all || ! strcmp (argv [1], "paf"))
|
Chris@40
|
69 { stdout_test (SF_FORMAT_PAF, PIPE_TEST_LEN) ;
|
Chris@40
|
70 test_count ++ ;
|
Chris@40
|
71 } ;
|
Chris@40
|
72
|
Chris@40
|
73 if (do_all || ! strcmp (argv [1], "svx"))
|
Chris@40
|
74 { stdout_test (SF_FORMAT_SVX, PIPE_TEST_LEN) ;
|
Chris@40
|
75 test_count ++ ;
|
Chris@40
|
76 } ;
|
Chris@40
|
77
|
Chris@40
|
78 if (do_all || ! strcmp (argv [1], "nist"))
|
Chris@40
|
79 { stdout_test (SF_FORMAT_NIST, PIPE_TEST_LEN) ;
|
Chris@40
|
80 test_count ++ ;
|
Chris@40
|
81 } ;
|
Chris@40
|
82
|
Chris@40
|
83 if (do_all || ! strcmp (argv [1], "ircam"))
|
Chris@40
|
84 { stdout_test (SF_FORMAT_IRCAM, PIPE_TEST_LEN) ;
|
Chris@40
|
85 test_count ++ ;
|
Chris@40
|
86 } ;
|
Chris@40
|
87
|
Chris@40
|
88 if (do_all || ! strcmp (argv [1], "voc"))
|
Chris@40
|
89 { stdout_test (SF_FORMAT_VOC, PIPE_TEST_LEN) ;
|
Chris@40
|
90 test_count ++ ;
|
Chris@40
|
91 } ;
|
Chris@40
|
92
|
Chris@40
|
93 if (do_all || ! strcmp (argv [1], "w64"))
|
Chris@40
|
94 { stdout_test (SF_FORMAT_W64, PIPE_TEST_LEN) ;
|
Chris@40
|
95 test_count ++ ;
|
Chris@40
|
96 } ;
|
Chris@40
|
97
|
Chris@40
|
98 if (do_all || ! strcmp (argv [1], "mat4"))
|
Chris@40
|
99 { stdout_test (SF_FORMAT_MAT4, PIPE_TEST_LEN) ;
|
Chris@40
|
100 test_count ++ ;
|
Chris@40
|
101 } ;
|
Chris@40
|
102
|
Chris@40
|
103 if (do_all || ! strcmp (argv [1], "mat5"))
|
Chris@40
|
104 { stdout_test (SF_FORMAT_MAT5, PIPE_TEST_LEN) ;
|
Chris@40
|
105 test_count ++ ;
|
Chris@40
|
106 } ;
|
Chris@40
|
107
|
Chris@40
|
108 if (do_all || ! strcmp (argv [1], "pvf"))
|
Chris@40
|
109 { stdout_test (SF_FORMAT_PVF, PIPE_TEST_LEN) ;
|
Chris@40
|
110 test_count ++ ;
|
Chris@40
|
111 } ;
|
Chris@40
|
112
|
Chris@40
|
113 if (test_count == 0)
|
Chris@40
|
114 { fprintf (stderr, "\n******************************************\n") ;
|
Chris@40
|
115 fprintf (stderr, "* stdout_test : No '%s' test defined.\n", argv [1]) ;
|
Chris@40
|
116 fprintf (stderr, "******************************************\n") ;
|
Chris@40
|
117 return 1 ;
|
Chris@40
|
118 } ;
|
Chris@40
|
119
|
Chris@40
|
120 return 0 ;
|
Chris@40
|
121 } /* main */
|
Chris@40
|
122
|
Chris@40
|
123 static void
|
Chris@40
|
124 stdout_test (int typemajor, int count)
|
Chris@40
|
125 { static short data [PIPE_TEST_LEN] ;
|
Chris@40
|
126
|
Chris@40
|
127 SNDFILE *file ;
|
Chris@40
|
128 SF_INFO sfinfo ;
|
Chris@40
|
129 int k, total, this_write ;
|
Chris@40
|
130
|
Chris@40
|
131 sfinfo.samplerate = 44100 ;
|
Chris@40
|
132 sfinfo.format = (typemajor | SF_FORMAT_PCM_16) ;
|
Chris@40
|
133 sfinfo.channels = 1 ;
|
Chris@40
|
134 sfinfo.frames = 0 ;
|
Chris@40
|
135
|
Chris@40
|
136 /* Create some random data. */
|
Chris@40
|
137 for (k = 0 ; k < PIPE_TEST_LEN ; k++)
|
Chris@40
|
138 data [k] = PIPE_INDEX (k) ;
|
Chris@40
|
139
|
Chris@40
|
140 if ((file = sf_open ("-", SFM_WRITE, &sfinfo)) == NULL)
|
Chris@40
|
141 { fprintf (stderr, "%s % d: sf_open_write failed with error : %s\n",
|
Chris@40
|
142 __func__, __LINE__, sf_strerror (NULL)) ;
|
Chris@40
|
143 exit (1) ;
|
Chris@40
|
144 } ;
|
Chris@40
|
145
|
Chris@40
|
146 if (sfinfo.frames != 0)
|
Chris@40
|
147 { fprintf (stderr, "%s % d: Frames is %d (should be 0).\n",
|
Chris@40
|
148 __func__, __LINE__, (int) sfinfo.frames) ;
|
Chris@40
|
149 exit (1) ;
|
Chris@40
|
150 } ;
|
Chris@40
|
151
|
Chris@40
|
152 total = 0 ;
|
Chris@40
|
153
|
Chris@40
|
154 while (total < count)
|
Chris@40
|
155 { this_write = (count - total > 1024) ? 1024 : count - total ;
|
Chris@40
|
156 if ((k = sf_write_short (file, data + total, this_write)) != this_write)
|
Chris@40
|
157 { fprintf (stderr, "sf_write_short # %d failed with short write (%d -> %d)\n", count, this_write, k) ;
|
Chris@40
|
158 exit (1) ;
|
Chris@40
|
159 } ;
|
Chris@40
|
160 total += k ;
|
Chris@40
|
161 } ;
|
Chris@40
|
162
|
Chris@40
|
163 sf_close (file) ;
|
Chris@40
|
164
|
Chris@40
|
165 return ;
|
Chris@40
|
166 } /* stdout_test */
|
Chris@40
|
167
|