Check for zlib and if available pass it explicitly to the linker when linking qtdemux...
authorTim-Philipp Müller <tim@centricular.net>
Fri, 5 Jan 2007 18:32:03 +0000 (18:32 +0000)
committerTim-Philipp Müller <tim@centricular.net>
Fri, 5 Jan 2007 18:32:03 +0000 (18:32 +0000)
Original commit message from CVS:
* configure.ac:
* gst/qtdemux/Makefile.am:
* gst/qtdemux/qtdemux.c: (qtdemux_parse_moov):
Check for zlib and if available pass it explicitly to the linker
when linking qtdemux. If not available (or --disable-external has
been specified!), disable the bits in qtdemux that use it. Fixes
build on MingW (#392856).

gst/qtdemux/Makefile.am
gst/qtdemux/qtdemux.c

index f65f337..1f48036 100644 (file)
@@ -2,7 +2,7 @@
 plugin_LTLIBRARIES = libgstqtdemux.la
 
 libgstqtdemux_la_CFLAGS = ${GST_CFLAGS}
-libgstqtdemux_la_LIBADD = $(GST_BASE_LIBS)
+libgstqtdemux_la_LIBADD = $(GST_BASE_LIBS) $(ZLIB_LIBS)
 libgstqtdemux_la_LDFLAGS = ${GST_PLUGIN_LDFLAGS} 
 libgstqtdemux_la_SOURCES = qtdemux.c
 
index 2b62f48..acf5861 100644 (file)
 
 #include <stdlib.h>
 #include <string.h>
-#include <zlib.h>
+
+#ifdef HAVE_ZLIB
+# include <zlib.h>
+#endif
 
 GST_DEBUG_CATEGORY_STATIC (qtdemux_debug);
 #define GST_CAT_DEFAULT qtdemux_debug
@@ -2086,6 +2089,7 @@ static const QtNodeType qt_node_types[] = {
 };
 static int n_qt_node_types = sizeof (qt_node_types) / sizeof (qt_node_types[0]);
 
+#ifdef HAVE_ZLIB
 
 static void *
 qtdemux_zalloc (void *opaque, unsigned int items, unsigned int size)
@@ -2135,6 +2139,8 @@ qtdemux_inflate (void *z_buffer, int z_length, int length)
   return buffer;
 }
 
+#endif /* HAVE_ZLIB */
+
 static void
 qtdemux_parse_moov (GstQTDemux * qtdemux, guint8 * buffer, int length)
 {
@@ -2147,32 +2153,41 @@ qtdemux_parse_moov (GstQTDemux * qtdemux, guint8 * buffer, int length)
 
   cmov = qtdemux_tree_get_child_by_type (qtdemux->moov_node, FOURCC_cmov);
   if (cmov) {
+    guint32 method;
     GNode *dcom;
     GNode *cmvd;
 
     dcom = qtdemux_tree_get_child_by_type (cmov, FOURCC_dcom);
     cmvd = qtdemux_tree_get_child_by_type (cmov, FOURCC_cmvd);
 
-    if (QTDEMUX_FOURCC_GET ((guint8 *) dcom->data + 8) == GST_MAKE_FOURCC ('z',
-            'l', 'i', 'b')) {
-      int uncompressed_length;
-      int compressed_length;
-      guint8 *buf;
+    method = QTDEMUX_FOURCC_GET ((guint8 *) dcom->data + 8);
+    switch (method) {
+#ifdef HAVE_ZLIB
+      case GST_MAKE_FOURCC ('z', 'l', 'i', 'b'):{
+        int uncompressed_length;
+        int compressed_length;
+        guint8 *buf;
 
-      uncompressed_length = QTDEMUX_GUINT32_GET ((guint8 *) cmvd->data + 8);
-      compressed_length = QTDEMUX_GUINT32_GET ((guint8 *) cmvd->data + 4) - 12;
-      GST_LOG ("length = %d", uncompressed_length);
+        uncompressed_length = QTDEMUX_GUINT32_GET ((guint8 *) cmvd->data + 8);
+        compressed_length =
+            QTDEMUX_GUINT32_GET ((guint8 *) cmvd->data + 4) - 12;
+        GST_LOG ("length = %d", uncompressed_length);
 
-      buf =
-          (guint8 *) qtdemux_inflate ((guint8 *) cmvd->data + 12,
-          compressed_length, uncompressed_length);
+        buf =
+            (guint8 *) qtdemux_inflate ((guint8 *) cmvd->data + 12,
+            compressed_length, uncompressed_length);
 
-      qtdemux->moov_node_compressed = qtdemux->moov_node;
-      qtdemux->moov_node = g_node_new (buf);
+        qtdemux->moov_node_compressed = qtdemux->moov_node;
+        qtdemux->moov_node = g_node_new (buf);
 
-      qtdemux_parse (qtdemux, qtdemux->moov_node, buf, uncompressed_length);
-    } else {
-      GST_LOG ("unknown header compression type");
+        qtdemux_parse (qtdemux, qtdemux->moov_node, buf, uncompressed_length);
+        break;
+      }
+#endif /* HAVE_ZLIB */
+      default:
+        GST_WARNING_OBJECT (qtdemux, "unknown or unhandled header compression "
+            "type %" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (method));
+        break;
     }
   }
 }