123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- --- a/src/libcuecue/flac.c
- +++ b/src/libcuecue/flac.c
- @@ -27,6 +27,12 @@
- #include "cuecue.h"
- #include "cuecue_internal.h"
-
- +#if !defined(FLAC_API_VERSION_CURRENT) || FLAC_API_VERSION_CURRENT <= 7
- +#define LEGACY_FLAC
- +#else
- +#undef LEGACY_FLAC
- +#endif
- +
- typedef struct Internal
- {
- FILE *dst;
- @@ -38,7 +44,11 @@
- } Internal;
-
-
- +#ifdef LEGACY_FLAC
- void error(const FLAC__FileDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data)
- +#else
- +void error(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data)
- +#endif
- {
- Internal *internal = client_data;
- switch (status) {
- @@ -52,11 +62,21 @@
- strcpy(cuecue_error,"CRC Mismatch: FLAC file corrupted");
- internal->error=1;
- break;
- +#ifndef LEGACY_FLAC
- + case FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM:
- + strcpy(cuecue_error,"Unparseable stream");
- + internal->error=1;
- + break;
- +#endif
- }
- }
-
-
- +#ifdef LEGACY_FLAC
- void metadata(const FLAC__FileDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data)
- +#else
- +void metadata(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data)
- +#endif
- {
- if(metadata->type == FLAC__METADATA_TYPE_STREAMINFO) {
- /* get size of the file, for progress callback */
- @@ -66,7 +86,11 @@
- }
-
-
- +#ifdef LEGACY_FLAC
- FLAC__StreamDecoderWriteStatus write(const FLAC__FileDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data)
- +#else
- +FLAC__StreamDecoderWriteStatus write(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data)
- +#endif
- {
- Internal *internal = client_data;
- unsigned int samples = frame->header.blocksize;
- @@ -126,7 +150,11 @@
- {
- FILE *dst;
- Internal internal;
- +#ifdef LEGACY_FLAC
- FLAC__FileDecoder *decoder;
- +#else
- + FLAC__StreamDecoder *decoder;
- +#endif
-
- dst = fopen(file_destination, "wb");
-
- @@ -141,7 +169,11 @@
- internal.error=0;
- internal.dst=dst;
-
- +#ifdef LEGACY_FLAC
- decoder = FLAC__file_decoder_new();
- +#else
- + decoder = FLAC__stream_decoder_new();
- +#endif
-
- if (decoder==NULL) {
- snprintf(cuecue_error,CUECUE_ERROR_LENGTH,"Cannot create FLAC decoder! memory error ?");
- @@ -150,6 +182,7 @@
-
- internal.buffer = malloc(BUFFER_SIZE);
-
- +#ifdef LEGACY_FLAC
- FLAC__file_decoder_set_md5_checking(decoder, true);
- FLAC__file_decoder_set_filename(decoder, file_source);
-
- @@ -162,8 +195,20 @@
- snprintf(cuecue_error,1024,"Cannot open '%s'",file_source);
- internal.error=1;
- }
- +#else
- + FLAC__stream_decoder_set_md5_checking(decoder, true);
- + if(FLAC__stream_decoder_init_file(decoder, file_source, write, metadata, error, &internal) != FLAC__STREAM_DECODER_INIT_STATUS_OK) {
- + snprintf(cuecue_error,1024,"Cannot open '%s'",file_source);
- + internal.error=1;
- + }
- +#endif
-
- - if(!FLAC__file_decoder_process_until_end_of_file(decoder)) {
- +#ifdef LEGACY_FLAC
- + if(!FLAC__file_decoder_process_until_end_of_file(decoder))
- +#else
- + if(!FLAC__stream_decoder_process_until_end_of_stream(decoder))
- +#endif
- + {
- if (!internal.error) {
- /* early error, not even the time to decode metadata :) */
- snprintf(cuecue_error,CUECUE_ERROR_LENGTH,"Cannot open '%s'",file_source);
- @@ -171,8 +216,13 @@
- internal.error=1;
- }
-
- +#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
-
- fclose(dst);
- free(internal.buffer);
|