[xiph-commits] r13773 - icecast/trunk/ices0/src
moritz at svn.xiph.org
moritz at svn.xiph.org
Fri Sep 7 12:39:58 PDT 2007
Author: moritz
Date: 2007-09-07 12:39:58 -0700 (Fri, 07 Sep 2007)
New Revision: 13773
Modified:
icecast/trunk/ices0/src/in_flac.c
Log:
Deal with FLAC API changes. While there, ensure that the callback functions
are exactly how libFLAC expects them. Tested with both flac-1.1.2 and
flac-1.2.0.
Modified: icecast/trunk/ices0/src/in_flac.c
===================================================================
--- icecast/trunk/ices0/src/in_flac.c 2007-09-07 19:36:15 UTC (rev 13772)
+++ icecast/trunk/ices0/src/in_flac.c 2007-09-07 19:39:58 UTC (rev 13773)
@@ -40,14 +40,19 @@
} flac_in_t;
/* -- static prototypes -- */
-static int ices_flac_readpcm (input_stream_t* self, size_t len,
- int16_t* left, int16_t* right);
+static ssize_t ices_flac_readpcm (input_stream_t* self, size_t len,
+ int16_t* left, int16_t* right);
static int ices_flac_close (input_stream_t* self);
/* -- FLAC callbacks -- */
+#if !defined(FLAC_API_VERSION_CURRENT) || FLAC_API_VERSION_CURRENT <= 7
+# define FLAC_BUFSIZE_TYPE unsigned
+#else
+# define FLAC_BUFSIZE_TYPE size_t
+#endif /* !FLAC_API_VERSION_CURRENT || FLAC_API_VERSION_CURRENT <= 7 */
static FLAC__StreamDecoderReadStatus
flac_read_cb(const FLAC__StreamDecoder* decoder, FLAC__byte buffer[],
- unsigned* bytes, void* client_data);
+ FLAC_BUFSIZE_TYPE* bytes, void* client_data);
static FLAC__StreamDecoderWriteStatus
flac_write_cb(const FLAC__StreamDecoder* decoder, const FLAC__Frame* frame,
const FLAC__int32* const buffer[], void* client_data);
@@ -76,18 +81,39 @@
return -1;
}
+#if !defined(FLAC_API_VERSION_CURRENT) || FLAC_API_VERSION_CURRENT <= 7
FLAC__stream_decoder_set_read_callback(decoder, flac_read_cb);
FLAC__stream_decoder_set_write_callback(decoder, flac_write_cb);
FLAC__stream_decoder_set_metadata_callback(decoder, flac_metadata_cb);
FLAC__stream_decoder_set_error_callback(decoder, flac_error_cb);
+ FLAC__stream_decoder_set_client_data(decoder, self);
+ switch (FLAC__stream_decoder_init(decoder)) {
+ case FLAC__STREAM_DECODER_SEARCH_FOR_METADATA:
+ break;
+ case FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR:
+ ices_log_error("Could not allocate memory during FLAC decoder init");
+ goto errDecoder;
+ default:
+ ices_log_error("Unexpected error during FLAC decoder init");
+ goto errDecoder;
+ }
+#else
+ if (FLAC__stream_decoder_init_stream(decoder, flac_read_cb, NULL, NULL, NULL,
+ NULL, flac_write_cb, flac_metadata_cb,
+ flac_error_cb, self)
+ != FLAC__STREAM_DECODER_INIT_STATUS_OK) {
+ ices_log_error("ices_flac_open: Error initializing FLAC decoder");
+ goto errDecoder;
+ }
+#endif /* !FLAC_API_VERSION_CURRENT || FLAC_API_VERSION_CURRENT <= 7 */
+
FLAC__stream_decoder_set_metadata_respond(decoder, FLAC__METADATA_TYPE_VORBIS_COMMENT);
if (!(flac_data = (flac_in_t*)malloc (sizeof (flac_in_t)))) {
ices_log_error ("Malloc failed in ices_flac_open");
goto errDecoder;
}
- FLAC__stream_decoder_set_client_data(decoder, self);
flac_data->decoder = decoder;
flac_data->parsed = 0;
@@ -96,17 +122,6 @@
self->data = flac_data;
- switch (FLAC__stream_decoder_init(decoder)) {
- case FLAC__STREAM_DECODER_SEARCH_FOR_METADATA:
- break;
- case FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR:
- ices_log_error("Could not allocate memory during FLAC decoder init");
- goto errData;
- default:
- ices_log_error("Unexpected error during FLAC decoder init");
- goto errData;
- }
-
if (!FLAC__stream_decoder_process_single(decoder)) {
ices_log_error("Could not find FLAC metadata header");
free(flac_data);
@@ -141,7 +156,7 @@
return -1;
}
-static int
+static ssize_t
ices_flac_readpcm (input_stream_t* self, size_t olen, int16_t* left,
int16_t* right)
{
@@ -179,7 +194,7 @@
/* -- callbacks -- */
static FLAC__StreamDecoderReadStatus
flac_read_cb(const FLAC__StreamDecoder* decoder, FLAC__byte buffer[],
- unsigned* bytes, void* client_data)
+ FLAC_BUFSIZE_TYPE* bytes, void* client_data)
{
input_stream_t* self = (input_stream_t*)client_data;
flac_in_t* flac_data = (flac_in_t*)self->data;
More information about the commits
mailing list