Lines Matching +full:0 +full:- +full:1152
1 /* libSoX file format: FLAC (c) 2006-7 robs@users.sourceforge.net
15 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
61 if(*bytes > 0) { in decoder_read_callback()
65 else if(*bytes == 0) in decoder_read_callback()
77 if(lsx_seeki(ft, (off_t)absolute_byte_offset, SEEK_SET) < 0) in decoder_seek_callback()
87 if((pos = lsx_tell(ft)) < 0) in decoder_tell_callback()
105 return lsx_eof(ft) ? 1 : 0; in decoder_eof_callback()
111 priv_t * p = (priv_t *)ft->priv; in decoder_metadata_callback()
115 if (metadata->type == FLAC__METADATA_TYPE_STREAMINFO) { in decoder_metadata_callback()
116 p->bits_per_sample = metadata->data.stream_info.bits_per_sample; in decoder_metadata_callback()
117 p->channels = metadata->data.stream_info.channels; in decoder_metadata_callback()
118 p->sample_rate = metadata->data.stream_info.sample_rate; in decoder_metadata_callback()
119 p->total_samples = metadata->data.stream_info.total_samples; in decoder_metadata_callback()
121 else if (metadata->type == FLAC__METADATA_TYPE_VORBIS_COMMENT) { in decoder_metadata_callback()
122 const FLAC__StreamMetadata_VorbisComment *vc = &metadata->data.vorbis_comment; in decoder_metadata_callback()
125 if (vc->num_comments == 0) in decoder_metadata_callback()
128 if (ft->oob.comments != NULL) { in decoder_metadata_callback()
133 for (i = 0; i < vc->num_comments; ++i) in decoder_metadata_callback()
134 if (vc->comments[i].entry) in decoder_metadata_callback()
135 sox_append_comment(&ft->oob.comments, (char const *) vc->comments[i].entry); in decoder_metadata_callback()
155 priv_t * p = (priv_t *)ft->priv; in decoder_write_callback()
156 sox_sample_t * dst = p->req_buffer; in decoder_write_callback()
158 unsigned nsamples = frame->header.blocksize; in decoder_write_callback()
159 unsigned sample = 0; in decoder_write_callback()
160 size_t actual = nsamples * p->channels; in decoder_write_callback()
164 …if (frame->header.bits_per_sample != p->bits_per_sample || frame->header.channels != p->channels |… in decoder_write_callback()
174 if (actual > p->number_of_requested_samples) { in decoder_write_callback()
175 size_t to_stash = actual - p->number_of_requested_samples; in decoder_write_callback()
177 p->leftover_buf = lsx_malloc(to_stash * sizeof(sox_sample_t)); in decoder_write_callback()
178 p->number_of_leftover_samples = to_stash; in decoder_write_callback()
179 nsamples = p->number_of_requested_samples / p->channels; in decoder_write_callback()
181 p->req_buffer += p->number_of_requested_samples; in decoder_write_callback()
182 p->number_of_requested_samples = 0; in decoder_write_callback()
184 p->req_buffer += actual; in decoder_write_callback()
185 p->number_of_requested_samples -= actual; in decoder_write_callback()
191 for (channel = 0; channel < p->channels; channel++) { in decoder_write_callback()
193 switch (p->bits_per_sample) { in decoder_write_callback()
203 if (sample < frame->header.blocksize) { in decoder_write_callback()
204 nsamples = frame->header.blocksize; in decoder_write_callback()
205 dst = p->leftover_buf; in decoder_write_callback()
216 priv_t * p = (priv_t *)ft->priv; in start_read()
218 p->decoder = FLAC__stream_decoder_new(); in start_read()
219 if (p->decoder == NULL) { in start_read()
224 FLAC__stream_decoder_set_md5_checking(p->decoder, sox_true); in start_read()
225 FLAC__stream_decoder_set_metadata_respond_all(p->decoder); in start_read()
227 p->decoder, in start_read()
229 ft->seekable ? decoder_seek_callback : NULL, in start_read()
230 ft->seekable ? decoder_tell_callback : NULL, in start_read()
231 ft->seekable ? decoder_length_callback : NULL, in start_read()
232 ft->seekable ? decoder_eof_callback : NULL, in start_read()
241 if (!FLAC__stream_decoder_process_until_end_of_metadata(p->decoder)) { in start_read()
246 if (FLAC__stream_decoder_get_state(p->decoder) > FLAC__STREAM_DECODER_END_OF_STREAM) { in start_read()
251 ft->encoding.encoding = SOX_ENCODING_FLAC; in start_read()
252 ft->signal.rate = p->sample_rate; in start_read()
253 ft->encoding.bits_per_sample = p->bits_per_sample; in start_read()
254 ft->signal.channels = p->channels; in start_read()
255 ft->signal.length = p->total_samples * p->channels; in start_read()
262 priv_t * p = (priv_t *)ft->priv; in read_samples()
265 if (p->seek_pending) { in read_samples()
266 p->seek_pending = sox_false; in read_samples()
269 free(p->leftover_buf); in read_samples()
270 p->leftover_buf = NULL; in read_samples()
271 p->number_of_leftover_samples = 0; in read_samples()
273 p->req_buffer = sampleBuffer; in read_samples()
274 p->number_of_requested_samples = requested; in read_samples()
277 …if (!FLAC__stream_decoder_seek_absolute(p->decoder, (FLAC__uint64)(p->seek_offset / ft->signal.cha… in read_samples()
278 p->req_buffer = NULL; in read_samples()
279 return 0; in read_samples()
281 } else if (p->number_of_leftover_samples > 0) { in read_samples()
284 if (requested < p->number_of_leftover_samples) { in read_samples()
287 memcpy(sampleBuffer, p->leftover_buf, req_bytes); in read_samples()
288 p->number_of_leftover_samples -= requested; in read_samples()
289 memmove(p->leftover_buf, (char *)p->leftover_buf + req_bytes, in read_samples()
290 (size_t)p->number_of_leftover_samples * sizeof(sox_sample_t)); in read_samples()
295 memcpy(sampleBuffer, p->leftover_buf, in read_samples()
296 p->number_of_leftover_samples * sizeof(sox_sample_t)); in read_samples()
298 p->req_buffer = sampleBuffer + p->number_of_leftover_samples; in read_samples()
299 p->number_of_requested_samples = requested - p->number_of_leftover_samples; in read_samples()
301 free(p->leftover_buf); in read_samples()
302 p->leftover_buf = NULL; in read_samples()
303 p->number_of_leftover_samples = 0; in read_samples()
307 p->req_buffer = sampleBuffer; in read_samples()
308 p->number_of_requested_samples = requested; in read_samples()
312 while ((prev_requested = p->number_of_requested_samples) && !p->eof) { in read_samples()
313 if (!FLAC__stream_decoder_process_single(p->decoder)) in read_samples()
317 if (p->number_of_requested_samples == prev_requested) in read_samples()
318 p->eof = sox_true; in read_samples()
320 p->req_buffer = NULL; in read_samples()
322 return requested - p->number_of_requested_samples; in read_samples()
329 priv_t * p = (priv_t *)ft->priv; in stop_read()
330 if (!FLAC__stream_decoder_finish(p->decoder) && p->eof) in stop_read()
332 FLAC__stream_decoder_delete(p->decoder); in stop_read()
334 free(p->leftover_buf); in stop_read()
335 p->leftover_buf = NULL; in stop_read()
336 p->number_of_leftover_samples = 0; in stop_read()
363 if (!ft->seekable) in flac_stream_encoder_seek_callback()
378 if (!ft->seekable) in flac_stream_encoder_tell_callback()
380 else if ((pos = lsx_tell(ft)) < 0) in flac_stream_encoder_tell_callback()
392 priv_t * p = (priv_t *)ft->priv; in start_write()
396 if (ft->encoding.compression != HUGE_VAL) { in start_write()
397 compression_level = ft->encoding.compression; in start_write()
398 if (compression_level != ft->encoding.compression || in start_write()
401 "FLAC compression level must be a whole number from 0 to %i", in start_write()
407 p->encoder = FLAC__stream_encoder_new(); in start_write()
408 if (p->encoder == NULL) { in start_write()
413 p->bits_per_sample = ft->encoding.bits_per_sample; in start_write()
414 ft->signal.precision = ft->encoding.bits_per_sample; in start_write()
416 lsx_report("encoding at %i bits per sample", p->bits_per_sample); in start_write()
418 FLAC__stream_encoder_set_channels(p->encoder, ft->signal.channels); in start_write()
419 FLAC__stream_encoder_set_bits_per_sample(p->encoder, p->bits_per_sample); in start_write()
420 FLAC__stream_encoder_set_sample_rate(p->encoder, (unsigned)(ft->signal.rate + .5)); in start_write()
427 for (i = 0; !streamable && i < array_length(streamable_rates); ++i) in start_write()
428 streamable = (streamable_rates[i] == ft->signal.rate); in start_write()
430 lsx_report("non-standard rate; output may not be streamable"); in start_write()
431 FLAC__stream_encoder_set_streamable_subset(p->encoder, sox_false); in start_write()
436 FLAC__stream_encoder_set_compression_level(p->encoder, compression_level); in start_write()
448 {1152, sox_false, sox_false, sox_false, 0, 2, 2}, in start_write()
449 {1152, sox_false, sox_true, sox_true, 0, 2, 2}, in start_write()
450 {1152, sox_false, sox_true, sox_false, 0, 3, 0}, in start_write()
454 {4608, sox_false, sox_true, sox_false, 8, 4, 0}, in start_write()
455 {4608, sox_true, sox_true, sox_false, 8, 6, 0}, in start_write()
456 {4608, sox_true, sox_true, sox_false, 12, 6, 0}, in start_write()
460 FLAC__stream_encoder_set_##x(p->encoder, options[compression_level].x);\ in start_write()
461 } while (0) in start_write()
467 if (ft->signal.channels == 2) { in start_write()
475 if (ft->signal.length != 0) { in start_write()
476 …FLAC__stream_encoder_set_total_samples_estimate(p->encoder, (FLAC__uint64)(ft->signal.length / ft-… in start_write()
478 p->metadata[p->num_metadata] = FLAC__metadata_object_new(FLAC__METADATA_TYPE_SEEKTABLE); in start_write()
479 if (p->metadata[p->num_metadata] == NULL) { in start_write()
484 …aced_points_by_samples(p->metadata[p->num_metadata], (unsigned)(10 * ft->signal.rate + .5), (FLAC_… in start_write()
489 p->metadata[p->num_metadata]->is_last = sox_false; /* the encoder will set this for us */ in start_write()
490 ++p->num_metadata; in start_write()
493 if (ft->oob.comments) { /* Make the comment structure */ in start_write()
497 p->metadata[p->num_metadata] = FLAC__metadata_object_new(FLAC__METADATA_TYPE_VORBIS_COMMENT); in start_write()
498 for (i = 0; ft->oob.comments[i]; ++i) { in start_write()
500 char * text = lsx_calloc(strlen(prepend) + strlen(ft->oob.comments[i]) + 1, sizeof(*text)); in start_write()
501 /* Prepend `Comment=' if no field-name already in the comment */ in start_write()
502 if (!strchr(ft->oob.comments[i], '=')) in start_write()
504 entry.entry = (FLAC__byte *) strcat(text, ft->oob.comments[i]); in start_write()
506 …FLAC__metadata_object_vorbiscomment_append_comment(p->metadata[p->num_metadata], entry, /*copy= */… in start_write()
509 ++p->num_metadata; in start_write()
512 if (p->num_metadata) in start_write()
513 FLAC__stream_encoder_set_metadata(p->encoder, p->metadata, p->num_metadata); in start_write()
515 status = FLAC__stream_encoder_init_stream(p->encoder, flac_stream_encoder_write_callback, in start_write()
529 priv_t * p = (priv_t *)ft->priv; in write_samples()
533 if (p->number_of_samples < len) { in write_samples()
534 p->number_of_samples = len; in write_samples()
535 free(p->decoded_samples); in write_samples()
536 p->decoded_samples = lsx_malloc(p->number_of_samples * sizeof(FLAC__int32)); in write_samples()
539 for (i = 0; i < len; ++i) { in write_samples()
541 long pcm = SOX_SAMPLE_TO_SIGNED_32BIT(sampleBuffer[i], ft->clips); in write_samples()
542 p->decoded_samples[i] = pcm >> (32 - p->bits_per_sample); in write_samples()
543 switch (p->bits_per_sample) { in write_samples()
544 case 8: p->decoded_samples[i] = in write_samples()
545 SOX_SAMPLE_TO_SIGNED_8BIT(sampleBuffer[i], ft->clips); in write_samples()
547 case 16: p->decoded_samples[i] = in write_samples()
548 SOX_SAMPLE_TO_SIGNED_16BIT(sampleBuffer[i], ft->clips); in write_samples()
550 case 24: p->decoded_samples[i] = /* sign extension: */ in write_samples()
551 SOX_SAMPLE_TO_SIGNED_24BIT(sampleBuffer[i],ft->clips) << 8; in write_samples()
552 p->decoded_samples[i] >>= 8; in write_samples()
554 case 32: p->decoded_samples[i] = in write_samples()
555 SOX_SAMPLE_TO_SIGNED_32BIT(sampleBuffer[i],ft->clips); in write_samples()
559 …FLAC__stream_encoder_process_interleaved(p->encoder, p->decoded_samples, (unsigned) len / ft->sign… in write_samples()
560 return FLAC__stream_encoder_get_state(p->encoder) == FLAC__STREAM_ENCODER_OK ? len : 0; in write_samples()
567 priv_t * p = (priv_t *)ft->priv; in stop_write()
568 FLAC__StreamEncoderState state = FLAC__stream_encoder_get_state(p->encoder); in stop_write()
571 FLAC__stream_encoder_finish(p->encoder); in stop_write()
572 FLAC__stream_encoder_delete(p->encoder); in stop_write()
573 for (i = 0; i < p->num_metadata; ++i) in stop_write()
574 FLAC__metadata_object_delete(p->metadata[i]); in stop_write()
575 free(p->decoded_samples); in stop_write()
587 priv_t * p = (priv_t *)ft->priv; in seek()
588 p->seek_offset = offset; in seek()
589 p->seek_pending = sox_true; in seek()
590 return ft->mode == 'r' ? SOX_SUCCESS : SOX_EOF; in seek()
598 static unsigned const encodings[] = {SOX_ENCODING_FLAC, 8, 16, 24, 0, 0}; in LSX_FORMAT_HANDLER()
600 "Free Lossless Audio CODEC compressed audio", names, 0, in LSX_FORMAT_HANDLER()