Lines Matching refs:ft

69 static void prcwriteheader(sox_format_t * ft);
71 static int seek(sox_format_t * ft, uint64_t offset) in seek() argument
73 priv_t * p = (priv_t *)ft->priv; in seek()
74 if (ft->encoding.encoding == SOX_ENCODING_ALAW) in seek()
75 return lsx_offset_seek(ft, (off_t)p->data_start, (off_t)offset); in seek()
116 static int prc_checkheader(sox_format_t * ft, char *head) in prc_checkheader() argument
118 lsx_readbuf(ft, head, sizeof(prc_header)); in prc_checkheader()
122 static int startread(sox_format_t * ft) in startread() argument
124 priv_t * p = (priv_t *)ft->priv; in startread()
133 if (prc_checkheader(ft, head)) in startread()
136 lsx_fail_errno(ft,SOX_EHDR,"Not a Psion Record file"); in startread()
140 lsx_readb(ft, &byte); in startread()
142 lsx_fail_errno(ft, SOX_EHDR, "Invalid length byte for application name string %d", (int)(byte)); in startread()
148 lsx_reads(ft, appname, (size_t)byte); in startread()
150 lsx_fail_errno(ft, SOX_EHDR, "Invalid application name string %.63s", appname); in startread()
154 lsx_readdw(ft, &len); in startread()
158 lsx_readdw(ft, &encoding); in startread()
161 ft->encoding.encoding = SOX_ENCODING_ALAW; in startread()
163 ft->encoding.encoding = SOX_ENCODING_IMA_ADPCM; in startread()
165 lsx_fail_errno(ft, SOX_EHDR, "Unrecognised encoding"); in startread()
169 lsx_readw(ft, &reps); /* Number of repeats */ in startread()
172 lsx_readb(ft, &volume); in startread()
177 lsx_readb(ft, &byte); /* Unused and seems always zero */ in startread()
179 lsx_readdw(ft, &repgap); /* Time between repeats in usec */ in startread()
182 lsx_readdw(ft, &listlen); /* Length of samples list */ in startread()
185 if (ft->signal.rate != 0 && ft->signal.rate != 8000) in startread()
187 ft->signal.rate = 8000; in startread()
189 if (ft->signal.channels != 1 && ft->signal.channels != 0) in startread()
191 ft->signal.channels = 1; in startread()
193 p->data_start = lsx_tell(ft); in startread()
194 ft->signal.length = p->nsamp / ft->signal.channels; in startread()
196 if (ft->encoding.encoding == SOX_ENCODING_ALAW) { in startread()
197 ft->encoding.bits_per_sample = 8; in startread()
198 if (lsx_rawstartread(ft)) in startread()
200 } else if (ft->encoding.encoding == SOX_ENCODING_IMA_ADPCM) { in startread()
202 if (lsx_adpcm_ima_start(ft, &p->adpcm)) in startread()
212 static unsigned read_cardinal(sox_format_t * ft) in read_cardinal() argument
217 if (lsx_readb(ft, &byte) == SOX_EOF) in read_cardinal()
224 if (lsx_readb(ft, &byte) == SOX_EOF) in read_cardinal()
231 if (lsx_readb(ft, &byte) == SOX_EOF) in read_cardinal()
235 if (lsx_readb(ft, &byte) == SOX_EOF) in read_cardinal()
246 static size_t read_samples(sox_format_t * ft, sox_sample_t *buf, size_t samp) in read_samples() argument
248 priv_t * p = (priv_t *)ft->priv; in read_samples()
252 if (ft->encoding.encoding == SOX_ENCODING_IMA_ADPCM) { in read_samples()
256 unsigned framelen = read_cardinal(ft); in read_samples()
266 lsx_debug_more("compressed length %d", read_cardinal(ft)); in read_samples()
268 lsx_readdw(ft, &trash); in read_samples()
272 lsx_adpcm_reset(&p->adpcm, ft->encoding.encoding); in read_samples()
276 read = lsx_adpcm_read(ft, &p->adpcm, buf, nsamp); in read_samples()
282 return lsx_rawread(ft, buf, samp); in read_samples()
286 static int stopread(sox_format_t * ft) in stopread() argument
288 priv_t * p = (priv_t *)ft->priv; in stopread()
290 if (ft->encoding.encoding == SOX_ENCODING_IMA_ADPCM) in stopread()
291 return lsx_adpcm_stopread(ft, &p->adpcm); in stopread()
305 static int startwrite(sox_format_t * ft) in startwrite() argument
307 priv_t * p = (priv_t *)ft->priv; in startwrite()
309 if (ft->encoding.encoding == SOX_ENCODING_ALAW) { in startwrite()
310 if (lsx_rawstartwrite(ft)) in startwrite()
312 } else if (ft->encoding.encoding == SOX_ENCODING_IMA_ADPCM) { in startwrite()
313 if (lsx_adpcm_ima_start(ft, &p->adpcm)) in startwrite()
322 prcwriteheader(ft); in startwrite()
324 p->data_start = lsx_tell(ft); in startwrite()
329 static void write_cardinal(sox_format_t * ft, unsigned a) in write_cardinal() argument
336 lsx_writeb(ft, byte); in write_cardinal()
340 lsx_writeb(ft, byte); in write_cardinal()
343 lsx_writeb(ft, byte); in write_cardinal()
347 lsx_writeb(ft, byte); in write_cardinal()
350 lsx_writeb(ft, byte); in write_cardinal()
353 lsx_writeb(ft, byte); in write_cardinal()
356 lsx_writeb(ft, byte); in write_cardinal()
360 static size_t write_samples(sox_format_t * ft, const sox_sample_t *buf, size_t nsamp) in write_samples() argument
362 priv_t * p = (priv_t *)ft->priv; in write_samples()
366 if (ft->encoding.encoding == SOX_ENCODING_IMA_ADPCM) { in write_samples()
370 write_cardinal(ft, (unsigned) samp); in write_samples()
372 write_cardinal(ft, (unsigned) ((samp / 2) + (samp % 2) + 4)); in write_samples()
375 lsx_writedw(ft, (unsigned) samp); in write_samples()
376 lsx_adpcm_reset(&p->adpcm, ft->encoding.encoding); in write_samples()
377 written1 = lsx_adpcm_write(ft, &p->adpcm, buf + written, samp); in write_samples()
380 lsx_adpcm_flush(ft, &p->adpcm); in write_samples()
384 written = lsx_rawwrite(ft, buf, nsamp); in write_samples()
389 static int stopwrite(sox_format_t * ft) in stopwrite() argument
391 priv_t * p = (priv_t *)ft->priv; in stopwrite()
393 p->nbytes = lsx_tell(ft) - p->data_start; in stopwrite()
395 if (!ft->seekable) { in stopwrite()
400 if (lsx_seeki(ft, (off_t)0, 0) != 0) { in stopwrite()
401 lsx_fail_errno(ft,errno,"Can't rewind output file to rewrite Psion header."); in stopwrite()
404 prcwriteheader(ft); in stopwrite()
408 static void prcwriteheader(sox_format_t * ft) in prcwriteheader() argument
410 priv_t * p = (priv_t *)ft->priv; in prcwriteheader()
412 lsx_writebuf(ft, prc_header, sizeof(prc_header)); in prcwriteheader()
413 lsx_writes(ft, "\x2arecord.app"); in prcwriteheader()
416 lsx_writedw(ft, p->nsamp); in prcwriteheader()
418 if (ft->encoding.encoding == SOX_ENCODING_ALAW) in prcwriteheader()
419 lsx_writedw(ft, 0); in prcwriteheader()
421 lsx_writedw(ft, 0x100001a1); /* ADPCM */ in prcwriteheader()
423 lsx_writew(ft, 0); /* Number of repeats */ in prcwriteheader()
424 lsx_writeb(ft, 3); /* Volume: use default value of Record.app */ in prcwriteheader()
425 lsx_writeb(ft, 0); /* Unused and seems always zero */ in prcwriteheader()
426 lsx_writedw(ft, 0); /* Time between repeats in usec */ in prcwriteheader()
429 lsx_writedw(ft, p->nbytes); /* Number of bytes of data */ in prcwriteheader()