From 762806f18406049fd7a3579087172b92171fdbc4 Mon Sep 17 00:00:00 2001 Message-Id: <762806f18406049fd7a3579087172b92171fdbc4.1715134795.git.mdw@distorted.org.uk> From: Mark Wooding Date: Sat, 10 Nov 2007 18:44:20 +0000 Subject: [PATCH] work around FLAC API change braindamage Organization: Straylight/Edgeware From: Richard Kettlewell --- configure.ac | 1 + plugins/tracklength.c | 79 ++++++++++++++++++++++++++++++------------- server/decode.c | 20 ++++++++++- 3 files changed, 76 insertions(+), 24 deletions(-) diff --git a/configure.ac b/configure.ac index 68dbae0..f372639 100644 --- a/configure.ac +++ b/configure.ac @@ -255,6 +255,7 @@ if test $want_server = yes; then AC_CHECK_HEADERS([db.h],[:],[ missing_headers="$missing_headers $ac_header" ]) + AC_CHECK_HEADERS([FLAC/file_decoder.h]) fi AC_CHECK_HEADERS([dlfcn.h gcrypt.h \ getopt.h iconv.h langinfo.h \ diff --git a/plugins/tracklength.c b/plugins/tracklength.c index c1b9cb9..cac7008 100644 --- a/plugins/tracklength.c +++ b/plugins/tracklength.c @@ -32,7 +32,15 @@ #include #include -#include +/* libFLAC has had an API change and stupidly taken away the old API */ +#if HAVE_FLAC_FILE_DECODER_H +# include +#else +# include +#define FLAC__FileDecoder FLAC__StreamDecoder +#define FLAC__FileDecoderState FLAC__StreamDecoderState +#endif + #include @@ -159,33 +167,58 @@ static FLAC__StreamDecoderWriteStatus flac_write } static long tl_flac(const char *path) { - FLAC__FileDecoder *fd = 0; - FLAC__FileDecoderState fs; struct flac_state state[1]; state->duration = -1; /* error */ state->path = path; - if(!(fd = FLAC__file_decoder_new())) { - disorder_error(0, "FLAC__file_decoder_new failed"); - goto fail; - } - if(!(FLAC__file_decoder_set_filename(fd, path))) { - disorder_error(0, "FLAC__file_set_filename failed"); - goto fail; - } - FLAC__file_decoder_set_metadata_callback(fd, flac_metadata); - FLAC__file_decoder_set_error_callback(fd, flac_error); - FLAC__file_decoder_set_write_callback(fd, flac_write); - FLAC__file_decoder_set_client_data(fd, state); - if((fs = FLAC__file_decoder_init(fd))) { - disorder_error(0, "FLAC__file_decoder_init: %s", - FLAC__FileDecoderStateString[fs]); - goto fail; - } - FLAC__file_decoder_process_until_end_of_metadata(fd); +#if HAVE_FLAC_FILE_DECODER_H + { + FLAC__FileDecoder *fd = 0; + FLAC__FileDecoderState fs; + + if(!(fd = FLAC__file_decoder_new())) { + disorder_error(0, "FLAC__file_decoder_new failed"); + goto fail; + } + if(!(FLAC__file_decoder_set_filename(fd, path))) { + disorder_error(0, "FLAC__file_set_filename failed"); + goto fail; + } + FLAC__file_decoder_set_metadata_callback(fd, flac_metadata); + FLAC__file_decoder_set_error_callback(fd, flac_error); + FLAC__file_decoder_set_write_callback(fd, flac_write); + FLAC__file_decoder_set_client_data(fd, state); + if((fs = FLAC__file_decoder_init(fd))) { + disorder_error(0, "FLAC__file_decoder_init: %s", + FLAC__FileDecoderStateString[fs]); + goto fail; + } + FLAC__file_decoder_process_until_end_of_metadata(fd); +fail: + if(fd) + FLAC__file_decoder_delete(fd); + }# +#else + { + FLAC__StreamDecoder *sd = 0; + FLAC__StreamDecoderInitStatus is; + + if(!(sd = FLAC__stream_decoder_new())) { + disorder_error(0, "FLAC__stream_decoder_new failed"); + goto fail; + } + if((is = FLAC__stream_decoder_init_file(sd, path, flac_write, flac_metadata, + flac_error, state))) { + disorder_error(0, "FLAC__stream_decoder_init_file %s: %s", + path, FLAC__StreamDecoderInitStatusString[is]); + goto fail; + } + FLAC__stream_decoder_process_until_end_of_metadata(sd); fail: - if(fd) - FLAC__file_decoder_delete(fd); + if(sd) + FLAC__stream_decoder_delete(sd); + } +#endif return state->duration; } diff --git a/server/decode.c b/server/decode.c index 8161dba..47227a2 100644 --- a/server/decode.c +++ b/server/decode.c @@ -34,7 +34,15 @@ #include #include #include -#include + +/* libFLAC has had an API change and stupidly taken away the old API */ +#if HAVE_FLAC_FILE_DECODER_H +# include +#else +# include +#define FLAC__FileDecoder FLAC__StreamDecoder +#define FLAC__FileDecoderState FLAC__StreamDecoderState +#endif #include "log.h" #include "syscalls.h" @@ -372,6 +380,7 @@ static FLAC__StreamDecoderWriteStatus flac_write /** @brief FLAC file decoder */ static void decode_flac(void) { +#if HAVE_FLAC_FILE_DECODER_H FLAC__FileDecoder *fd = 0; FLAC__FileDecoderState fs; @@ -385,6 +394,15 @@ static void decode_flac(void) { if((fs = FLAC__file_decoder_init(fd))) fatal(0, "FLAC__file_decoder_init: %s", FLAC__FileDecoderStateString[fs]); FLAC__file_decoder_process_until_end_of_file(fd); +#else + FLAC__StreamDecoder *sd = 0; + FLAC__StreamDecoderInitStatus is; + + if((is = FLAC__stream_decoder_init_file(sd, path, flac_write, flac_metadata, + flac_error, 0))) + fatal(0, "FLAC__stream_decoder_init_file %s: %s", + path, FLAC__StreamDecoderInitStatusString[is]); +#endif } /** @brief Lookup table of decoders */ -- [mdw]