summaryrefslogtreecommitdiffstats
path: root/gst/qtdemux
diff options
context:
space:
mode:
Diffstat (limited to 'gst/qtdemux')
-rw-r--r--gst/qtdemux/qtdemux.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c
index 7d7e4a09..47699f98 100644
--- a/gst/qtdemux/qtdemux.c
+++ b/gst/qtdemux/qtdemux.c
@@ -2231,8 +2231,8 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
GST_TYPE_BUFFER, buffer, NULL);
#endif
} else {
- if (QTDEMUX_FOURCC_GET (stsd->data + 16 + 4) == GST_MAKE_FOURCC ('Q', 'D',
- 'M', '2')) {
+ if (QTDEMUX_FOURCC_GET (stsd->data + 16 + 4) ==
+ GST_MAKE_FOURCC ('Q', 'D', 'M', '2')) {
gint len = QTDEMUX_GUINT32_GET (stsd->data);
if (len > 0x4C) {
@@ -2244,6 +2244,23 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
"codec_data", GST_TYPE_BUFFER, buf, NULL);
gst_buffer_unref (buf);
}
+ gst_caps_set_simple (stream->caps,
+ "samplesize", G_TYPE_INT, samplesize, NULL);
+ } else if (QTDEMUX_FOURCC_GET (stsd->data + 16 + 4) ==
+ GST_MAKE_FOURCC ('a', 'l', 'a', 'c')) {
+ gint len = QTDEMUX_GUINT32_GET (stsd->data);
+
+ if (len > 0x34) {
+ GstBuffer *buf = gst_buffer_new_and_alloc (len - 0x34);
+
+ memcpy (GST_BUFFER_DATA (buf),
+ (guint8 *) stsd->data + 0x34, len - 0x34);
+ gst_caps_set_simple (stream->caps,
+ "codec_data", GST_TYPE_BUFFER, buf, NULL);
+ gst_buffer_unref (buf);
+ }
+ gst_caps_set_simple (stream->caps,
+ "samplesize", G_TYPE_INT, samplesize, NULL);
}
}
GST_INFO ("type " GST_FOURCC_FORMAT " caps %" GST_PTR_FORMAT,