Lines Matching refs:ft

48 static char const * auto_detect_format(sox_format_t * ft, char const * ext)  in auto_detect_format()  argument
51 size_t len = lsx_readbuf(ft, data, ft->seekable? sizeof(data) : PIPE_AUTO_DETECT_SIZE); in auto_detect_format()
303 static void set_endiannesses(sox_format_t * ft) in set_endiannesses() argument
305 if (ft->handler.flags & SOX_FILE_ENDIAN) { in set_endiannesses()
306 sox_bool file_is_bigendian = !(ft->handler.flags & SOX_FILE_ENDBIG); in set_endiannesses()
308 if (ft->encoding.opposite_endian) { in set_endiannesses()
309 ft->encoding.reverse_bytes = file_is_bigendian != MACHINE_IS_BIGENDIAN; in set_endiannesses()
310 lsx_report("`%s': overriding file-type byte-order", ft->filename); in set_endiannesses()
311 } else if (ft->encoding.reverse_bytes == sox_option_default) { in set_endiannesses()
312 ft->encoding.reverse_bytes = file_is_bigendian == MACHINE_IS_BIGENDIAN; in set_endiannesses()
315 if (ft->encoding.opposite_endian) { in set_endiannesses()
316 ft->encoding.reverse_bytes = sox_option_yes; in set_endiannesses()
317 lsx_report("`%s': overriding machine byte-order", ft->filename); in set_endiannesses()
318 } else if (ft->encoding.reverse_bytes == sox_option_default) { in set_endiannesses()
319 ft->encoding.reverse_bytes = sox_option_no; in set_endiannesses()
326 if (ft->encoding.reverse_bits == sox_option_default) in set_endiannesses()
327 ft->encoding.reverse_bits = !!(ft->handler.flags & SOX_FILE_BIT_REV); in set_endiannesses()
328 else if (ft->encoding.reverse_bits == !(ft->handler.flags & SOX_FILE_BIT_REV)) in set_endiannesses()
329 lsx_report("`%s': overriding file-type bit-order", ft->filename); in set_endiannesses()
331 if (ft->encoding.reverse_nibbles == sox_option_default) in set_endiannesses()
332 ft->encoding.reverse_nibbles = !!(ft->handler.flags & SOX_FILE_NIB_REV); in set_endiannesses()
334 if (ft->encoding.reverse_nibbles == !(ft->handler.flags & SOX_FILE_NIB_REV)) in set_endiannesses()
335 lsx_report("`%s': overriding file-type nibble-order", ft->filename); in set_endiannesses()
338 static sox_bool is_seekable(sox_format_t const * ft) in is_seekable() argument
340 assert(ft); in is_seekable()
341 if (!ft->fp) in is_seekable()
344 return !fseek(ft->fp, 0, SEEK_CUR); in is_seekable()
348 static int sox_checkformat(sox_format_t * ft) in sox_checkformat() argument
350 ft->sox_errno = SOX_SUCCESS; in sox_checkformat()
352 if (ft->signal.rate <= 0) { in sox_checkformat()
353 lsx_fail_errno(ft, SOX_EFMT, "sample rate zero or negative"); in sox_checkformat()
356 if (!ft->signal.precision) { in sox_checkformat()
357 lsx_fail_errno(ft,SOX_EFMT,"data encoding or sample size was not specified"); in sox_checkformat()
494 sox_format_t * ft = lsx_calloc(1, sizeof(*ft)); in open_read() local
506 ft->handler = *handler; in open_read()
509 if (!(ft->handler.flags & SOX_FILE_NOSTDIO)) { in open_read()
517 ft->fp = stdin; in open_read()
520 ft->fp = in open_read()
524 xfopen(path, "rb", &ft->io_type); in open_read()
525 type = io_types[ft->io_type]; in open_read()
526 if (ft->fp == NULL) { in open_read()
531 if (setvbuf (ft->fp, NULL, _IOFBF, sizeof(char) * input_bufsiz)) { in open_read()
535 ft->seekable = is_seekable(ft); in open_read()
539 if (ft->seekable) { in open_read()
540 filetype = auto_detect_format(ft, lsx_find_file_extension(path)); in open_read()
541 lsx_rewind(ft); in open_read()
544 else if (!(ft->handler.flags & SOX_FILE_NOSTDIO) && in open_read()
546 filetype = auto_detect_format(ft, lsx_find_file_extension(path)); in open_read()
547 rewind_pipe(ft->fp); in open_read()
548 ft->tell_off = 0; in open_read()
560 if (ft->io_type == lsx_io_pipe) { in open_read()
573 ft->handler = *handler; in open_read()
574 if (ft->handler.flags & SOX_FILE_NOSTDIO) { in open_read()
575 xfclose(ft->fp, ft->io_type); in open_read()
576 ft->fp = NULL; in open_read()
579 if (!ft->handler.startread && !ft->handler.read) { in open_read()
584 ft->mode = 'r'; in open_read()
585 ft->filetype = lsx_strdup(filetype); in open_read()
586 ft->filename = lsx_strdup(path); in open_read()
588 ft->signal = *signal; in open_read()
591 ft->encoding = *encoding; in open_read()
592 else sox_init_encodinginfo(&ft->encoding); in open_read()
593 set_endiannesses(ft); in open_read()
595 if ((ft->handler.flags & SOX_FILE_DEVICE) && !(ft->handler.flags & SOX_FILE_PHONY)) in open_read()
596 lsx_set_signal_defaults(ft); in open_read()
598 ft->priv = lsx_calloc(1, ft->handler.priv_size); in open_read()
600 if (ft->handler.startread && (*ft->handler.startread)(ft) != SOX_SUCCESS) { in open_read()
601 lsx_fail("can't open input %s `%s': %s", type, ft->filename, ft->sox_errstr); in open_read()
606 if (sox_precision(ft->encoding.encoding, ft->encoding.bits_per_sample)) in open_read()
607 ft->signal.precision = sox_precision(ft->encoding.encoding, ft->encoding.bits_per_sample); in open_read()
608 if (!(ft->handler.flags & SOX_FILE_PHONY) && !ft->signal.channels) in open_read()
609 ft->signal.channels = 1; in open_read()
611 if (sox_checkformat(ft) != SOX_SUCCESS) { in open_read()
612 lsx_fail("bad input format for %s `%s': %s", type, ft->filename, ft->sox_errstr); in open_read()
617 if (signal->rate && signal->rate != ft->signal.rate) in open_read()
618 lsx_warn("can't set sample rate %g; using %g", signal->rate, ft->signal.rate); in open_read()
619 if (signal->channels && signal->channels != ft->signal.channels) in open_read()
620 lsx_warn("can't set %u channels; using %u", signal->channels, ft->signal.channels); in open_read()
622 return ft; in open_read()
625 if (ft->fp && ft->fp != stdin) in open_read()
626 xfclose(ft->fp, ft->io_type); in open_read()
627 free(ft->priv); in open_read()
628 free(ft->filename); in open_read()
629 free(ft->filetype); in open_read()
630 free(ft); in open_read()
688 static void set_output_format(sox_format_t * ft) in set_output_format() argument
692 unsigned const * encodings = ft->handler.write_formats; in set_output_format()
695 if (ft->handler.write_rates){ in set_output_format()
696 if (!ft->signal.rate) in set_output_format()
697 ft->signal.rate = ft->handler.write_rates[0]; in set_output_format()
701 while ((r = ft->handler.write_rates[i++])) { in set_output_format()
702 if (r == ft->signal.rate) in set_output_format()
705 if (r != ft->signal.rate) { in set_output_format()
706 sox_rate_t given = ft->signal.rate, max = 0; in set_output_format()
707 ft->signal.rate = HUGE_VAL; in set_output_format()
709 while ((r = ft->handler.write_rates[i++])) { in set_output_format()
710 if (r > given && r < ft->signal.rate) in set_output_format()
711 ft->signal.rate = r; in set_output_format()
714 if (ft->signal.rate == HUGE_VAL) in set_output_format()
715 ft->signal.rate = max; in set_output_format()
716 … lsx_warn("%s can't encode at %gHz; using %gHz", ft->handler.names[0], given, ft->signal.rate); in set_output_format()
720 else if (!ft->signal.rate) in set_output_format()
721 ft->signal.rate = SOX_DEFAULT_RATE; in set_output_format()
723 if (ft->handler.flags & SOX_FILE_CHANS) { in set_output_format()
724 if (ft->signal.channels == 1 && !(ft->handler.flags & SOX_FILE_MONO)) { in set_output_format()
725 ft->signal.channels = (ft->handler.flags & SOX_FILE_STEREO)? 2 : 4; in set_output_format()
726 …lsx_warn("%s can't encode mono; setting channels to %u", ft->handler.names[0], ft->signal.channels… in set_output_format()
728 if (ft->signal.channels == 2 && !(ft->handler.flags & SOX_FILE_STEREO)) { in set_output_format()
729 ft->signal.channels = (ft->handler.flags & SOX_FILE_QUAD)? 4 : 1; in set_output_format()
730 …lsx_warn("%s can't encode stereo; setting channels to %u", ft->handler.names[0], ft->signal.channe… in set_output_format()
732 if (ft->signal.channels == 4 && !(ft->handler.flags & SOX_FILE_QUAD)) { in set_output_format()
733 ft->signal.channels = (ft->handler.flags & SOX_FILE_STEREO)? 2 : 1; in set_output_format()
734 …lsx_warn("%s can't encode quad; setting channels to %u", ft->handler.names[0], ft->signal.channels… in set_output_format()
736 } else ft->signal.channels = max(ft->signal.channels, 1); in set_output_format()
741 if (ft->encoding.encoding) { in set_output_format()
744 if (e == ft->encoding.encoding) in set_output_format()
748 if (e != ft->encoding.encoding) { in set_output_format()
749 …lsx_warn("%s can't encode %s", ft->handler.names[0], sox_encodings_info[ft->encoding.encoding].des… in set_output_format()
750 ft->encoding.encoding = 0; in set_output_format()
757 if (ft->encoding.bits_per_sample) in set_output_format()
758 given_size = ft->encoding.bits_per_sample; in set_output_format()
759 ft->encoding.bits_per_sample = 65; in set_output_format()
763 if (sox_precision(e, s) >= ft->signal.precision) { in set_output_format()
764 if (s < ft->encoding.bits_per_sample) in set_output_format()
765 ft->encoding.bits_per_sample = s; in set_output_format()
772 if (ft->encoding.bits_per_sample == 65) in set_output_format()
773 ft->encoding.bits_per_sample = max_p_s; in set_output_format()
776 ft->encoding.bits_per_sample = given_size; in set_output_format()
777 …else lsx_warn("%s can't encode %s to %u-bit", ft->handler.names[0], sox_encodings_info[ft->encodin… in set_output_format()
783 if (!ft->encoding.encoding && ft->encoding.bits_per_sample) { in set_output_format()
786 while (s != ft->encoding.bits_per_sample && (e = enc_arg(sox_encoding_t))) in set_output_format()
787 while ((s = enc_arg(unsigned)) && s != ft->encoding.bits_per_sample); in set_output_format()
788 if (s != ft->encoding.bits_per_sample) { in set_output_format()
789 lsx_warn("%s can't encode to %u-bit", ft->handler.names[0], ft->encoding.bits_per_sample); in set_output_format()
790 ft->encoding.bits_per_sample = 0; in set_output_format()
792 else ft->encoding.encoding = e; in set_output_format()
796 if (!ft->encoding.encoding) { in set_output_format()
797 ft->encoding.bits_per_sample = 65; in set_output_format()
802 sox_precision(e, s) >= ft->signal.precision && s < ft->encoding.bits_per_sample) { in set_output_format()
803 ft->encoding.encoding = e; in set_output_format()
804 ft->encoding.bits_per_sample = s; in set_output_format()
810 if (!ft->encoding.encoding) { in set_output_format()
818 if (sox_precision(e, s) >= ft->signal.precision) { in set_output_format()
819 if (s < ft->encoding.bits_per_sample) { in set_output_format()
820 ft->encoding.encoding = e; in set_output_format()
821 ft->encoding.bits_per_sample = s; in set_output_format()
830 if (!ft->encoding.encoding) { in set_output_format()
831 ft->encoding.encoding = max_p_e; in set_output_format()
832 ft->encoding.bits_per_sample = max_p_s; in set_output_format()
835 ft->signal.precision = sox_precision(ft->encoding.encoding, ft->encoding.bits_per_sample); in set_output_format()
887 sox_format_t * ft = lsx_calloc(sizeof(*ft), 1); in open_write() local
898 ft->handler = *handler; in open_write()
900 if (!(ft->handler.flags & SOX_FILE_NOSTDIO)) { in open_write()
908 ft->fp = stdout; in open_write()
917 ft->fp = in open_write()
923 if (ft->fp == NULL) { in open_write()
931 if (setvbuf (ft->fp, NULL, _IOFBF, sizeof(char) * sox_globals.bufsiz)) { in open_write()
935 ft->seekable = is_seekable(ft); in open_write()
938 ft->filetype = lsx_strdup(filetype); in open_write()
939 ft->filename = lsx_strdup(path); in open_write()
940 ft->mode = 'w'; in open_write()
941 ft->signal = *signal; in open_write()
944 ft->encoding = *encoding; in open_write()
945 else sox_init_encodinginfo(&ft->encoding); in open_write()
946 set_endiannesses(ft); in open_write()
949 ft->oob = *oob; in open_write()
951 ft->oob.comments = sox_copy_comments(oob->comments); in open_write()
954 set_output_format(ft); in open_write()
959 ft->signal.length = ft->signal.length * ft->signal.rate / signal->rate * in open_write()
960 ft->signal.channels / signal->channels + .5; in open_write()
962 …if ((ft->handler.flags & SOX_FILE_REWIND) && strcmp(ft->filetype, "sox") && !ft->signal.length && … in open_write()
963 …lsx_warn("can't seek in output file `%s'; length in file header will be unspecified", ft->filename… in open_write()
965 ft->priv = lsx_calloc(1, ft->handler.priv_size); in open_write()
967 if (ft->handler.startwrite && (ft->handler.startwrite)(ft) != SOX_SUCCESS){ in open_write()
968 lsx_fail("can't open output file `%s': %s", ft->filename, ft->sox_errstr); in open_write()
972 if (sox_checkformat(ft) != SOX_SUCCESS) { in open_write()
973 lsx_fail("bad format for output file `%s': %s", ft->filename, ft->sox_errstr); in open_write()
977 if ((ft->handler.flags & SOX_FILE_DEVICE) && signal) { in open_write()
978 if (signal->rate && signal->rate != ft->signal.rate) in open_write()
979 lsx_report("can't set sample rate %g; using %g", signal->rate, ft->signal.rate); in open_write()
980 if (signal->channels && signal->channels != ft->signal.channels) in open_write()
981 lsx_report("can't set %u channels; using %u", signal->channels, ft->signal.channels); in open_write()
983 return ft; in open_write()
986 if (ft->fp && ft->fp != stdout) in open_write()
987 xfclose(ft->fp, ft->io_type); in open_write()
988 free(ft->priv); in open_write()
989 free(ft->filename); in open_write()
990 free(ft->filetype); in open_write()
991 free(ft); in open_write()
1028 size_t sox_read(sox_format_t * ft, sox_sample_t * buf, size_t len) in sox_read() argument
1031 if (ft->signal.length != SOX_UNSPEC) in sox_read()
1032 len = min(len, ft->signal.length - ft->olength); in sox_read()
1033 actual = ft->handler.read? (*ft->handler.read)(ft, buf, len) : 0; in sox_read()
1035 ft->olength += actual; in sox_read()
1039 size_t sox_write(sox_format_t * ft, const sox_sample_t *buf, size_t len) in sox_write() argument
1041 size_t actual = ft->handler.write? (*ft->handler.write)(ft, buf, len) : 0; in sox_write()
1042 ft->olength += actual; in sox_write()
1046 int sox_close(sox_format_t * ft) in sox_close() argument
1050 if (ft->mode == 'r') in sox_close()
1051 result = ft->handler.stopread? (*ft->handler.stopread)(ft) : SOX_SUCCESS; in sox_close()
1053 if (ft->handler.flags & SOX_FILE_REWIND) { in sox_close()
1054 if (ft->olength != ft->signal.length && ft->seekable) { in sox_close()
1055 result = lsx_seeki(ft, (off_t)0, 0); in sox_close()
1057 result = ft->handler.stopwrite? (*ft->handler.stopwrite)(ft) in sox_close()
1058 : ft->handler.startwrite?(*ft->handler.startwrite)(ft) : SOX_SUCCESS; in sox_close()
1061 else result = ft->handler.stopwrite? (*ft->handler.stopwrite)(ft) : SOX_SUCCESS; in sox_close()
1064 if (ft->fp == stdin) { in sox_close()
1066 } else if (ft->fp == stdout) { in sox_close()
1069 } else if (ft->fp) { in sox_close()
1070 xfclose(ft->fp, ft->io_type); in sox_close()
1073 free(ft->priv); in sox_close()
1074 free(ft->filename); in sox_close()
1075 free(ft->filetype); in sox_close()
1076 sox_delete_comments(&ft->oob.comments); in sox_close()
1078 free(ft); in sox_close()
1082 int sox_seek(sox_format_t * ft, sox_uint64_t offset, int whence) in sox_seek() argument
1091 if (ft->seekable && ft->handler.seek) in sox_seek()
1092 return (*ft->handler.seek)(ft, offset); in sox_seek()