Lines Matching defs:psf
90 static sf_count_t flac_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
91 static int flac_byterate (SF_PRIVATE *psf) ;
92 static int flac_close (SF_PRIVATE *psf) ;
94 static int flac_enc_init (SF_PRIVATE *psf) ;
95 static int flac_read_header (SF_PRIVATE *psf) ;
97 static sf_count_t flac_read_flac2s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
98 static sf_count_t flac_read_flac2i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
99 static sf_count_t flac_read_flac2f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
100 static sf_count_t flac_read_flac2d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
102 static sf_count_t flac_write_s2flac (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
103 static sf_count_t flac_write_i2flac (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
104 static sf_count_t flac_write_f2flac (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
105 static sf_count_t flac_write_d2flac (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
120 static int flac_command (SF_PRIVATE *psf, int command, void *data, int datasize) ;
175 flac_buffer_copy (SF_PRIVATE *psf)
176 { FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
181 if (psf->sf.channels != (int) frame->header.channels)
182 { psf_log_printf (psf, "Error: FLAC frame changed from %d to %d channels\n"
184 psf->sf.channels, frame->header.channels) ;
185 psf->error = SFE_FLAC_CHANNEL_COUNT_CHANGED ;
195 { psf_log_printf (psf, "Ooops : frame->header.blocksize (%d) > FLAC__MAX_BLOCK_SIZE (%d)\n", __func__, __LINE__, frame->header.blocksize, FLAC__MAX_BLOCK_SIZE) ;
196 psf->error = SFE_INTERNAL ;
201 psf_log_printf (psf, "Ooops : frame->header.channels (%d) > FLAC__MAX_BLOCK_SIZE (%d)\n", __func__, __LINE__, frame->header.channels, FLAC__MAX_CHANNELS) ;
225 { psf_log_printf (psf, "Error: pflac->remain %u channels %u\n", pflac->remain, channels) ;
292 float norm = (psf->norm_float == SF_TRUE) ? 1.0 / (1 << (frame->header.bits_per_sample - 1)) : 1.0 ;
313 double norm = (psf->norm_double == SF_TRUE) ? 1.0 / (1 << (frame->header.bits_per_sample - 1)) : 1.0 ;
345 { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
347 *bytes = psf_fread (buffer, 1, *bytes, psf) ;
348 if (*bytes > 0 && psf->error == 0)
356 { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
358 psf_fseek (psf, absolute_byte_offset, SEEK_SET) ;
359 if (psf->error)
367 { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
369 *absolute_byte_offset = psf_ftell (psf) ;
370 if (psf->error)
378 { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
380 if ((*stream_length = psf->filelength) == 0)
388 { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
390 if (psf_ftell (psf) == psf->filelength)
398 { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
399 FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
406 flac_buffer_copy (psf) ;
412 sf_flac_meta_get_vorbiscomments (SF_PRIVATE *psf, const FLAC__StreamMetadata *metadata)
439 psf_log_printf (psf, " %-12s : %s\n", tags [k].tag, value) ;
440 psf_store_string (psf, tags [k].type, value) ;
448 { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
453 if (psf->sf.channels > 0 && psf->sf.channels != (int) metadata->data.stream_info.channels)
454 { psf_log_printf (psf, "Error: FLAC stream changed from %d to %d channels\n"
456 psf->sf.channels, metadata->data.stream_info.channels) ;
457 psf->error = SFE_FLAC_CHANNEL_COUNT_CHANGED ;
461 if (psf->sf.channels > 0 && psf->sf.samplerate != (int) metadata->data.stream_info.sample_rate)
462 { psf_log_printf (psf, "Warning: FLAC stream changed sample rates from %d to %d.\n"
464 psf->sf.samplerate, metadata->data.stream_info.sample_rate) ;
466 psf->sf.channels = metadata->data.stream_info.channels ;
467 psf->sf.samplerate = metadata->data.stream_info.sample_rate ;
468 psf->sf.frames = metadata->data.stream_info.total_samples ;
470 psf_log_printf (psf, "FLAC Stream Metadata\n Channels : %d\n Sample rate : %d\n", psf->sf.channels, psf->sf.samplerate) ;
472 if (psf->sf.frames == 0)
473 { psf_log_printf (psf, " Frames : 0 (bumping to SF_COUNT_MAX)\n") ;
474 psf->sf.frames = SF_COUNT_MAX ;
477 psf_log_printf (psf, " Frames : %D\n", psf->sf.frames) ;
481 psf->sf.format |= SF_FORMAT_PCM_S8 ;
485 psf->sf.format |= SF_FORMAT_PCM_16 ;
489 psf->sf.format |= SF_FORMAT_PCM_24 ;
493 psf_log_printf (psf, "sf_flac_meta_callback : bits_per_sample %d not yet implemented.\n", metadata->data.stream_info.bits_per_sample) ;
498 psf_log_printf (psf, " Bit width : %d\n", bitwidth) ;
502 psf_log_printf (psf, "Vorbis Comment Metadata\n") ;
503 sf_flac_meta_get_vorbiscomments (psf, metadata) ;
507 psf_log_printf (psf, "Padding Metadata\n") ;
511 psf_log_printf (psf, "Application Metadata\n") ;
515 psf_log_printf (psf, "Seektable Metadata\n") ;
519 psf_log_printf (psf, "Cuesheet Metadata\n") ;
523 psf_log_printf (psf, "Picture Metadata\n") ;
527 psf_log_printf (psf, "Undefined Metadata\n") ;
531 psf_log_printf (psf, "sf_flac_meta_callback : metadata-type %d not yet implemented.\n", metadata->type) ;
540 { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
542 psf_log_printf (psf, "ERROR : %s\n", FLAC__StreamDecoderErrorStatusString [status]) ;
546 psf->error = SFE_FLAC_LOST_SYNC ;
549 psf->error = SFE_FLAC_BAD_HEADER ;
552 psf->error = SFE_FLAC_UNKOWN_ERROR ;
561 { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
563 psf_fseek (psf, absolute_byte_offset, SEEK_SET) ;
564 if (psf->error)
572 { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
574 *absolute_byte_offset = psf_ftell (psf) ;
575 if (psf->error)
583 { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ;
585 if (psf_fwrite (buffer, 1, bytes, psf) == (sf_count_t) bytes && psf->error == 0)
592 flac_write_strings (SF_PRIVATE *psf, FLAC_PRIVATE* pflac)
597 { if (psf->strings.data [k].type != 0)
605 { psf_log_printf (psf, "FLAC__metadata_object_new returned NULL\n") ;
609 for (k = 0 ; k < SF_MAX_STRINGS && psf->strings.data [k].type != 0 ; k++)
612 switch (psf->strings.data [k].type)
647 value = psf->strings.storage + psf->strings.data [k].offset ;
662 flac_write_header (SF_PRIVATE *psf, int UNUSED (calc_length))
663 { FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
666 flac_write_strings (psf, pflac) ;
668 if ((err = FLAC__stream_encoder_init_stream (pflac->fse, sf_flac_enc_write_callback, sf_flac_enc_seek_callback, sf_flac_enc_tell_callback, NULL, psf)) != FLAC__STREAM_DECODER_INIT_STATUS_OK)
669 { psf_log_printf (psf, "Error : FLAC encoder init returned error : %s\n", FLAC__StreamEncoderInitStatusString [err]) ;
673 if (psf->error == 0)
674 psf->dataoffset = psf_ftell (psf) ;
678 psf->write_header = NULL ;
680 return psf->error ;
688 flac_open (SF_PRIVATE *psf)
693 psf->codec_data = pflac ;
698 if (psf->file.mode == SFM_RDWR)
701 if (psf->file.mode == SFM_READ)
702 { if ((error = flac_read_header (psf)))
706 subformat = SF_CODEC (psf->sf.format) ;
708 if (psf->file.mode == SFM_WRITE)
709 { if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_FLAC)
712 psf->endian = SF_ENDIAN_BIG ;
713 psf->sf.seekable = 0 ;
715 psf->strings.flags = SF_STR_ALLOW_START ;
717 if ((error = flac_enc_init (psf)))
724 psf->write_header = flac_write_header ;
727 psf->datalength = psf->filelength ;
728 psf->dataoffset = 0 ;
730 psf->container_close = flac_close ;
731 psf->seek = flac_seek ;
732 psf->byterate = flac_byterate ;
734 psf->command = flac_command ;
740 error = flac_init (psf) ;
753 flac_close (SF_PRIVATE *psf)
757 if ((pflac = (FLAC_PRIVATE*) psf->codec_data) == NULL)
763 if (psf->file.mode == SFM_WRITE)
769 if (psf->file.mode == SFM_READ)
778 psf->codec_data = NULL ;
784 flac_enc_init (SF_PRIVATE *psf)
785 { FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
793 if (psf->sf.samplerate < 1 || psf->sf.samplerate > 655350)
794 { psf_log_printf (psf, "flac sample rate out of range.\n", psf->sf.samplerate) ;
798 psf_fseek (psf, 0, SEEK_SET) ;
800 switch (SF_CODEC (psf->sf.format))
821 if (! FLAC__stream_encoder_set_channels (pflac->fse, psf->sf.channels))
822 { psf_log_printf (psf, "FLAC__stream_encoder_set_channels (%d) return false.\n", psf->sf.channels) ;
826 if (! FLAC__stream_encoder_set_sample_rate (pflac->fse, psf->sf.samplerate))
827 { psf_log_printf (psf, "FLAC__stream_encoder_set_sample_rate (%d) returned false.\n", psf->sf.samplerate) ;
832 { psf_log_printf (psf, "FLAC__stream_encoder_set_bits_per_sample (%d) return false.\n", bps) ;
837 { psf_log_printf (psf, "FLAC__stream_encoder_set_compression_level (%d) return false.\n", pflac->compression) ;
845 flac_read_header (SF_PRIVATE *psf)
846 { FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
848 psf_fseek (psf, 0, SEEK_SET) ;
856 if (FLAC__stream_decoder_init_stream (pflac->fsd, sf_flac_read_callback, sf_flac_seek_callback, sf_flac_tell_callback, sf_flac_length_callback, sf_flac_eof_callback, sf_flac_write_callback, sf_flac_meta_callback, sf_flac_error_callback, psf) != FLAC__STREAM_DECODER_INIT_STATUS_OK)
861 psf_log_printf (psf, "End\n") ;
863 if (psf->error != 0)
869 psf->dataoffset = position ;
872 return psf->error ;
876 flac_command (SF_PRIVATE * psf, int command, void * data, int datasize)
877 { FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
885 if (psf->have_written)
895 psf_log_printf (psf, "%s : Setting SFC_SET_COMPRESSION_LEVEL to %u.\n", __func__, pflac->compression) ;
897 if (flac_enc_init (psf))
910 flac_init (SF_PRIVATE *psf)
912 if (psf->file.mode == SFM_RDWR)
915 if (psf->file.mode == SFM_READ)
916 { psf->read_short = flac_read_flac2s ;
917 psf->read_int = flac_read_flac2i ;
918 psf->read_float = flac_read_flac2f ;
919 psf->read_double = flac_read_flac2d ;
922 if (psf->file.mode == SFM_WRITE)
923 { psf->write_short = flac_write_s2flac ;
924 psf->write_int = flac_write_i2flac ;
925 psf->write_float = flac_write_f2flac ;
926 psf->write_double = flac_write_d2flac ;
929 if (psf->filelength > psf->dataoffset)
930 psf->datalength = (psf->dataend) ? psf->dataend - psf->dataoffset : psf->filelength - psf->dataoffset ;
932 psf->datalength = 0 ;
938 flac_read_loop (SF_PRIVATE *psf, unsigned len)
939 { FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
948 { psf_log_printf (psf, "FLAC__stream_decoder_get_state returned %s\n", FLAC__StreamDecoderStateString [state]) ;
955 flac_buffer_copy (psf) ;
960 { psf_log_printf (psf, "FLAC__stream_decoder_process_single returned false\n") ;
967 { psf_log_printf (psf, "FLAC__stream_decoder_get_state returned %s\n", FLAC__StreamDecoderStateString [state]) ;
980 flac_read_flac2s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
981 { FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
990 current = flac_read_loop (psf, readlen) ;
1000 flac_read_flac2i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
1001 { FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
1010 current = flac_read_loop (psf, readlen) ;
1020 flac_read_flac2f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
1021 { FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
1030 current = flac_read_loop (psf, readlen) ;
1040 flac_read_flac2d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
1041 { FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
1051 current = flac_read_loop (psf, readlen) ;
1061 flac_write_s2flac (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
1062 { FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
1068 switch (SF_CODEC (psf->sf.format))
1082 bufferlen = ENC_BUFFER_SIZE / (sizeof (int32_t) * psf->sf.channels) ;
1083 bufferlen *= psf->sf.channels ;
1088 if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount / psf->sf.channels))
1103 flac_write_i2flac (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
1104 { FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
1110 switch (SF_CODEC (psf->sf.format))
1124 bufferlen = ENC_BUFFER_SIZE / (sizeof (int32_t) * psf->sf.channels) ;
1125 bufferlen *= psf->sf.channels ;
1130 if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount / psf->sf.channels))
1145 flac_write_f2flac (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
1146 { FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
1152 switch (SF_CODEC (psf->sf.format))
1154 convert = (psf->add_clipping) ? f2flac8_clip_array : f2flac8_array ;
1157 convert = (psf->add_clipping) ? f2flac16_clip_array : f2flac16_array ;
1160 convert = (psf->add_clipping) ? f2flac24_clip_array : f2flac24_array ;
1166 bufferlen = ENC_BUFFER_SIZE / (sizeof (int32_t) * psf->sf.channels) ;
1167 bufferlen *= psf->sf.channels ;
1171 convert (ptr + total, buffer, writecount, psf->norm_float) ;
1172 if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount / psf->sf.channels))
1276 flac_write_d2flac (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
1277 { FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
1283 switch (SF_CODEC (psf->sf.format))
1285 convert = (psf->add_clipping) ? d2flac8_clip_array : d2flac8_array ;
1288 convert = (psf->add_clipping) ? d2flac16_clip_array : d2flac16_array ;
1291 convert = (psf->add_clipping) ? d2flac24_clip_array : d2flac24_array ;
1297 bufferlen = ENC_BUFFER_SIZE / (sizeof (int32_t) * psf->sf.channels) ;
1298 bufferlen *= psf->sf.channels ;
1302 convert (ptr + total, buffer, writecount, psf->norm_double) ;
1303 if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount / psf->sf.channels))
1408 flac_seek (SF_PRIVATE *psf, int UNUSED (mode), sf_count_t offset)
1409 { FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ;
1414 if (psf->dataoffset < 0)
1415 { psf->error = SFE_BAD_SEEK ;
1421 if (psf->file.mode == SFM_READ)
1425 if (offset == psf->sf.frames)
1434 psf->error = SFE_BAD_SEEK ;
1439 psf->error = SFE_BAD_SEEK ;
1445 flac_byterate (SF_PRIVATE *psf)
1447 if (psf->file.mode == SFM_READ)
1448 return (psf->datalength * psf->sf.samplerate) / psf->sf.frames ;
1457 flac_open (SF_PRIVATE *psf)
1459 psf_log_printf (psf, "This version of libsndfile was compiled without FLAC support.\n") ;