diff -urN mpfc-flac-0.1.orig/configure.ac mpfc-flac-0.1/configure.ac --- mpfc-flac-0.1.orig/configure.ac 2006-01-01 19:54:58 +0200 +++ mpfc-flac-0.1/configure.ac 2007-02-19 20:30:29 +0200 @@ -13,7 +13,7 @@ AC_SUBST(prefix) AC_CHECK_HEADERS([FLAC/all.h],,[AC_MSG_ERROR(*** Can't find FLAC/all.h ***)]) -AC_CHECK_LIB(FLAC, FLAC__file_decoder_process_single,,[AC_MSG_ERROR(*** Can't find FLAC library ***)]) +AC_CHECK_LIB(FLAC, FLAC__stream_decoder_process_single,,[AC_MSG_ERROR(*** Can't find FLAC library ***)]) FLAC_LIBS="-lFLAC" AC_SUBST(FLAC_LIBS) diff -urN mpfc-flac-0.1.orig/src/flac.c mpfc-flac-0.1/src/flac.c --- mpfc-flac-0.1.orig/src/flac.c 2006-01-06 00:45:33 +0200 +++ mpfc-flac-0.1/src/flac.c 2007-02-19 20:31:22 +0200 @@ -23,6 +23,14 @@ //#include "config.h" #define __MPFC_OUTER__ #include + +/* FLAC 1.1.3 has FLAC_API_VERSION_CURRENT == 8 */ +#if !defined(FLAC_API_VERSION_CURRENT) || FLAC_API_VERSION_CURRENT < 8 +#define LEGACY_FLAC +#else +#undef LEGACY_FLAC +#endif + #include #include "types.h" #include "inp.h" @@ -48,7 +56,11 @@ static int flac_max_bs, flac_bpp; /* Decoder object */ +#ifdef LEGACY_FLAC static FLAC__FileDecoder *flac_decoder = NULL; +#else +static FLAC__StreamDecoder *flac_decoder = NULL; +#endif /* Buffer for writing decoded stream */ static byte *flac_buf = NULL, *flac_buf_ptr = NULL; @@ -71,7 +83,11 @@ flac_client_data_t flac_client_data; /* Write decoded data callback */ +#ifdef LEGACY_FLAC FLAC__StreamDecoderWriteStatus flac_write_callback( const FLAC__FileDecoder *decoder, +#else +FLAC__StreamDecoderWriteStatus flac_write_callback( const FLAC__StreamDecoder *decoder, +#endif const FLAC__Frame *frame, const FLAC__int32 * const buf[], void *client_data ) { int i, j; @@ -116,7 +132,11 @@ } /* End of 'flac_write_callback' function */ /* Process metadata callback */ +#ifdef LEGACY_FLAC void flac_metadata_callback( const FLAC__FileDecoder *decoder, +#else +void flac_metadata_callback( const FLAC__StreamDecoder *decoder, +#endif const FLAC__StreamMetadata *metadata, void *client_data ) { flac_client_data_t *cd = (flac_client_data_t *)client_data; @@ -144,31 +164,49 @@ } /* End of 'flac_metadata_callback' function */ /* Error callback */ +#ifdef LEGACY_FLAC void flac_error_callback( const FLAC__FileDecoder *decoder, +#else +void flac_error_callback( const FLAC__StreamDecoder *decoder, +#endif FLAC__StreamDecoderErrorStatus status, void *client_data ) { logger_error(flac_log, 0, "flac: got stream decoder error %d", status); } /* End of 'flac_error_callback' function */ /* Read file metadata */ +#ifdef LEGACY_FLAC FLAC__FileDecoder *flac_read_metadata( char *filename, void *client_data ) { FLAC__FileDecoderState fds; int buf_size; FLAC__FileDecoder *decoder; +#else +FLAC__StreamDecoder *flac_read_metadata( char *filename, void *client_data ) +{ + FLAC__StreamDecoderState fds; + int buf_size; + FLAC__StreamDecoder *decoder; +#endif logger_debug(flac_log, "flac: flac_read_metadata(%s)", filename); /* Initialize decoder */ +#ifdef LEGACY_FLAC decoder = FLAC__file_decoder_new(); logger_debug(flac_log, "flac: FLAC__file_decoder_new returned %p", decoder); +#else + decoder = FLAC__stream_decoder_new(); + logger_debug(flac_log, "flac: FLAC__stream_decoder_new returned %p", decoder); +#endif if (decoder == NULL) { logger_error(flac_log, 0, "flac: FLAC__file_decoder_new failed"); FLAC__file_decoder_delete(decoder); return NULL; } +#ifdef LEGACY_FLAC if (!FLAC__file_decoder_set_client_data(decoder, client_data)) { logger_error(flac_log, 0, "flac: FLAC__file_decoder_set_client_data failed"); @@ -206,16 +244,32 @@ { logger_error(flac_log, 0, "flac: FLAC__file_decoder_init failed"); FLAC__file_decoder_delete(decoder); +#else + fds = FLAC__stream_decoder_init_file(decoder, filename, flac_write_callback, flac_metadata_callback, flac_error_callback, client_data); + logger_debug(flac_log, "flac: FLAC__stream_decoder_init_file returned %d", fds); + if (fds != FLAC__STREAM_DECODER_INIT_STATUS_OK) + { + logger_error(flac_log, 0, "flac: FLAC__stream_decoder_init_file failed"); + FLAC__stream_decoder_delete(decoder); +#endif return NULL; } /* Read metadata */ +#ifdef LEGACY_FLAC if (!FLAC__file_decoder_process_until_end_of_metadata(decoder)) { logger_error(flac_log, 0, "flac: FLAC__file_decoder_process_until_end_of_metadata failed"); FLAC__file_decoder_finish(decoder); FLAC__file_decoder_delete(decoder); +#else + if (!FLAC__stream_decoder_process_until_end_of_metadata(decoder)) + { + logger_error(flac_log, 0, "flac: FLAC__stream_decoder_process_until_end_of_metadata failed"); + FLAC__stream_decoder_finish(decoder); + FLAC__stream_decoder_delete(decoder); +#endif return NULL; } logger_debug(flac_log, "flac: Samplerate: %d, channels: %d, " @@ -227,7 +281,11 @@ /* Start play function */ bool_t flac_start( char *filename ) { +#ifdef LEGACY_FLAC FLAC__FileDecoderState fds; +#else + FLAC__StreamDecoderState fds; +#endif int buf_size; logger_debug(flac_log, "flac: flac_start(%s)", filename); @@ -256,8 +314,13 @@ if (flac_buf == NULL) { logger_error(flac_log, 0, "flac: no enough memory"); +#ifdef LEGACY_FLAC FLAC__file_decoder_finish(flac_decoder); FLAC__file_decoder_delete(flac_decoder); +#else + FLAC__stream_decoder_finish(flac_decoder); + FLAC__stream_decoder_delete(flac_decoder); +#endif flac_decoder = NULL; return FALSE; } @@ -281,8 +344,13 @@ if (flac_decoder != NULL) { +#ifdef LEGACY_FLAC FLAC__file_decoder_finish(flac_decoder); FLAC__file_decoder_delete(flac_decoder); +#else + FLAC__stream_decoder_finish(flac_decoder); + FLAC__stream_decoder_delete(flac_decoder); +#endif flac_decoder = NULL; } } /* End of 'flac_end' function */ @@ -302,17 +370,30 @@ flac_buf_ptr = flac_buf; flac_buf_size = 0; +#ifdef LEGACY_FLAC res = FLAC__file_decoder_seek_absolute(flac_decoder, +#else + res = FLAC__stream_decoder_seek_absolute(flac_decoder, +#endif flac_seek_pos * flac_freq); +#ifdef LEGACY_FLAC logger_debug(flac_log, "flac: FLAC__file_decoder_seek_absolute returned %d", res); +#else + logger_debug(flac_log, "flac: FLAC__stream_decoder_seek_absolute returned %d", res); +#endif flac_seek_pos = -1; } /* Read data */ if (flac_buf_size == 0) { +#ifdef LEGACY_FLAC res = FLAC__file_decoder_process_single(flac_decoder); logger_debug(flac_log, "flac: FLAC__file_decoder_process_single returned %d", res); +#else + res = FLAC__stream_decoder_process_single(flac_decoder); + logger_debug(flac_log, "flac: FLAC__stream_decoder_process_single returned %d", res); +#endif } /* Flush buffer */ @@ -352,7 +433,11 @@ /* Get song info */ song_info_t *flac_get_info( char *file_name, int *len ) { +#ifdef LEGACY_FLAC FLAC__FileDecoder *decoder; +#else + FLAC__StreamDecoder *decoder; +#endif flac_client_data_t cd; (*len) = 0; @@ -367,8 +452,13 @@ (*len) = cd.m_length; /* Free memory */ +#ifdef LEGACY_FLAC FLAC__file_decoder_finish(decoder); FLAC__file_decoder_delete(decoder); +#else + FLAC__stream_decoder_finish(decoder); + FLAC__stream_decoder_delete(decoder); +#endif return NULL; } /* End of 'flac_get_info' function */