mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-19 23:06:49 +00:00
Check for zlib and if available pass it explicitly to the linker when linking qtdemux. If not available (or --disable...
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).
This commit is contained in:
parent
5d78ae0a1c
commit
9445ca84f5
2 changed files with 33 additions and 18 deletions
|
@ -2,7 +2,7 @@
|
||||||
plugin_LTLIBRARIES = libgstqtdemux.la
|
plugin_LTLIBRARIES = libgstqtdemux.la
|
||||||
|
|
||||||
libgstqtdemux_la_CFLAGS = ${GST_CFLAGS}
|
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_LDFLAGS = ${GST_PLUGIN_LDFLAGS}
|
||||||
libgstqtdemux_la_SOURCES = qtdemux.c
|
libgstqtdemux_la_SOURCES = qtdemux.c
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,10 @@
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <zlib.h>
|
|
||||||
|
#ifdef HAVE_ZLIB
|
||||||
|
# include <zlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
GST_DEBUG_CATEGORY_STATIC (qtdemux_debug);
|
GST_DEBUG_CATEGORY_STATIC (qtdemux_debug);
|
||||||
#define GST_CAT_DEFAULT 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]);
|
static int n_qt_node_types = sizeof (qt_node_types) / sizeof (qt_node_types[0]);
|
||||||
|
|
||||||
|
#ifdef HAVE_ZLIB
|
||||||
|
|
||||||
static void *
|
static void *
|
||||||
qtdemux_zalloc (void *opaque, unsigned int items, unsigned int size)
|
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;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* HAVE_ZLIB */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
qtdemux_parse_moov (GstQTDemux * qtdemux, guint8 * buffer, int length)
|
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);
|
cmov = qtdemux_tree_get_child_by_type (qtdemux->moov_node, FOURCC_cmov);
|
||||||
if (cmov) {
|
if (cmov) {
|
||||||
|
guint32 method;
|
||||||
GNode *dcom;
|
GNode *dcom;
|
||||||
GNode *cmvd;
|
GNode *cmvd;
|
||||||
|
|
||||||
dcom = qtdemux_tree_get_child_by_type (cmov, FOURCC_dcom);
|
dcom = qtdemux_tree_get_child_by_type (cmov, FOURCC_dcom);
|
||||||
cmvd = qtdemux_tree_get_child_by_type (cmov, FOURCC_cmvd);
|
cmvd = qtdemux_tree_get_child_by_type (cmov, FOURCC_cmvd);
|
||||||
|
|
||||||
if (QTDEMUX_FOURCC_GET ((guint8 *) dcom->data + 8) == GST_MAKE_FOURCC ('z',
|
method = QTDEMUX_FOURCC_GET ((guint8 *) dcom->data + 8);
|
||||||
'l', 'i', 'b')) {
|
switch (method) {
|
||||||
int uncompressed_length;
|
#ifdef HAVE_ZLIB
|
||||||
int compressed_length;
|
case GST_MAKE_FOURCC ('z', 'l', 'i', 'b'):{
|
||||||
guint8 *buf;
|
int uncompressed_length;
|
||||||
|
int compressed_length;
|
||||||
|
guint8 *buf;
|
||||||
|
|
||||||
uncompressed_length = QTDEMUX_GUINT32_GET ((guint8 *) cmvd->data + 8);
|
uncompressed_length = QTDEMUX_GUINT32_GET ((guint8 *) cmvd->data + 8);
|
||||||
compressed_length = QTDEMUX_GUINT32_GET ((guint8 *) cmvd->data + 4) - 12;
|
compressed_length =
|
||||||
GST_LOG ("length = %d", uncompressed_length);
|
QTDEMUX_GUINT32_GET ((guint8 *) cmvd->data + 4) - 12;
|
||||||
|
GST_LOG ("length = %d", uncompressed_length);
|
||||||
|
|
||||||
buf =
|
buf =
|
||||||
(guint8 *) qtdemux_inflate ((guint8 *) cmvd->data + 12,
|
(guint8 *) qtdemux_inflate ((guint8 *) cmvd->data + 12,
|
||||||
compressed_length, uncompressed_length);
|
compressed_length, uncompressed_length);
|
||||||
|
|
||||||
qtdemux->moov_node_compressed = qtdemux->moov_node;
|
qtdemux->moov_node_compressed = qtdemux->moov_node;
|
||||||
qtdemux->moov_node = g_node_new (buf);
|
qtdemux->moov_node = g_node_new (buf);
|
||||||
|
|
||||||
qtdemux_parse (qtdemux, qtdemux->moov_node, buf, uncompressed_length);
|
qtdemux_parse (qtdemux, qtdemux->moov_node, buf, uncompressed_length);
|
||||||
} else {
|
break;
|
||||||
GST_LOG ("unknown header compression type");
|
}
|
||||||
|
#endif /* HAVE_ZLIB */
|
||||||
|
default:
|
||||||
|
GST_WARNING_OBJECT (qtdemux, "unknown or unhandled header compression "
|
||||||
|
"type %" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (method));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue