#include "FLAC/ordinals.h"
-int flac__encode_wav(FILE *infile, long infilesize, const char *infilename, const char *outfilename, const FLAC__byte *lookahead, unsigned lookahead_length, FLAC__int32 *align_reservoir[], unsigned *align_reservoir_samples, FLAC__bool sector_align, FLAC__bool is_last_file, FLAC__bool verbose, FLAC__uint64 skip, FLAC__bool verify, FLAC__bool lax, FLAC__bool do_mid_side, FLAC__bool loose_mid_side, FLAC__bool do_exhaustive_model_search, FLAC__bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points);
-int flac__encode_raw(FILE *infile, long infilesize, const char *infilename, const char *outfilename, const FLAC__byte *lookahead, unsigned lookahead_length, FLAC__bool is_last_file, FLAC__bool verbose, FLAC__uint64 skip, FLAC__bool verify, FLAC__bool lax, FLAC__bool do_mid_side, FLAC__bool loose_mid_side, FLAC__bool do_exhaustive_model_search, FLAC__bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points, FLAC__bool is_big_endian, FLAC__bool is_unsigned_samples, unsigned channels, unsigned bps, unsigned sample_rate);
+int flac__encode_wav(FILE *infile, long infilesize, const char *infilename, const char *outfilename, const FLAC__byte *lookahead, unsigned lookahead_length, FLAC__int32 *align_reservoir[], unsigned *align_reservoir_samples, FLAC__bool sector_align, FLAC__bool is_last_file, FLAC__bool verbose, FLAC__uint64 skip, FLAC__bool verify, FLAC__bool lax, FLAC__bool do_mid_side, FLAC__bool loose_mid_side, FLAC__bool do_exhaustive_model_search, FLAC__bool do_escape_coding, FLAC__bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points);
+int flac__encode_raw(FILE *infile, long infilesize, const char *infilename, const char *outfilename, const FLAC__byte *lookahead, unsigned lookahead_length, FLAC__bool is_last_file, FLAC__bool verbose, FLAC__uint64 skip, FLAC__bool verify, FLAC__bool lax, FLAC__bool do_mid_side, FLAC__bool loose_mid_side, FLAC__bool do_exhaustive_model_search, FLAC__bool do_escape_coding, FLAC__bool do_qlp_coeff_prec_search, unsigned min_residual_partition_order, unsigned max_residual_partition_order, unsigned rice_parameter_search_dist, unsigned max_lpc_order, unsigned blocksize, unsigned qlp_coeff_precision, unsigned padding, char *requested_seek_points, int num_requested_seek_points, FLAC__bool is_big_endian, FLAC__bool is_unsigned_samples, unsigned channels, unsigned bps, unsigned sample_rate);
#endif
static int decode_file(const char *infilename, const char *forced_outfilename);
FLAC__bool verify = false, verbose = true, lax = false, test_only = false, analyze = false;
-FLAC__bool do_mid_side = true, loose_mid_side = false, do_exhaustive_model_search = false, do_qlp_coeff_prec_search = false;
+FLAC__bool do_mid_side = true, loose_mid_side = false, do_exhaustive_model_search = false, do_escape_coding = false, do_qlp_coeff_prec_search = false;
FLAC__bool force_to_stdout = false, delete_input = false, sector_align = false;
const char *cmdline_forced_outfilename = 0, *output_prefix = 0;
analysis_options aopts = { false, false };
do_exhaustive_model_search = true;
else if(0 == strcmp(argv[i], "-e-"))
do_exhaustive_model_search = false;
+ else if(0 == strcmp(argv[i], "-E"))
+ do_escape_coding = true;
+ else if(0 == strcmp(argv[i], "-E-"))
+ do_escape_coding = false;
else if(0 == strcmp(argv[i], "-l"))
max_lpc_order = atoi(argv[++i]);
else if(0 == strcmp(argv[i], "-m")) {
aopts.do_residual_text = false;
else if(0 == strcmp(argv[i], "-0")) {
do_exhaustive_model_search = false;
+ do_escape_coding = false;
do_mid_side = false;
loose_mid_side = false;
qlp_coeff_precision = 0;
}
else if(0 == strcmp(argv[i], "-1")) {
do_exhaustive_model_search = false;
+ do_escape_coding = false;
do_mid_side = true;
loose_mid_side = true;
qlp_coeff_precision = 0;
}
else if(0 == strcmp(argv[i], "-2")) {
do_exhaustive_model_search = false;
+ do_escape_coding = false;
do_mid_side = true;
loose_mid_side = false;
qlp_coeff_precision = 0;
}
else if(0 == strcmp(argv[i], "-3")) {
do_exhaustive_model_search = false;
+ do_escape_coding = false;
do_mid_side = false;
loose_mid_side = false;
qlp_coeff_precision = 0;
}
else if(0 == strcmp(argv[i], "-4")) {
do_exhaustive_model_search = false;
+ do_escape_coding = false;
do_mid_side = true;
loose_mid_side = true;
qlp_coeff_precision = 0;
}
else if(0 == strcmp(argv[i], "-5")) {
do_exhaustive_model_search = false;
+ do_escape_coding = false;
do_mid_side = true;
loose_mid_side = false;
qlp_coeff_precision = 0;
}
else if(0 == strcmp(argv[i], "-6")) {
do_exhaustive_model_search = false;
+ do_escape_coding = false;
do_mid_side = true;
loose_mid_side = false;
qlp_coeff_precision = 0;
}
else if(0 == strcmp(argv[i], "-7")) {
do_exhaustive_model_search = true;
+ do_escape_coding = false;
do_mid_side = true;
loose_mid_side = false;
qlp_coeff_precision = 0;
}
else if(0 == strcmp(argv[i], "-8")) {
do_exhaustive_model_search = true;
+ do_escape_coding = false;
do_mid_side = true;
loose_mid_side = false;
qlp_coeff_precision = 0;
}
else if(0 == strcmp(argv[i], "-9")) {
do_exhaustive_model_search = true;
+ do_escape_coding = true;
do_mid_side = true;
loose_mid_side = false;
do_qlp_coeff_prec_search = true;
fprintf(stderr, "welcome to redistribute it under certain conditions. Type `flac' for details.\n\n");
if(!mode_decode) {
- fprintf(stderr, "options:%s%s%s -P %u -b %u%s -l %u%s%s -q %u -r %u,%u -R %u%s\n",
+ fprintf(stderr, "options:%s%s%s -P %u -b %u%s -l %u%s%s%s -q %u -r %u,%u -R %u%s\n",
delete_input?" --delete-input-file":"", sector_align?" --sector-align":"", lax?" --lax":"",
padding, (unsigned)blocksize, loose_mid_side?" -M":do_mid_side?" -m":"", max_lpc_order,
- do_exhaustive_model_search?" -e":"", do_qlp_coeff_prec_search?" -p":"",
+ do_exhaustive_model_search?" -e":"", do_escape_coding?" -E":"", do_qlp_coeff_prec_search?" -p":"",
qlp_coeff_precision,
(unsigned)min_residual_partition_order, (unsigned)max_residual_partition_order, (unsigned)rice_parameter_search_dist,
verify? " -V":""
fprintf(stderr, " -6 : synonymous with -l 8 -b 4608 -m -r 4\n");
fprintf(stderr, " -7 : synonymous with -l 8 -b 4608 -m -e -r 6\n");
fprintf(stderr, " -8 : synonymous with -l 12 -b 4608 -m -e -r 6\n");
- fprintf(stderr, " -9 : synonymous with -l 32 -b 4608 -m -e -r 16 -p (very slow!)\n");
+ fprintf(stderr, " -9 : synonymous with -l 32 -b 4608 -m -e -E -r 16 -p (very slow!)\n");
fprintf(stderr, " -e : do exhaustive model search (expensive!)\n");
+ fprintf(stderr, " -E : include escape coding in the entropy coder\n");
fprintf(stderr, " -l # : specify max LPC order; 0 => use only fixed predictors\n");
fprintf(stderr, " -p : do exhaustive search of LP coefficient quantization (expensive!);\n");
fprintf(stderr, " overrides -q, does nothing if using -l 0\n");
fprintf(stderr, " -R # : Rice parameter search distance (# is 0..32; above 2 doesn't help much)\n");
fprintf(stderr, " -V : verify a correct encoding by decoding the output in parallel and\n");
fprintf(stderr, " comparing to the original\n");
- fprintf(stderr, " -S-, -m-, -M-, -e-, -p-, -V-, --delete-input-file-, --lax-, --sector-align-\n");
+ fprintf(stderr, " -S-, -m-, -M-, -e-, -E-, -p-, -V-, --delete-input-file-, --lax-, --sector-align-\n");
fprintf(stderr, " can all be used to turn off a particular option\n");
fprintf(stderr, "format options:\n");
fprintf(stderr, " -fb | -fl : big-endian | little-endian byte order\n");
forced_outfilename = cmdline_forced_outfilename;
if(format_is_wave)
- retval = flac__encode_wav(encode_infile, infilesize, infilename, forced_outfilename, lookahead, lookahead_length, align_reservoir, &align_reservoir_samples, sector_align, is_last_file, verbose, skip, verify, lax, do_mid_side, loose_mid_side, do_exhaustive_model_search, do_qlp_coeff_prec_search, min_residual_partition_order, max_residual_partition_order, rice_parameter_search_dist, max_lpc_order, (unsigned)blocksize, qlp_coeff_precision, padding, requested_seek_points, num_requested_seek_points);
+ retval = flac__encode_wav(encode_infile, infilesize, infilename, forced_outfilename, lookahead, lookahead_length, align_reservoir, &align_reservoir_samples, sector_align, is_last_file, verbose, skip, verify, lax, do_mid_side, loose_mid_side, do_exhaustive_model_search, do_escape_coding, do_qlp_coeff_prec_search, min_residual_partition_order, max_residual_partition_order, rice_parameter_search_dist, max_lpc_order, (unsigned)blocksize, qlp_coeff_precision, padding, requested_seek_points, num_requested_seek_points);
else
- retval = flac__encode_raw(encode_infile, infilesize, infilename, forced_outfilename, lookahead, lookahead_length, is_last_file, verbose, skip, verify, lax, do_mid_side, loose_mid_side, do_exhaustive_model_search, do_qlp_coeff_prec_search, min_residual_partition_order, max_residual_partition_order, rice_parameter_search_dist, max_lpc_order, (unsigned)blocksize, qlp_coeff_precision, padding, requested_seek_points, num_requested_seek_points, format_is_big_endian, format_is_unsigned_samples, format_channels, format_bps, format_sample_rate);
+ retval = flac__encode_raw(encode_infile, infilesize, infilename, forced_outfilename, lookahead, lookahead_length, is_last_file, verbose, skip, verify, lax, do_mid_side, loose_mid_side, do_exhaustive_model_search, do_escape_coding, do_qlp_coeff_prec_search, min_residual_partition_order, max_residual_partition_order, rice_parameter_search_dist, max_lpc_order, (unsigned)blocksize, qlp_coeff_precision, padding, requested_seek_points, num_requested_seek_points, format_is_big_endian, format_is_unsigned_samples, format_channels, format_bps, format_sample_rate);
if(retval == 0 && strcmp(infilename, "-")) {
if(strcmp(forced_outfilename, "-"))