Lines Matching defs:psf
115 static int w64_read_header (SF_PRIVATE *psf, int *blockalign, int *framesperblock) ;
116 static int w64_write_header (SF_PRIVATE *psf, int calc_length) ;
117 static int w64_close (SF_PRIVATE *psf) ;
124 w64_open (SF_PRIVATE *psf)
130 psf->container_data = wpriv ;
132 if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR &&psf->filelength > 0))
133 { if ((error = w64_read_header (psf, &blockalign, &framesperblock)))
137 if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_W64)
140 subformat = SF_CODEC (psf->sf.format) ;
142 if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
143 { if (psf->is_pipe)
146 psf->endian = SF_ENDIAN_LITTLE ; /* All W64 files are little endian. */
148 psf->blockwidth = psf->bytewidth * psf->sf.channels ;
151 { blockalign = wavlike_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
158 psf->filelength = SF_COUNT_MAX - 10000 ;
159 psf->datalength = psf->filelength ;
160 if (psf->sf.frames <= 0)
161 psf->sf.frames = (psf->blockwidth) ? psf->filelength / psf->blockwidth : psf->filelength ;
164 if ((error = w64_write_header (psf, SF_FALSE)))
167 psf->write_header = w64_write_header ;
170 psf->container_close = w64_close ;
174 error = pcm_init (psf) ;
180 error = pcm_init (psf) ;
184 error = ulaw_init (psf) ;
188 error = alaw_init (psf) ;
193 error = float32_init (psf) ;
197 error = double64_init (psf) ;
201 error = wavlike_ima_init (psf, blockalign, framesperblock) ;
205 error = wavlike_msadpcm_init (psf, blockalign, framesperblock) ;
210 error = gsm610_init (psf) ;
224 w64_read_header (SF_PRIVATE *psf, int *blockalign, int *framesperblock)
231 if ((wpriv = psf->container_data) == NULL)
236 psf_binheader_readf (psf, "p", 0) ;
240 if (psf->header.indx & 0x7)
241 psf_binheader_readf (psf, "j", 8 - (psf->header.indx & 0x7)) ;
247 bytesread = psf_binheader_readf (psf, "eh8", &marker, &chunk_size) ;
255 if (psf->filelength != chunk_size)
256 psf_log_printf (psf, "riff : %D (should be %D)\n", chunk_size, psf->filelength) ;
258 psf_log_printf (psf, "riff : %D\n", chunk_size) ;
262 bytesread += psf_binheader_readf (psf, "h", &marker) ;
266 psf_log_printf (psf, "wave\n") ;
273 psf_log_printf (psf, "Looks like an ACID file. Exiting.\n") ;
280 psf_log_printf (psf, " fmt : %D\n", chunk_size) ;
285 if ((error = wavlike_read_fmt_chunk (psf, (int) chunk_size)))
289 psf_binheader_readf (psf, "j", 8 - (chunk_size % 8)) ;
299 psf_binheader_readf (psf, "e8", &frames) ;
300 psf_log_printf (psf, "fact : %D\n frames : %D\n",
311 psf->dataoffset = psf_ftell (psf) ;
312 psf->datalength = SF_MIN (chunk_size - 24, psf->filelength - psf->dataoffset) ;
317 psf_log_printf (psf, "data : %D\n", chunk_size) ;
321 if (! psf->sf.seekable)
325 psf_fseek (psf, chunk_size, SEEK_CUR) ;
330 psf_log_printf (psf, "levl : %D\n", chunk_size) ;
334 psf_log_printf (psf, "list : %D\n", chunk_size) ;
338 psf_log_printf (psf, "junk : %D\n", chunk_size) ;
342 psf_log_printf (psf, "bext : %D\n", chunk_size) ;
346 psf_log_printf (psf, "marker : %D\n", chunk_size) ;
350 psf_log_printf (psf, "summary list : %D\n", chunk_size) ;
354 psf_log_printf (psf, "*** Unknown chunk marker (%X) at position %D with length %D. Skipping and continuing.\n", marker, psf_ftell (psf) - 8, chunk_size) ;
358 if (chunk_size >= psf->filelength)
359 { psf_log_printf (psf, "*** Chunk size %u > file length %D. Exiting parser.\n", chunk_size, psf->filelength) ;
363 if (psf->sf.seekable == 0 && (parsestage & HAVE_data))
366 if (psf_ftell (psf) >= (psf->filelength - (2 * SIGNED_SIZEOF (dword))))
371 psf_binheader_readf (psf, "j", dword - 24) ;
375 if (psf->dataoffset <= 0)
378 if (psf->sf.channels < 1)
381 if (psf->sf.channels > SF_MAX_CHANNELS)
384 psf->endian = SF_ENDIAN_LITTLE ; /* All W64 files are little endian. */
386 if (psf_ftell (psf) != psf->dataoffset)
387 psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
389 if (psf->blockwidth)
390 { if (psf->filelength - psf->dataoffset < psf->datalength)
391 psf->sf.frames = (psf->filelength - psf->dataoffset) / psf->blockwidth ;
393 psf->sf.frames = psf->datalength / psf->blockwidth ;
400 psf->sf.format = SF_FORMAT_W64 | u_bitwidth_to_subformat (psf->bytewidth * 8) ;
404 psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_ULAW) ;
408 psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_ALAW) ;
412 psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_MS_ADPCM) ;
418 psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_IMA_ADPCM) ;
424 psf->sf.format = (SF_FORMAT_W64 | SF_FORMAT_GSM610) ;
428 psf->sf.format = SF_FORMAT_W64 ;
429 psf->sf.format |= (psf->bytewidth == 8) ? SF_FORMAT_DOUBLE : SF_FORMAT_FLOAT ;
439 w64_write_header (SF_PRIVATE *psf, int calc_length)
444 current = psf_ftell (psf) ;
447 { psf->filelength = psf_get_filelen (psf) ;
449 psf->datalength = psf->filelength - psf->dataoffset ;
450 if (psf->dataend)
451 psf->datalength -= psf->filelength - psf->dataend ;
453 if (psf->bytewidth)
454 psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
458 psf->header.ptr [0] = 0 ;
459 psf->header.indx = 0 ;
460 psf_fseek (psf, 0, SEEK_SET) ;
463 psf_binheader_writef (psf, "eh8hh", BHWh (riff_MARKER16), BHW8 (psf->filelength), BHWh (wave_MARKER16), BHWh (fmt_MARKER16)) ;
465 subformat = SF_CODEC (psf->sf.format) ;
477 psf_binheader_writef (psf, "e8224", BHW8 (fmt_size), BHW2 (WAVE_FORMAT_PCM), BHW2 (psf->sf.channels), BHW4 (psf->sf.samplerate)) ;
479 psf_binheader_writef (psf, "e4", BHW4 (psf->sf.samplerate * psf->bytewidth * psf->sf.channels)) ;
481 psf_binheader_writef (psf, "e22", BHW2 (psf->bytewidth * psf->sf.channels), BHW2 (psf->bytewidth * 8)) ;
491 psf_binheader_writef (psf, "e8224", BHW8 (fmt_size), BHW2 (WAVE_FORMAT_IEEE_FLOAT), BHW2 (psf->sf.channels), BHW4 (psf->sf.samplerate)) ;
493 psf_binheader_writef (psf, "e4", BHW4 (psf->sf.samplerate * psf->bytewidth * psf->sf.channels)) ;
495 psf_binheader_writef (psf, "e22", BHW2 (psf->bytewidth * psf->sf.channels), BHW2 (psf->bytewidth * 8)) ;
506 psf_binheader_writef (psf, "e8224", BHW8 (fmt_size), BHW2 (WAVE_FORMAT_MULAW), BHW2 (psf->sf.channels), BHW4 (psf->sf.samplerate)) ;
508 psf_binheader_writef (psf, "e4", BHW4 (psf->sf.samplerate * psf->bytewidth * psf->sf.channels)) ;
510 psf_binheader_writef (psf, "e22", BHW2 (psf->bytewidth * psf->sf.channels), BHW2 (8)) ;
521 psf_binheader_writef (psf, "e8224", BHW8 (fmt_size), BHW2 (WAVE_FORMAT_ALAW), BHW2 (psf->sf.channels), BHW4 (psf->sf.samplerate)) ;
523 psf_binheader_writef (psf, "e4", BHW4 (psf->sf.samplerate * psf->bytewidth * psf->sf.channels)) ;
525 psf_binheader_writef (psf, "e22", BHW2 (psf->bytewidth * psf->sf.channels), BHW2 (8)) ;
534 blockalign = wavlike_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
535 framesperblock = 2 * (blockalign - 4 * psf->sf.channels) / psf->sf.channels + 1 ;
536 bytespersec = (psf->sf.samplerate * blockalign) / framesperblock ;
544 psf_binheader_writef (psf, "e822", BHW8 (fmt_size), BHW2 (WAVE_FORMAT_IMA_ADPCM), BHW2 (psf->sf.channels)) ;
547 psf_binheader_writef (psf, "e44", BHW4 (psf->sf.samplerate), BHW4 (bytespersec)) ;
550 psf_binheader_writef (psf, "e2222", BHW2 (blockalign), BHW2 (4), BHW2 (2), BHW2 (framesperblock)) ;
559 blockalign = wavlike_srate2blocksize (psf->sf.samplerate * psf->sf.channels) ;
560 framesperblock = 2 + 2 * (blockalign - 7 * psf->sf.channels) / psf->sf.channels ;
561 bytespersec = (psf->sf.samplerate * blockalign) / framesperblock ;
570 psf_binheader_writef (psf, "e822", BHW8 (fmt_size), BHW2 (WAVE_FORMAT_MS_ADPCM), BHW2 (psf->sf.channels)) ;
573 psf_binheader_writef (psf, "e44", BHW4 (psf->sf.samplerate), BHW4 (bytespersec)) ;
576 psf_binheader_writef (psf, "e22222", BHW2 (blockalign), BHW2 (4), BHW2 (extrabytes), BHW2 (framesperblock), BHW2 (7)) ;
578 wavlike_msadpcm_write_adapt_coeffs (psf) ;
588 bytespersec = (psf->sf.samplerate * WAVLIKE_GSM610_BLOCKSIZE) / WAVLIKE_GSM610_SAMPLES ;
596 psf_binheader_writef (psf, "e822", BHW8 (fmt_size), BHW2 (WAVE_FORMAT_GSM610), BHW2 (psf->sf.channels)) ;
599 psf_binheader_writef (psf, "e44", BHW4 (psf->sf.samplerate), BHW4 (bytespersec)) ;
602 psf_binheader_writef (psf, "e2222", BHW2 (WAVLIKE_GSM610_BLOCKSIZE), BHW2 (0), BHW2 (2), BHW2 (WAVLIKE_GSM610_SAMPLES)) ;
613 psf_binheader_writef (psf, "z", BHWz (fmt_pad)) ;
616 psf_binheader_writef (psf, "eh88", BHWh (fact_MARKER16), BHW8 ((sf_count_t) (16 + 8 + 8)), BHW8 (psf->sf.frames)) ;
618 psf_binheader_writef (psf, "eh8", BHWh (data_MARKER16), BHW8 (psf->datalength + 24)) ;
619 psf_fwrite (psf->header.ptr, psf->header.indx, 1, psf) ;
621 if (psf->error)
622 return psf->error ;
624 psf->dataoffset = psf->header.indx ;
627 psf_fseek (psf, current, SEEK_SET) ;
629 return psf->error ;
633 w64_close (SF_PRIVATE *psf)
635 if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
636 w64_write_header (psf, SF_TRUE) ;