diff options
Diffstat (limited to 'testing/timidity++/TiMidity++-2.13.2+flac-1.1.3.patch')
-rw-r--r-- | testing/timidity++/TiMidity++-2.13.2+flac-1.1.3.patch | 349 |
1 files changed, 349 insertions, 0 deletions
diff --git a/testing/timidity++/TiMidity++-2.13.2+flac-1.1.3.patch b/testing/timidity++/TiMidity++-2.13.2+flac-1.1.3.patch new file mode 100644 index 000000000..200d011a3 --- /dev/null +++ b/testing/timidity++/TiMidity++-2.13.2+flac-1.1.3.patch @@ -0,0 +1,349 @@ +diff -urN TiMidity++-2.13.2.orig/configure.in TiMidity++-2.13.2/configure.in +--- TiMidity++-2.13.2.orig/configure.in 2004-10-03 15:39:52 +0300 ++++ TiMidity++-2.13.2/configure.in 2007-02-19 13:06:42 +0200 +@@ -1216,11 +1216,39 @@ + EXTRACT_CPPFLAGS(CPPFLAGS,CFLAGS,$LIBFLAC_CFLAGS) + LIBS="$LIBS $LIBFLAC_LIBS" + ]) +- AM_PATH_LIBOGGFLAC([ +- EXTRADEFS="$EXTRADEFS -DAU_OGGFLAC" +- EXTRACT_CPPFLAGS(CPPFLAGS,CFLAGS,$LIBOGGFLAC_CFLAGS) +- LIBS="$LIBS $LIBOGGFLAC_LIBS" +- ]) ++ # in FLAC-1.1.3, libOggFLAC was merged into libFLAC ++ # FLAC_API_VERSION_CURRENT first appears in FLAC-1.1.3 ++ AC_MSG_CHECKING(for legacy libFLAC (<1.1.13)) ++ ac_save_LIBS="$LIBS" ++ LIBS= ++ AC_TRY_RUN([ ++ #include <FLAC/export.h> ++ int main () { return FLAC_API_VERSION_CURRENT<8; } ++ ],legacy_flac=no,legacy_flac=yes,legacy_flac=no) ++ AC_MSG_RESULT($legacy_flac) ++ LIBS="$ac_save_LIBS" ++ if test "x$legacy_flac" = xyes; then ++ AM_PATH_LIBOGGFLAC([ ++ EXTRADEFS="$EXTRADEFS -DAU_OGGFLAC" ++ EXTRACT_CPPFLAGS(CPPFLAGS,CFLAGS,$LIBOGGFLAC_CFLAGS) ++ LIBS="$LIBS $LIBOGGFLAC_LIBS" ++ ]) ++ else ++ ++ AC_MSG_CHECKING(for Ogg support in libFLAC ) ++ ac_save_LIBS="$LIBS" ++ LIBS="-lFLAC -lm -logg" ++ AC_TRY_RUN([ ++ #include <FLAC/export.h> ++ int main () { return !FLAC_API_SUPPORTS_OGG_FLAC; } ++ ],ogg_flac=yes,ogg_flac=yes,ogg_flac=no) ++ AC_MSG_RESULT($ogg_flac) ++ LIBS="$ac_save_LIBS" ++ if test "x$ogg_flac" = xyes; then ++ LIBS="$LIBS -logg" ++ CFLAGS="$CFLAGS -DAU_OGGFLAC" ++ fi ++ fi + else + AC_MSG_RESULT(no) + fi +diff -urN TiMidity++-2.13.2.orig/timidity/flac_a.c TiMidity++-2.13.2/timidity/flac_a.c +--- TiMidity++-2.13.2.orig/timidity/flac_a.c 2004-05-23 07:35:44 +0300 ++++ TiMidity++-2.13.2/timidity/flac_a.c 2007-02-19 13:06:55 +0200 +@@ -38,14 +38,22 @@ + + #if defined(AU_FLAC_DLL) || defined(AU_OGGFLAC_DLL) + #include <windows.h> +-#define FLAC__EXPORT_H /* don't include "OggFLAC/export.h" */ +-#define FLAC_API +-#define OggFLAC__EXPORT_H /* don't include "FLAC/export.h" */ +-#define OggFLAC_API ++#include <FLAC/export.h> /* need export.h to figure out API version from FLAC_API_VERSION_CURRENT */ ++#undef FLAC_API ++#undef OggFLAC_API + #endif + + #include <FLAC/all.h> +-#ifdef AU_OGGFLAC ++ ++/* by LEGACY_FLAC we mean before FLAC 1.1.3 */ ++/* in FLAC 1.1.3, libOggFLAC is merged into libFLAC and all encoding layers are merged into the stream encoder */ ++#if !defined(FLAC_API_VERSION_CURRENT) || FLAC_API_VERSION_CURRENT < 8 ++#define LEGACY_FLAC ++#else ++#undef LEGACY_FLAC ++#endif ++ ++#if defined(LEGACY_FLAC) && defined(AU_OGGFLAC) + #include <OggFLAC/stream_encoder.h> + #endif + +@@ -100,17 +108,21 @@ + unsigned long out_bytes; + union { + FLAC__StreamEncoderState flac; ++#ifdef LEGACY_FLAC + FLAC__SeekableStreamEncoderState s_flac; + #ifdef AU_OGGFLAC + OggFLAC__StreamEncoderState ogg; + #endif ++#endif + } state; + union { + union { + FLAC__StreamEncoder *stream; ++#ifdef LEGACY_FLAC + FLAC__SeekableStreamEncoder *s_stream; ++#endif + } flac; +-#ifdef AU_OGGFLAC ++#if defined(LEGACY_FLAC) && defined(AU_OGGFLAC) + union { + OggFLAC__StreamEncoder *stream; + } ogg; +@@ -158,7 +170,7 @@ + static long serial_number = 0; + FLAC_ctx *flac_ctx = NULL; + +-#ifdef AU_OGGFLAC ++#if defined(LEGACY_FLAC) && defined(AU_OGGFLAC) + static FLAC__StreamEncoderWriteStatus + ogg_stream_encoder_write_callback(const OggFLAC__StreamEncoder *encoder, + const FLAC__byte buffer[], +@@ -168,8 +180,13 @@ + static FLAC__StreamEncoderWriteStatus + flac_stream_encoder_write_callback(const FLAC__StreamEncoder *encoder, + const FLAC__byte buffer[], ++#ifdef LEGACY_FLAC + unsigned bytes, unsigned samples, ++#else ++ size_t bytes, unsigned samples, ++#endif + unsigned current_frame, void *client_data); ++#ifdef LEGACY_FLAC + static void flac_stream_encoder_metadata_callback(const FLAC__StreamEncoder *encoder, + const FLAC__StreamMetadata *metadata, + void *client_data); +@@ -181,6 +198,7 @@ + static void flac_seekable_stream_encoder_metadata_callback(const FLAC__SeekableStreamEncoder *encoder, + const FLAC__StreamMetadata *metadata, + void *client_data); ++#endif + + /* preset */ + void flac_set_compression_level(int compression_level) +@@ -281,7 +299,11 @@ + #ifdef AU_OGGFLAC + void flac_set_option_oggflac(int isogg) + { ++#ifdef LEGACY_FLAC + flac_options.isogg = isogg; ++#else ++ flac_options.isogg = (FLAC_API_SUPPORTS_OGG_FLAC && isogg); ++#endif + } + #endif + +@@ -295,6 +317,7 @@ + dpm.fd = -1; + + if (ctx != NULL) { ++#ifdef LEGACY_FLAC + #ifdef AU_OGGFLAC + if (flac_options.isogg) { + if (ctx->encoder.ogg.stream) { +@@ -317,6 +340,12 @@ + FLAC__stream_encoder_delete(ctx->encoder.flac.stream); + } + } ++#else ++ if (ctx->encoder.flac.stream) { ++ FLAC__stream_encoder_finish(ctx->encoder.flac.stream); ++ FLAC__stream_encoder_delete(ctx->encoder.flac.stream); ++ } ++#endif + free(ctx); + flac_ctx = NULL; + } +@@ -329,6 +358,9 @@ + FLAC__StreamMetadata padding; + FLAC__StreamMetadata *metadata[4]; + int num_metadata = 0; ++#ifndef LEGACY_FLAC ++ FLAC__StreamEncoderInitStatus init_status; ++#endif + + FLAC_ctx *ctx; + +@@ -371,6 +403,7 @@ + metadata[num_metadata++] = &padding; + } + ++#ifdef LEGACY_FLAC + #ifdef AU_OGGFLAC + if (flac_options.isogg) { + if ((ctx->encoder.ogg.stream = OggFLAC__stream_encoder_new()) == NULL) { +@@ -542,6 +575,67 @@ + return -1; + } + } ++#else /* !LEGACY_FLAC */ ++ if ((ctx->encoder.flac.stream = FLAC__stream_encoder_new()) == NULL) { ++ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot create FLAC stream"); ++ flac_session_close(); ++ return -1; ++ } ++ ++#ifdef AU_OGGFLAC ++ if (flac_options.isogg) { ++ /* set sequential number for serial */ ++ serial_number++; ++ if (serial_number == 1) { ++ srand(time(NULL)); ++ serial_number = rand(); ++ } ++ FLAC__stream_encoder_set_ogg_serial_number(ctx->encoder.flac.stream, serial_number); ++ } ++#endif /* AU_OGGFLAC */ ++ FLAC__stream_encoder_set_channels(ctx->encoder.flac.stream, nch); ++ /* 16bps only */ ++ FLAC__stream_encoder_set_bits_per_sample(ctx->encoder.flac.stream, 16); ++ ++ FLAC__stream_encoder_set_verify(ctx->encoder.flac.stream, flac_options.verify); ++ ++ if (!FLAC__format_sample_rate_is_valid(dpm.rate)) { ++ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "invalid sampling rate %d", dpm.rate); ++ flac_session_close(); ++ return -1; ++ } ++ FLAC__stream_encoder_set_sample_rate(ctx->encoder.flac.stream, dpm.rate); ++ ++ FLAC__stream_encoder_set_qlp_coeff_precision(ctx->encoder.flac.stream, flac_options.qlp_coeff_precision); ++ /* expensive! */ ++ FLAC__stream_encoder_set_do_qlp_coeff_prec_search(ctx->encoder.flac.stream, flac_options.qlp_coeff_precision_search); ++ ++ if (nch == 2) { ++ FLAC__stream_encoder_set_do_mid_side_stereo(ctx->encoder.flac.stream, flac_options.mid_side); ++ FLAC__stream_encoder_set_loose_mid_side_stereo(ctx->encoder.flac.stream, flac_options.adaptive_mid_side); ++ } ++ ++ FLAC__stream_encoder_set_max_lpc_order(ctx->encoder.flac.stream, flac_options.max_lpc_order); ++ FLAC__stream_encoder_set_min_residual_partition_order(ctx->encoder.flac.stream, flac_options.min_residual_partition_order); ++ FLAC__stream_encoder_set_max_residual_partition_order(ctx->encoder.flac.stream, flac_options.max_residual_partition_order); ++ ++ FLAC__stream_encoder_set_blocksize(ctx->encoder.flac.stream, flac_options.blocksize); ++ ++ if (0 < num_metadata) ++ FLAC__stream_encoder_set_metadata(ctx->encoder.flac.stream, metadata, num_metadata); ++ ++#ifdef AU_OGGFLAC ++ if (flac_options.isogg) ++ init_status = FLAC__stream_encoder_init_ogg_stream(ctx->encoder.flac.stream, NULL, flac_stream_encoder_write_callback, NULL, NULL, NULL, ctx); ++ else ++#endif ++ init_status = FLAC__stream_encoder_init_stream(ctx->encoder.flac.stream, flac_stream_encoder_write_callback, NULL, NULL, NULL, ctx); ++ if (init_status != FLAC__STREAM_ENCODER_INIT_STATUS_OK) { ++ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot create FLAC encoder (init status: %s)", FLAC__StreamEncoderInitStatusString[init_status]); ++ flac_session_close(); ++ return -1; ++ } ++#endif + + return 0; + } +@@ -638,7 +732,7 @@ + return 0; + } + +-#ifdef AU_OGGFLAC ++#if defined(LEGACY_FLAC) && defined(AU_OGGFLAC) + static FLAC__StreamEncoderWriteStatus + ogg_stream_encoder_write_callback(const OggFLAC__StreamEncoder *encoder, + const FLAC__byte buffer[], +@@ -658,7 +752,11 @@ + static FLAC__StreamEncoderWriteStatus + flac_stream_encoder_write_callback(const FLAC__StreamEncoder *encoder, + const FLAC__byte buffer[], ++#ifdef LEGACY_FLAC + unsigned bytes, unsigned samples, ++#else ++ size_t bytes, unsigned samples, ++#endif + unsigned current_frame, void *client_data) + { + FLAC_ctx *ctx = (FLAC_ctx *)client_data; +@@ -670,6 +768,7 @@ + else + return FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR; + } ++#ifdef LEGACY_FLAC + static void flac_stream_encoder_metadata_callback(const FLAC__StreamEncoder *encoder, + const FLAC__StreamMetadata *metadata, + void *client_data) +@@ -695,6 +794,7 @@ + void *client_data) + { + } ++#endif + + static int output_data(char *buf, int32 nbytes) + { +@@ -723,6 +823,7 @@ + oggbuf[i] = *s++; + } + ++#ifdef LEGACY_FLAC + #ifdef AU_OGGFLAC + if (flac_options.isogg) { + ctx->state.ogg = OggFLAC__stream_encoder_get_state(ctx->encoder.ogg.stream); +@@ -793,6 +894,29 @@ + return -1; + } + } ++#else /* !LEGACY_FLAC */ ++ ctx->state.flac = FLAC__stream_encoder_get_state(ctx->encoder.flac.stream); ++ if (ctx->state.flac != FLAC__STREAM_ENCODER_OK) { ++ if (ctx->state.flac == FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR | ++ FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA) { ++ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "FLAC stream verify error (%s)", ++ FLAC__StreamDecoderStateString[FLAC__stream_encoder_get_verify_decoder_state(ctx->encoder.flac.stream)]); ++ } ++ else { ++ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot encode FLAC stream (%s)", ++ FLAC__StreamEncoderStateString[ctx->state.flac]); ++ } ++ flac_session_close(); ++ return -1; ++ } ++ ++ if (!FLAC__stream_encoder_process_interleaved(ctx->encoder.flac.stream, oggbuf, ++ nbytes / nch / 2 )) { ++ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "cannot encode FLAC stream"); ++ flac_session_close(); ++ return -1; ++ } ++#endif + ctx->in_bytes += nbytes; + + free(oggbuf); +@@ -813,6 +937,7 @@ + return; + } + ++#ifdef LEGACY_FLAC + if (flac_options.isogg) { + #ifdef AU_OGGFLAC + if ((ctx->state.ogg = OggFLAC__stream_encoder_get_state(ctx->encoder.ogg.stream)) != OggFLAC__STREAM_ENCODER_OK) { +@@ -838,6 +963,13 @@ + /* fall through */ + } + } ++#else /* !LEGACY_FLAC */ ++ if ((ctx->state.flac = FLAC__stream_encoder_get_state(ctx->encoder.flac.stream)) != FLAC__STREAM_ENCODER_OK) { ++ ctl->cmsg(CMSG_ERROR, VERB_NORMAL, "FLAC stream encoder is invalid (%s)", ++ FLAC__StreamEncoderStateString[ctx->state.flac]); ++ /* fall through */ ++ } ++#endif + + ctl->cmsg(CMSG_INFO, VERB_NORMAL, "Wrote %lu/%lu bytes(%g%% compressed)", + ctx->out_bytes, ctx->in_bytes, ((double)ctx->out_bytes / (double)ctx->in_bytes) * 100.); |