diff -ru flac123-0.0.9/configure.ac flac123-0.0.9-b2/configure.ac --- flac123-0.0.9/configure.ac 2005-05-07 16:05:24.000000000 -0700 +++ flac123-0.0.9-b2/configure.ac 2006-10-31 00:03:09.000000000 -0800 @@ -40,9 +40,9 @@ AC_PROG_CC # Checks for libraries. -AC_CHECK_LIB(FLAC, FLAC__file_decoder_new, [haveflac=yes], [haveflac=no], -lm) +AC_CHECK_LIB(FLAC, FLAC__stream_decoder_new, [haveflac=yes], [haveflac=no], -lm) if test "$haveflac" = "yes"; then - FLAC_LIBS="-lFLAC -lm" + FLAC_LIBS="-lFLAC -logg -lm" AC_SUBST(FLAC_LIBS) else AC_MSG_ERROR(FLAC required!) diff -ru flac123-0.0.9/flac123.c flac123-0.0.9-b2/flac123.c --- flac123-0.0.9/flac123.c 2005-05-08 21:25:20.000000000 -0700 +++ flac123-0.0.9-b2/flac123.c 2006-10-31 00:06:06.000000000 -0800 @@ -49,12 +49,17 @@ static void play_file(const char *); static void play_remote_file(void); -void flac_error_hdl(const FLAC__FileDecoder *, FLAC__StreamDecoderErrorStatus, - void *); -void flac_metadata_hdl(const FLAC__FileDecoder *, const FLAC__StreamMetadata *, - void *); +#ifdef LEGACY_FLAC +void flac_error_hdl(const FLAC__FileDecoder *, FLAC__StreamDecoderErrorStatus, void *); +void flac_metadata_hdl(const FLAC__FileDecoder *, const FLAC__StreamMetadata *, void *); FLAC__StreamDecoderWriteStatus flac_write_hdl(const FLAC__FileDecoder *, const FLAC__Frame *, const FLAC__int32 * const buf[], void *); +#else +void flac_error_hdl(const FLAC__StreamDecoder *, FLAC__StreamDecoderErrorStatus, void *); +void flac_metadata_hdl(const FLAC__StreamDecoder *, const FLAC__StreamMetadata *, void *); +FLAC__StreamDecoderWriteStatus flac_write_hdl(const FLAC__StreamDecoder *, + const FLAC__Frame *, const FLAC__int32 * const buf[], void *); +#endif static void signal_handler(int); static int quit_now = 0; @@ -190,6 +195,7 @@ file_info.year[VORBIS_YEAR_LEN] = '\0'; /* create and initialize flac decoder object */ +#ifdef LEGACY_FLAC file_info.decoder = FLAC__file_decoder_new(); FLAC__file_decoder_set_md5_checking(file_info.decoder, true); FLAC__file_decoder_set_filename(file_info.decoder, filename); @@ -210,13 +216,29 @@ FLAC__file_decoder_delete(file_info.decoder); return false; } +#else + file_info.decoder = FLAC__stream_decoder_new(); + FLAC__stream_decoder_set_md5_checking(file_info.decoder, true); + + /* read metadata */ + if ((FLAC__stream_decoder_init_file(file_info.decoder, filename, flac_write_hdl, flac_metadata_hdl, flac_error_hdl, (void *)&file_info) != FLAC__STREAM_DECODER_INIT_STATUS_OK) + || (!FLAC__stream_decoder_process_until_end_of_metadata(file_info.decoder))) + { + FLAC__stream_decoder_delete(file_info.decoder); + return false; + } +#endif /* open libao output device */ if (cli_args.wavfile) { if (!(file_info.ao_dev = ao_open_file(ao_driver_id("wav"), cli_args.wavfile, /*overwrite*/ 1, &(file_info.ao_fmt), NULL))) { fprintf(stderr, "Error opening wav file %s\n", cli_args.wavfile); +#ifdef LEGACY_FLAC FLAC__file_decoder_delete(file_info.decoder); +#else + FLAC__stream_decoder_delete(file_info.decoder); +#endif return false; } } @@ -224,7 +246,11 @@ if (!(file_info.ao_dev = ao_open_live(ao_output_id, &(file_info.ao_fmt), NULL))) { fprintf(stderr, "Error opening ao device %d\n", ao_output_id); +#ifdef LEGACY_FLAC FLAC__file_decoder_delete(file_info.decoder); +#else + FLAC__stream_decoder_delete(file_info.decoder); +#endif return false; } } @@ -237,7 +263,11 @@ if (!(file_info.ao_dev = ao_open_live(ao_output_id, &(file_info.ao_fmt), NULL))) { fprintf(stderr, "Error opening ao device %d\n", ao_output_id); +#ifdef LEGACY_FLAC FLAC__file_decoder_delete(file_info.decoder); +#else + FLAC__stream_decoder_delete(file_info.decoder); +#endif return false; } } @@ -257,8 +287,13 @@ void decoder_destructor(void) { +#ifdef LEGACY_FLAC FLAC__file_decoder_finish(file_info.decoder); FLAC__file_decoder_delete(file_info.decoder); +#else + FLAC__stream_decoder_finish(file_info.decoder); + FLAC__stream_decoder_delete(file_info.decoder); +#endif file_info.is_loaded = false; file_info.is_playing = false; file_info.filename[0] = '\0'; @@ -272,9 +307,15 @@ return; } +#ifdef LEGACY_FLAC while (FLAC__file_decoder_process_single(file_info.decoder) == true && FLAC__file_decoder_get_state(file_info.decoder) == FLAC__FILE_DECODER_OK && !interrupted) +#else + while (FLAC__stream_decoder_process_single(file_info.decoder) == true && + FLAC__stream_decoder_get_state(file_info.decoder) < + FLAC__STREAM_DECODER_END_OF_STREAM && !interrupted) +#endif { } interrupted = 0; /* more accurate feedback if placed after loop */ @@ -292,13 +333,22 @@ { if (file_info.is_playing == true) { +#ifdef LEGACY_FLAC if (FLAC__file_decoder_get_state(file_info.decoder) == FLAC__FILE_DECODER_END_OF_FILE) +#else + if (FLAC__stream_decoder_get_state(file_info.decoder) == + FLAC__STREAM_DECODER_END_OF_STREAM) +#endif { decoder_destructor(); printf("@P 0\n"); } +#ifdef LEGACY_FLAC else if (!FLAC__file_decoder_process_single(file_info.decoder)) +#else + else if (!FLAC__stream_decoder_process_single(file_info.decoder)) +#endif { fprintf(stderr, "error decoding single frame!\n"); } @@ -314,14 +364,24 @@ } } +#ifdef LEGACY_FLAC void flac_error_hdl(const FLAC__FileDecoder *dec, FLAC__StreamDecoderErrorStatus status, void *data) +#else +void flac_error_hdl(const FLAC__StreamDecoder *dec, + FLAC__StreamDecoderErrorStatus status, void *data) +#endif { fprintf(stderr, "error handler called!\n"); } +#ifdef LEGACY_FLAC void flac_metadata_hdl(const FLAC__FileDecoder *dec, const FLAC__StreamMetadata *meta, void *data) +#else +void flac_metadata_hdl(const FLAC__StreamDecoder *dec, + const FLAC__StreamMetadata *meta, void *data) +#endif { file_info_struct *p = (file_info_struct *) data; @@ -344,10 +404,17 @@ } } +#ifdef LEGACY_FLAC FLAC__StreamDecoderWriteStatus flac_write_hdl(const FLAC__FileDecoder *dec, const FLAC__Frame *frame, const FLAC__int32 * const buf[], void *data) +#else +FLAC__StreamDecoderWriteStatus flac_write_hdl(const FLAC__StreamDecoder *dec, + const FLAC__Frame *frame, + const FLAC__int32 * const buf[], + void *data) +#endif { int sample, channel, i; uint_32 samples = frame->header.blocksize; diff -ru flac123-0.0.9/flac123.h flac123-0.0.9-b2/flac123.h --- flac123-0.0.9/flac123.h 2005-02-24 21:52:02.000000000 -0800 +++ flac123-0.0.9-b2/flac123.h 2006-10-30 17:23:56.000000000 -0800 @@ -22,13 +22,24 @@ #include #include +/* by LEGACY_FLAC we mean pre-1.1.3 before FLAC__FileDecoder was merged into FLAC__StreamDecoder */ +#if !defined(FLAC_API_VERSION_CURRENT) || FLAC_API_VERSION_CURRENT < 8 +#define LEGACY_FLAC +#else +#undef LEGACY_FLAC +#endif + /* string widths for printing ID3 (vorbis) data in remote mode */ #define VORBIS_TAG_LEN 30 #define VORBIS_YEAR_LEN 4 /* the main data structure of the program */ typedef struct { +#ifdef LEGACY_FLAC FLAC__FileDecoder *decoder; +#else + FLAC__StreamDecoder *decoder; +#endif /* bits, rate, channels, byte_format */ ao_sample_format sam_fmt; /* input sample's true format */ diff -ru flac123-0.0.9/remote.c flac123-0.0.9-b2/remote.c --- flac123-0.0.9/remote.c 2005-02-24 21:50:41.000000000 -0800 +++ flac123-0.0.9-b2/remote.c 2006-10-30 17:24:28.000000000 -0800 @@ -150,8 +150,13 @@ file_info.current_sample += delta_frames; } +#ifdef LEGACY_FLAC FLAC__file_decoder_seek_absolute(file_info.decoder, file_info.current_sample); +#else + FLAC__stream_decoder_seek_absolute(file_info.decoder, + file_info.current_sample); +#endif } /* absolute seek */ else @@ -161,7 +166,11 @@ file_info.elapsed_time = absolute_time; file_info.current_sample = absolute_frame; +#ifdef LEGACY_FLAC FLAC__file_decoder_seek_absolute(file_info.decoder, absolute_frame); +#else + FLAC__stream_decoder_seek_absolute(file_info.decoder, absolute_frame); +#endif } }