From 017bbb0338c9b94237c3124abdcc3121cb612810 Mon Sep 17 00:00:00 2001 From: Edgard Lima Date: Wed, 18 Jan 2006 18:54:02 +0000 Subject: Ronald's patch applied. see bug #326318. Original commit message from CVS: Ronald's patch applied. see bug #326318. --- ChangeLog | 5 +++++ gst/qtdemux/qtdemux.c | 27 ++++++++++++++++++++------- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6ad2380b..9d48cfa2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2006-01-18 Edgard Lima + + * gst/qtdemux/qtdemux.c: qtdemux_parse_trak: + Ronald's patch applied. see bug #326318. + 2006-01-17 Tim-Philipp Müller * gst/qtdemux/qtdemux.c: (gst_qtdemux_init), diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c index b1a507e6..ee0383cb 100644 --- a/gst/qtdemux/qtdemux.c +++ b/gst/qtdemux/qtdemux.c @@ -2000,20 +2000,33 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak) } else { if (QTDEMUX_FOURCC_GET (stsd->data + 16 + 4) == GST_MAKE_FOURCC ('a', 'v', 'c', '1')) { - gint len = QTDEMUX_GUINT32_GET (stsd->data); + gint len = QTDEMUX_GUINT32_GET (stsd->data) - 0x66; + guint8 *stsddata = stsd->data + 0x66; + - if (len > 0x6E && - QTDEMUX_FOURCC_GET (stsd->data + 0x6A) == + /* find avcC */ + while (len >= 0x8 && + QTDEMUX_FOURCC_GET (stsddata + 0x4) != + GST_MAKE_FOURCC ('a', 'v', 'c', 'C') && + QTDEMUX_GUINT32_GET (stsddata) < len) { + len -= QTDEMUX_GUINT32_GET (stsddata); + stsddata += QTDEMUX_GUINT32_GET (stsddata); + } + + /* parse, if found */ + if (len > 0x8 && + QTDEMUX_FOURCC_GET (stsddata + 0x4) == GST_MAKE_FOURCC ('a', 'v', 'c', 'C')) { GstBuffer *buf; gint size; - if (QTDEMUX_GUINT32_GET (stsd->data + 0x66) < len - 0x66) - size = QTDEMUX_GUINT32_GET (stsd->data + 0x66) - 8; + if (QTDEMUX_GUINT32_GET (stsddata) < len) + size = QTDEMUX_GUINT32_GET (stsddata) - 0x8; else - size = len - 0x6E; + size = len - 0x8; + buf = gst_buffer_new_and_alloc (size); - memcpy (GST_BUFFER_DATA (buf), (guint8 *) stsd->data + 0x6E, size); + memcpy (GST_BUFFER_DATA (buf), (guint8 *) stsd->data + 0x8, size); gst_caps_set_simple (stream->caps, "codec_data", GST_TYPE_BUFFER, buf, NULL); gst_buffer_unref (buf); -- cgit v1.2.1