[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