diff options
Diffstat (limited to 'gst/qtdemux')
-rw-r--r-- | gst/qtdemux/qtdemux.c | 133 | ||||
-rw-r--r-- | gst/qtdemux/qtdemux.h | 2 |
2 files changed, 77 insertions, 58 deletions
diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c index fab93056..c6e035d6 100644 --- a/gst/qtdemux/qtdemux.c +++ b/gst/qtdemux/qtdemux.c @@ -49,7 +49,7 @@ GST_DEBUG_CATEGORY_STATIC (qtdemux_debug); #define QTDEMUX_FP16_GET(a) ((GST_READ_UINT16_BE(a))/256.0) #define QTDEMUX_FOURCC_GET(a) (GST_READ_UINT32_LE(a)) -#define QTDEMUX_GUINT64_GET(a) ((((guint64)QTDEMUX_GUINT32_GET(a))<<32)|QTDEMUX_GUINT32_GET(((void *)a)+4)) +#define QTDEMUX_GUINT64_GET(a) ((((guint64)QTDEMUX_GUINT32_GET(a))<<32)|QTDEMUX_GUINT32_GET(((guint8 *)a)+4)) typedef struct _QtNode QtNode; typedef struct _QtNodeType QtNodeType; @@ -61,7 +61,7 @@ typedef struct _QtDemuxSample QtDemuxSample; struct _QtNode { guint32 type; - gpointer data; + guint8 *data; gint len; }; @@ -70,7 +70,7 @@ struct _QtNodeType guint32 fourcc; const gchar *name; gint flags; - void (*dump) (GstQTDemux * qtdemux, void *buffer, int depth); + void (*dump) (GstQTDemux * qtdemux, guint8 * buffer, int depth); }; struct _QtDemuxSample @@ -374,8 +374,9 @@ static gboolean qtdemux_sink_activate_pull (GstPad * sinkpad, gboolean active); static gboolean qtdemux_sink_activate_push (GstPad * sinkpad, gboolean active); static gboolean gst_qtdemux_handle_sink_event (GstPad * pad, GstEvent * event); -static void qtdemux_parse_moov (GstQTDemux * qtdemux, void *buffer, int length); -static void qtdemux_parse (GstQTDemux * qtdemux, GNode * node, void *buffer, +static void qtdemux_parse_moov (GstQTDemux * qtdemux, guint8 * buffer, + int length); +static void qtdemux_parse (GstQTDemux * qtdemux, GNode * node, guint8 * buffer, int length); static const QtNodeType *qtdemux_type_get (guint32 fourcc); static void qtdemux_node_dump (GstQTDemux * qtdemux, GNode * node); @@ -1915,23 +1916,39 @@ qtdemux_sink_activate_push (GstPad * sinkpad, gboolean active) return TRUE; } -static void qtdemux_dump_mvhd (GstQTDemux * qtdemux, void *buffer, int depth); -static void qtdemux_dump_tkhd (GstQTDemux * qtdemux, void *buffer, int depth); -static void qtdemux_dump_elst (GstQTDemux * qtdemux, void *buffer, int depth); -static void qtdemux_dump_mdhd (GstQTDemux * qtdemux, void *buffer, int depth); -static void qtdemux_dump_hdlr (GstQTDemux * qtdemux, void *buffer, int depth); -static void qtdemux_dump_vmhd (GstQTDemux * qtdemux, void *buffer, int depth); -static void qtdemux_dump_dref (GstQTDemux * qtdemux, void *buffer, int depth); -static void qtdemux_dump_stsd (GstQTDemux * qtdemux, void *buffer, int depth); -static void qtdemux_dump_stts (GstQTDemux * qtdemux, void *buffer, int depth); -static void qtdemux_dump_stss (GstQTDemux * qtdemux, void *buffer, int depth); -static void qtdemux_dump_stsc (GstQTDemux * qtdemux, void *buffer, int depth); -static void qtdemux_dump_stsz (GstQTDemux * qtdemux, void *buffer, int depth); -static void qtdemux_dump_stco (GstQTDemux * qtdemux, void *buffer, int depth); -static void qtdemux_dump_co64 (GstQTDemux * qtdemux, void *buffer, int depth); -static void qtdemux_dump_dcom (GstQTDemux * qtdemux, void *buffer, int depth); -static void qtdemux_dump_cmvd (GstQTDemux * qtdemux, void *buffer, int depth); -static void qtdemux_dump_unknown (GstQTDemux * qtdemux, void *buffer, +static void qtdemux_dump_mvhd (GstQTDemux * qtdemux, guint8 * buffer, + int depth); +static void qtdemux_dump_tkhd (GstQTDemux * qtdemux, guint8 * buffer, + int depth); +static void qtdemux_dump_elst (GstQTDemux * qtdemux, guint8 * buffer, + int depth); +static void qtdemux_dump_mdhd (GstQTDemux * qtdemux, guint8 * buffer, + int depth); +static void qtdemux_dump_hdlr (GstQTDemux * qtdemux, guint8 * buffer, + int depth); +static void qtdemux_dump_vmhd (GstQTDemux * qtdemux, guint8 * buffer, + int depth); +static void qtdemux_dump_dref (GstQTDemux * qtdemux, guint8 * buffer, + int depth); +static void qtdemux_dump_stsd (GstQTDemux * qtdemux, guint8 * buffer, + int depth); +static void qtdemux_dump_stts (GstQTDemux * qtdemux, guint8 * buffer, + int depth); +static void qtdemux_dump_stss (GstQTDemux * qtdemux, guint8 * buffer, + int depth); +static void qtdemux_dump_stsc (GstQTDemux * qtdemux, guint8 * buffer, + int depth); +static void qtdemux_dump_stsz (GstQTDemux * qtdemux, guint8 * buffer, + int depth); +static void qtdemux_dump_stco (GstQTDemux * qtdemux, guint8 * buffer, + int depth); +static void qtdemux_dump_co64 (GstQTDemux * qtdemux, guint8 * buffer, + int depth); +static void qtdemux_dump_dcom (GstQTDemux * qtdemux, guint8 * buffer, + int depth); +static void qtdemux_dump_cmvd (GstQTDemux * qtdemux, guint8 * buffer, + int depth); +static void qtdemux_dump_unknown (GstQTDemux * qtdemux, guint8 * buffer, int depth); static const QtNodeType qt_node_types[] = { @@ -2074,7 +2091,7 @@ qtdemux_inflate (void *z_buffer, int z_length, int length) } static void -qtdemux_parse_moov (GstQTDemux * qtdemux, void *buffer, int length) +qtdemux_parse_moov (GstQTDemux * qtdemux, guint8 * buffer, int length) { GNode *cmov; @@ -2095,13 +2112,13 @@ qtdemux_parse_moov (GstQTDemux * qtdemux, void *buffer, int length) 'b')) { int uncompressed_length; int compressed_length; - void *buf; + guint8 *buf; uncompressed_length = QTDEMUX_GUINT32_GET (cmvd->data + 8); compressed_length = QTDEMUX_GUINT32_GET (cmvd->data + 4) - 12; GST_LOG ("length = %d", uncompressed_length); - buf = qtdemux_inflate (cmvd->data + 12, compressed_length, + buf = (guint8 *) qtdemux_inflate (cmvd->data + 12, compressed_length, uncompressed_length); qtdemux->moov_node_compressed = qtdemux->moov_node; @@ -2115,12 +2132,12 @@ qtdemux_parse_moov (GstQTDemux * qtdemux, void *buffer, int length) } static void -qtdemux_parse (GstQTDemux * qtdemux, GNode * node, void *buffer, int length) +qtdemux_parse (GstQTDemux * qtdemux, GNode * node, guint8 * buffer, int length) { guint32 fourcc; guint32 node_length; const QtNodeType *type; - void *end; + guint8 *end; GST_LOG ("qtdemux_parse buffer %p length %d", buffer, length); @@ -2136,7 +2153,7 @@ qtdemux_parse (GstQTDemux * qtdemux, GNode * node, void *buffer, int length) GST_FOURCC_ARGS (fourcc), node_length); if (type->flags & QT_CONTAINER) { - void *buf; + guint8 *buf; guint32 len; buf = buffer + 8; @@ -2166,7 +2183,7 @@ qtdemux_parse (GstQTDemux * qtdemux, GNode * node, void *buffer, int length) } } else { if (fourcc == FOURCC_stsd) { - void *buf; + guint8 *buf; guint32 len; GST_DEBUG_OBJECT (qtdemux, @@ -2197,7 +2214,7 @@ qtdemux_parse (GstQTDemux * qtdemux, GNode * node, void *buffer, int length) buf += len; } } else if (fourcc == FOURCC_mp4a) { - void *buf; + guint8 *buf; guint32 len; guint32 version; @@ -2233,7 +2250,7 @@ qtdemux_parse (GstQTDemux * qtdemux, GNode * node, void *buffer, int length) GST_WARNING ("unhandled mp4a version 0x%08x", version); } } else if (fourcc == FOURCC_mp4v) { - void *buf; + guint8 *buf; guint32 len; guint32 version; int tlen; @@ -2286,7 +2303,7 @@ qtdemux_parse (GstQTDemux * qtdemux, GNode * node, void *buffer, int length) } } } else if (fourcc == FOURCC_meta) { - void *buf; + guint8 *buf; guint32 len; buf = buffer + 12; @@ -2315,7 +2332,7 @@ qtdemux_parse (GstQTDemux * qtdemux, GNode * node, void *buffer, int length) buf += len; } } else if (fourcc == FOURCC_SVQ3) { - void *buf; + guint8 *buf; guint32 len; guint32 version; int tlen; @@ -2368,7 +2385,7 @@ qtdemux_parse (GstQTDemux * qtdemux, GNode * node, void *buffer, int length) #if 0 if (fourcc == FOURCC_cmvd) { int uncompressed_length; - void *buf; + guint8 *buf; uncompressed_length = QTDEMUX_GUINT32_GET (buffer + 8); GST_LOG ("length = %d", uncompressed_length); @@ -2414,9 +2431,9 @@ qtdemux_type_get (guint32 fourcc) } static gboolean -qtdemux_node_dump_foreach (GNode * node, gpointer data) +qtdemux_node_dump_foreach (GNode * node, gpointer qtdemux) { - void *buffer = node->data; + guint8 *buffer = (guint8 *) node->data; guint32 node_length; guint32 fourcc; const QtNodeType *type; @@ -2432,7 +2449,7 @@ qtdemux_node_dump_foreach (GNode * node, gpointer data) depth, "", GST_FOURCC_ARGS (fourcc), node_length, type->name); if (type->dump) - type->dump (data, buffer, depth); + type->dump (GST_QT_DEMUX_CAST (qtdemux), buffer, depth); return FALSE; } @@ -2445,7 +2462,7 @@ qtdemux_node_dump (GstQTDemux * qtdemux, GNode * node) } static void -qtdemux_dump_mvhd (GstQTDemux * qtdemux, void *buffer, int depth) +qtdemux_dump_mvhd (GstQTDemux * qtdemux, guint8 * buffer, int depth) { GST_LOG ("%*s version/flags: %08x", depth, "", QTDEMUX_GUINT32_GET (buffer + 8)); @@ -2476,7 +2493,7 @@ qtdemux_dump_mvhd (GstQTDemux * qtdemux, void *buffer, int depth) } static void -qtdemux_dump_tkhd (GstQTDemux * qtdemux, void *buffer, int depth) +qtdemux_dump_tkhd (GstQTDemux * qtdemux, guint8 * buffer, int depth) { GST_LOG ("%*s version/flags: %08x", depth, "", QTDEMUX_GUINT32_GET (buffer + 8)); @@ -2499,7 +2516,7 @@ qtdemux_dump_tkhd (GstQTDemux * qtdemux, void *buffer, int depth) } static void -qtdemux_dump_elst (GstQTDemux * qtdemux, void *buffer, int depth) +qtdemux_dump_elst (GstQTDemux * qtdemux, guint8 * buffer, int depth) { int i; int n; @@ -2520,7 +2537,7 @@ qtdemux_dump_elst (GstQTDemux * qtdemux, void *buffer, int depth) } static void -qtdemux_dump_mdhd (GstQTDemux * qtdemux, void *buffer, int depth) +qtdemux_dump_mdhd (GstQTDemux * qtdemux, guint8 * buffer, int depth) { GST_LOG ("%*s version/flags: %08x", depth, "", QTDEMUX_GUINT32_GET (buffer + 8)); @@ -2540,7 +2557,7 @@ qtdemux_dump_mdhd (GstQTDemux * qtdemux, void *buffer, int depth) } static void -qtdemux_dump_hdlr (GstQTDemux * qtdemux, void *buffer, int depth) +qtdemux_dump_hdlr (GstQTDemux * qtdemux, guint8 * buffer, int depth) { GST_LOG ("%*s version/flags: %08x", depth, "", QTDEMUX_GUINT32_GET (buffer + 8)); @@ -2560,7 +2577,7 @@ qtdemux_dump_hdlr (GstQTDemux * qtdemux, void *buffer, int depth) } static void -qtdemux_dump_vmhd (GstQTDemux * qtdemux, void *buffer, int depth) +qtdemux_dump_vmhd (GstQTDemux * qtdemux, guint8 * buffer, int depth) { GST_LOG ("%*s version/flags: %08x", depth, "", QTDEMUX_GUINT32_GET (buffer + 8)); @@ -2569,7 +2586,7 @@ qtdemux_dump_vmhd (GstQTDemux * qtdemux, void *buffer, int depth) } static void -qtdemux_dump_dref (GstQTDemux * qtdemux, void *buffer, int depth) +qtdemux_dump_dref (GstQTDemux * qtdemux, guint8 * buffer, int depth) { int n; int i; @@ -2591,7 +2608,7 @@ qtdemux_dump_dref (GstQTDemux * qtdemux, void *buffer, int depth) } static void -qtdemux_dump_stsd (GstQTDemux * qtdemux, void *buffer, int depth) +qtdemux_dump_stsd (GstQTDemux * qtdemux, guint8 * buffer, int depth) { int i; int n; @@ -2646,7 +2663,7 @@ qtdemux_dump_stsd (GstQTDemux * qtdemux, void *buffer, int depth) } static void -qtdemux_dump_stts (GstQTDemux * qtdemux, void *buffer, int depth) +qtdemux_dump_stts (GstQTDemux * qtdemux, guint8 * buffer, int depth) { int i; int n; @@ -2669,7 +2686,7 @@ qtdemux_dump_stts (GstQTDemux * qtdemux, void *buffer, int depth) } static void -qtdemux_dump_stss (GstQTDemux * qtdemux, void *buffer, int depth) +qtdemux_dump_stss (GstQTDemux * qtdemux, guint8 * buffer, int depth) { int i; int n; @@ -2690,7 +2707,7 @@ qtdemux_dump_stss (GstQTDemux * qtdemux, void *buffer, int depth) } static void -qtdemux_dump_stsc (GstQTDemux * qtdemux, void *buffer, int depth) +qtdemux_dump_stsc (GstQTDemux * qtdemux, guint8 * buffer, int depth) { int i; int n; @@ -2715,7 +2732,7 @@ qtdemux_dump_stsc (GstQTDemux * qtdemux, void *buffer, int depth) } static void -qtdemux_dump_stsz (GstQTDemux * qtdemux, void *buffer, int depth) +qtdemux_dump_stsz (GstQTDemux * qtdemux, guint8 * buffer, int depth) { //int i; int n; @@ -2743,7 +2760,7 @@ qtdemux_dump_stsz (GstQTDemux * qtdemux, void *buffer, int depth) } static void -qtdemux_dump_stco (GstQTDemux * qtdemux, void *buffer, int depth) +qtdemux_dump_stco (GstQTDemux * qtdemux, guint8 * buffer, int depth) { int i; int n; @@ -2763,7 +2780,7 @@ qtdemux_dump_stco (GstQTDemux * qtdemux, void *buffer, int depth) } static void -qtdemux_dump_co64 (GstQTDemux * qtdemux, void *buffer, int depth) +qtdemux_dump_co64 (GstQTDemux * qtdemux, guint8 * buffer, int depth) { //int i; int n; @@ -2786,20 +2803,20 @@ qtdemux_dump_co64 (GstQTDemux * qtdemux, void *buffer, int depth) } static void -qtdemux_dump_dcom (GstQTDemux * qtdemux, void *buffer, int depth) +qtdemux_dump_dcom (GstQTDemux * qtdemux, guint8 * buffer, int depth) { GST_LOG ("%*s compression type: %" GST_FOURCC_FORMAT, depth, "", GST_FOURCC_ARGS (QTDEMUX_FOURCC_GET (buffer + 8))); } static void -qtdemux_dump_cmvd (GstQTDemux * qtdemux, void *buffer, int depth) +qtdemux_dump_cmvd (GstQTDemux * qtdemux, guint8 * buffer, int depth) { GST_LOG ("%*s length: %d", depth, "", QTDEMUX_GUINT32_GET (buffer + 8)); } static void -qtdemux_dump_unknown (GstQTDemux * qtdemux, void *buffer, int depth) +qtdemux_dump_unknown (GstQTDemux * qtdemux, guint8 * buffer, int depth) { int len; @@ -2815,12 +2832,12 @@ static GNode * qtdemux_tree_get_child_by_type (GNode * node, guint32 fourcc) { GNode *child; - void *buffer; + guint8 *buffer; guint32 child_fourcc; for (child = g_node_first_child (node); child; child = g_node_next_sibling (child)) { - buffer = child->data; + buffer = (guint8 *) child->data; child_fourcc = GST_READ_UINT32_LE (buffer); GST_LOG ("First chunk of buffer %p is [%" GST_FOURCC_FORMAT "]", @@ -2841,12 +2858,12 @@ static GNode * qtdemux_tree_get_sibling_by_type (GNode * node, guint32 fourcc) { GNode *child; - void *buffer; + guint8 *buffer; guint32 child_fourcc; for (child = g_node_next_sibling (node); child; child = g_node_next_sibling (child)) { - buffer = child->data; + buffer = (guint8 *) child->data; child_fourcc = GST_READ_UINT32_LE (buffer + 4); diff --git a/gst/qtdemux/qtdemux.h b/gst/qtdemux/qtdemux.h index 37cfad8e..0598de08 100644 --- a/gst/qtdemux/qtdemux.h +++ b/gst/qtdemux/qtdemux.h @@ -37,6 +37,8 @@ G_BEGIN_DECLS #define GST_IS_QTDEMUX_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_QTDEMUX)) +#define GST_QT_DEMUX_CAST(obj) ((GstQTDemux *)(obj)) + #define GST_QTDEMUX_MAX_STREAMS 8 typedef struct _GstQTDemux GstQTDemux; |