From cc277b4a26d099a5ef58aa8b2d8ae02554f7d250 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 17 Dec 2009 16:22:56 +0100 Subject: [PATCH] qtdemux: Fix ALAC codec_data parsing Fixes #604611 --- gst/qtdemux/qtdemux.c | 8 ++++---- gst/qtdemux/qtdemux_types.c | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c index 0246175ad2..925ea07714 100644 --- a/gst/qtdemux/qtdemux.c +++ b/gst/qtdemux/qtdemux.c @@ -3331,6 +3331,7 @@ qtdemux_parse_container (GstQTDemux * qtdemux, GNode * node, const guint8 * buf, child = g_node_new ((guint8 *) buf); g_node_append (node, child); + GST_LOG_OBJECT (qtdemux, "adding new node of len %d", len); qtdemux_parse_node (qtdemux, child, buf, len); buf += len; @@ -5278,10 +5279,9 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak) { gint len = QT_UINT32 (stsd_data); - if (len > 0x34) { - GstBuffer *buf = gst_buffer_new_and_alloc (len - 0x34); - - memcpy (GST_BUFFER_DATA (buf), stsd_data + 0x34, len - 0x34); + if (len >= 132) { + GstBuffer *buf = gst_buffer_new_and_alloc (36); + memcpy (GST_BUFFER_DATA (buf), stsd_data + 88, 36); gst_caps_set_simple (stream->caps, "codec_data", GST_TYPE_BUFFER, buf, NULL); gst_buffer_unref (buf); diff --git a/gst/qtdemux/qtdemux_types.c b/gst/qtdemux/qtdemux_types.c index ef79d1d26b..f740218174 100644 --- a/gst/qtdemux/qtdemux_types.c +++ b/gst/qtdemux/qtdemux_types.c @@ -86,6 +86,7 @@ static const QtNodeType qt_node_types[] = { {FOURCC_colr, "colr", 0,}, {FOURCC_fiel, "fiel", 0,}, {FOURCC_jp2x, "jp2x", 0,}, + {FOURCC_alac, "alac", 0,}, {FOURCC_wave, "wave", QT_FLAG_CONTAINER}, {FOURCC_appl, "appl", QT_FLAG_CONTAINER}, {FOURCC_esds, "esds", 0},