Lines Matching refs:ft
75 static int readtrailer(sox_format_t * ft, struct smptrailer *trailer) in readtrailer() argument
80 lsx_readw(ft, &trash16); /* read reserved word */ in readtrailer()
82 lsx_readdw(ft, &(trailer->loops[i].start)); in readtrailer()
83 ft->oob.loops[i].start = trailer->loops[i].start; in readtrailer()
84 lsx_readdw(ft, &(trailer->loops[i].end)); in readtrailer()
85 ft->oob.loops[i].length = in readtrailer()
87 lsx_readb(ft, &(trailer->loops[i].type)); in readtrailer()
88 ft->oob.loops[i].type = trailer->loops[i].type; in readtrailer()
89 lsx_readw(ft, &(trailer->loops[i].count)); in readtrailer()
90 ft->oob.loops[i].count = trailer->loops[i].count; in readtrailer()
93 if (lsx_readbuf(ft, trailer->markers[i].name, MARKERLEN) != MARKERLEN) in readtrailer()
95 lsx_fail_errno(ft,SOX_EHDR,"EOF in SMP"); in readtrailer()
99 lsx_readdw(ft, &(trailer->markers[i].position)); in readtrailer()
101 lsx_readsb(ft, &(trailer->MIDInote)); in readtrailer()
102 lsx_readdw(ft, &(trailer->rate)); in readtrailer()
103 lsx_readdw(ft, &(trailer->SMPTEoffset)); in readtrailer()
104 lsx_readdw(ft, &(trailer->CycleSize)); in readtrailer()
111 static void settrailer(sox_format_t * ft, struct smptrailer *trailer, sox_rate_t rate) in settrailer() argument
116 if (ft->oob.loops[i].type != 0) { in settrailer()
117 trailer->loops[i].start = ft->oob.loops[i].start > UINT_MAX in settrailer()
119 : ft->oob.loops[i].start; in settrailer()
121 trailer->loops[i].end = ft->oob.loops[i].start + ft->oob.loops[i].length > UINT_MAX in settrailer()
123 : ft->oob.loops[i].start + ft->oob.loops[i].length; in settrailer()
124 trailer->loops[i].type = ft->oob.loops[i].type; in settrailer()
125 trailer->loops[i].count = ft->oob.loops[i].count; in settrailer()
149 static int writetrailer(sox_format_t * ft, struct smptrailer *trailer) in writetrailer() argument
153 lsx_writew(ft, 0); /* write the reserved word */ in writetrailer()
155 lsx_writedw(ft, trailer->loops[i].start); in writetrailer()
156 lsx_writedw(ft, trailer->loops[i].end); in writetrailer()
157 lsx_writeb(ft, trailer->loops[i].type); in writetrailer()
158 lsx_writew(ft, trailer->loops[i].count); in writetrailer()
161 if (lsx_writes(ft, trailer->markers[i].name) == SOX_EOF) in writetrailer()
163 lsx_fail_errno(ft,SOX_EHDR,"EOF in SMP"); in writetrailer()
166 lsx_writedw(ft, trailer->markers[i].position); in writetrailer()
168 lsx_writeb(ft, (uint8_t)(trailer->MIDInote)); in writetrailer()
169 lsx_writedw(ft, trailer->rate); in writetrailer()
170 lsx_writedw(ft, trailer->SMPTEoffset); in writetrailer()
171 lsx_writedw(ft, trailer->CycleSize); in writetrailer()
175 static int sox_smpseek(sox_format_t * ft, uint64_t offset) in sox_smpseek() argument
179 priv_t * smp = (priv_t *) ft->priv; in sox_smpseek()
181 new_offset = offset * (ft->encoding.bits_per_sample >> 3); in sox_smpseek()
183 channel_block = ft->signal.channels * (ft->encoding.bits_per_sample >> 3); in sox_smpseek()
193 ft->sox_errno = lsx_seeki(ft, (off_t)new_offset, SEEK_SET); in sox_smpseek()
195 if( ft->sox_errno == SOX_SUCCESS ) in sox_smpseek()
196 smp->NoOfSamps = ft->signal.length - (new_offset / (ft->encoding.bits_per_sample >> 3)); in sox_smpseek()
198 return(ft->sox_errno); in sox_smpseek()
207 static int sox_smpstartread(sox_format_t * ft) in sox_smpstartread() argument
209 priv_t * smp = (priv_t *) ft->priv; in sox_smpstartread()
218 if (! ft->seekable) in sox_smpstartread()
220 lsx_fail_errno(ft,SOX_EOF,"SMP input file must be a file, not a pipe"); in sox_smpstartread()
225 if (lsx_readbuf(ft, &header, HEADERSIZE) != HEADERSIZE) in sox_smpstartread()
227 lsx_fail_errno(ft,SOX_EHDR,"unexpected EOF in SMP header"); in sox_smpstartread()
232 lsx_fail_errno(ft,SOX_EHDR,"SMP header does not begin with magic word %s", SVmagic); in sox_smpstartread()
237 lsx_fail_errno(ft,SOX_EHDR,"SMP header is not version %s", SVvers); in sox_smpstartread()
252 sox_append_comments(&ft->oob.comments, smp->comment); in sox_smpstartread()
255 lsx_readdw(ft, &dw); in sox_smpstartread()
258 samplestart = lsx_tell(ft); in sox_smpstartread()
262 if (lsx_seeki(ft, (off_t)(smp->NoOfSamps * 2), 1) == -1) in sox_smpstartread()
264 lsx_fail_errno(ft,errno,"SMP unable to seek to trailer"); in sox_smpstartread()
267 if (readtrailer(ft, &trailer)) in sox_smpstartread()
269 lsx_fail_errno(ft,SOX_EHDR,"unexpected EOF in SMP trailer"); in sox_smpstartread()
274 if (lsx_seeki(ft, (off_t)samplestart, 0) == -1) in sox_smpstartread()
276 lsx_fail_errno(ft,errno,"SMP unable to seek back to start of sample data"); in sox_smpstartread()
280 ft->signal.rate = (int) trailer.rate; in sox_smpstartread()
281 ft->encoding.bits_per_sample = 16; in sox_smpstartread()
282 ft->encoding.encoding = SOX_ENCODING_SIGN2; in sox_smpstartread()
283 ft->signal.channels = 1; in sox_smpstartread()
285 ft->signal.length = smp->NoOfSamps; in sox_smpstartread()
300 ft->oob.instr.nloops = 0; in sox_smpstartread()
303 ft->oob.instr.nloops++; in sox_smpstartread()
304 for(i = 0; i < ft->oob.instr.nloops; i++) { in sox_smpstartread()
305 ft->oob.loops[i].type = trailer.loops[i].type; in sox_smpstartread()
306 ft->oob.loops[i].count = trailer.loops[i].count; in sox_smpstartread()
307 ft->oob.loops[i].start = trailer.loops[i].start; in sox_smpstartread()
308 ft->oob.loops[i].length = trailer.loops[i].end in sox_smpstartread()
311 ft->oob.instr.MIDIlow = ft->oob.instr.MIDIhi = in sox_smpstartread()
312 ft->oob.instr.MIDInote = trailer.MIDInote; in sox_smpstartread()
313 if (ft->oob.instr.nloops > 0) in sox_smpstartread()
314 ft->oob.instr.loopmode = SOX_LOOP_8; in sox_smpstartread()
316 ft->oob.instr.loopmode = SOX_LOOP_NONE; in sox_smpstartread()
327 static size_t sox_smpread(sox_format_t * ft, sox_sample_t *buf, size_t len) in sox_smpread() argument
329 priv_t * smp = (priv_t *) ft->priv; in sox_smpread()
334 lsx_readw(ft, &datum); in sox_smpread()
341 static int sox_smpstartwrite(sox_format_t * ft) in sox_smpstartwrite() argument
343 priv_t * smp = (priv_t *) ft->priv; in sox_smpstartwrite()
345 char * comment = lsx_cat_comments(ft->oob.comments); in sox_smpstartwrite()
348 if (! ft->seekable) in sox_smpstartwrite()
350 lsx_fail_errno(ft,SOX_EOF,"Output .smp file must be a file, not a pipe"); in sox_smpstartwrite()
361 if(lsx_writebuf(ft, &header, HEADERSIZE) != HEADERSIZE) in sox_smpstartwrite()
363 lsx_fail_errno(ft,errno,"SMP: Can't write header completely"); in sox_smpstartwrite()
366 lsx_writedw(ft, 0); /* write as zero length for now, update later */ in sox_smpstartwrite()
372 static size_t sox_smpwrite(sox_format_t * ft, const sox_sample_t *buf, size_t len) in sox_smpwrite() argument
374 priv_t * smp = (priv_t *) ft->priv; in sox_smpwrite()
380 datum = (int) SOX_SAMPLE_TO_SIGNED_16BIT(*buf++, ft->clips); in sox_smpwrite()
381 lsx_writew(ft, (uint16_t)datum); in sox_smpwrite()
389 static int sox_smpstopwrite(sox_format_t * ft) in sox_smpstopwrite() argument
391 priv_t * smp = (priv_t *) ft->priv; in sox_smpstopwrite()
395 settrailer(ft, &trailer, ft->signal.rate); in sox_smpstopwrite()
396 writetrailer(ft, &trailer); in sox_smpstopwrite()
397 if (lsx_seeki(ft, (off_t)112, 0) == -1) in sox_smpstopwrite()
399 lsx_fail_errno(ft,errno,"SMP unable to seek back to save size"); in sox_smpstopwrite()
402 lsx_writedw(ft, smp->NoOfSamps > UINT_MAX ? UINT_MAX : (unsigned)smp->NoOfSamps); in sox_smpstopwrite()