From 26fe995a13344eb94b444b6356192681df7e41d4 Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Fri, 16 Apr 2004 01:20:44 +0000 Subject: gst/: Add MS RLE support. I added some functions to read out strf chunks into strf chunks and the data behind it. Thi... Original commit message from CVS: reviewed by: * gst-libs/gst/riff/riff-media.c: (gst_riff_create_video_caps_with_data), (gst_riff_create_video_caps), (gst_riff_create_audio_caps), (gst_riff_create_video_template_caps), (gst_riff_create_audio_template_caps): * gst-libs/gst/riff/riff-media.h: * gst-libs/gst/riff/riff-read.c: (gst_riff_read_strf_vids_with_data), (gst_riff_read_strf_vids): * gst-libs/gst/riff/riff-read.h: * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream): Add MS RLE support. I added some functions to read out strf chunks into strf chunks and the data behind it. This is usually color palettes (as in RLE, but also in 8-bit RGB). Also use those during caps creation. Lastly, add ADPCM (similar to wavparse - which should eventually be rifflib based). * gst/matroska/matroska-demux.c: (gst_matroska_demux_class_init), (gst_matroska_demux_init), (gst_matroska_demux_reset): * gst/matroska/matroska-demux.h: Remove placeholders for some prehistoric tagging system. Didn't add support for any tag system really anyway. * gst/qtdemux/qtdemux.c: Add support for audio/x-m4a (MPEG-4) through spider. * gst/wavparse/gstwavparse.c: (gst_wavparse_parse_fmt), (gst_wavparse_loop): ADPCM support (#135862). Increase max. buffer size because we cannot split buffers for ADPCM (screws references) and I've seen files with 2048 byte chunks. 4096 seems safe for now. --- gst/avi/gstavidemux.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'gst/avi/gstavidemux.c') diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c index 23956e42..11f09daf 100644 --- a/gst/avi/gstavidemux.c +++ b/gst/avi/gstavidemux.c @@ -742,6 +742,7 @@ gst_avi_demux_add_stream (GstAviDemux * avi) GstRiffRead *riff = GST_RIFF_READ (avi); guint32 tag; gst_riff_strh *strh; + GstBuffer *extradata = NULL, *initdata = NULL; gchar *name = NULL, *padname = NULL; GstCaps *caps = NULL; GstPadTemplate *templ = NULL; @@ -775,7 +776,7 @@ gst_avi_demux_add_stream (GstAviDemux * avi) } switch (strh->type) { case GST_RIFF_FCC_vids: - if (!gst_riff_read_strf_vids (riff, &strf.vids)) + if (!gst_riff_read_strf_vids_with_data (riff, &strf.vids, &extradata)) return FALSE; break; case GST_RIFF_FCC_auds: @@ -802,6 +803,13 @@ gst_avi_demux_add_stream (GstAviDemux * avi) } switch (tag) { + case GST_RIFF_TAG_strd: + if (initdata) + gst_buffer_unref (initdata); + if (!gst_riff_read_data (riff, &tag, &initdata)) + return FALSE; + break; + case GST_RIFF_TAG_strn: if (name) g_free (name); @@ -814,7 +822,6 @@ gst_avi_demux_add_stream (GstAviDemux * avi) GST_FOURCC_ARGS (tag)); /* fall-through */ - case GST_RIFF_TAG_strd: /* what is this? */ case GST_RIFF_TAG_JUNK: if (!gst_riff_read_skip (riff)) return FALSE; @@ -836,8 +843,8 @@ gst_avi_demux_add_stream (GstAviDemux * avi) padname = g_strdup_printf ("video_%02d", avi->num_v_streams); templ = gst_element_class_get_pad_template (klass, "video_%02d"); - caps = gst_riff_create_video_caps (strf.vids->compression, strh, - strf.vids, &codec_name); + caps = gst_riff_create_video_caps_with_data (strf.vids->compression, + strh, strf.vids, extradata, initdata, &codec_name); gst_tag_list_add (list, GST_TAG_MERGE_APPEND, GST_TAG_VIDEO_CODEC, codec_name, NULL); gst_element_found_tags (GST_ELEMENT (avi), list); @@ -920,6 +927,12 @@ gst_avi_demux_add_stream (GstAviDemux * avi) /* auto-negotiates */ gst_element_add_pad (GST_ELEMENT (avi), pad); + /* clean something up */ + if (initdata) + gst_buffer_unref (initdata); + if (extradata) + gst_buffer_unref (extradata); + return TRUE; skip_stream: -- cgit