diff options
author | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2004-04-16 01:20:44 +0000 |
---|---|---|
committer | Ronald S. Bultje <rbultje@ronald.bitfreak.net> | 2004-04-16 01:20:44 +0000 |
commit | 26fe995a13344eb94b444b6356192681df7e41d4 (patch) | |
tree | 29efb3fbf2b506f5eafc0df146e4a851dd18314b /gst/avi/gstavidemux.c | |
parent | 9369abcfa0aaee7626751778e98743817a42258a (diff) |
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: <delete if not using a buddy>
* 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.
Diffstat (limited to 'gst/avi/gstavidemux.c')
-rw-r--r-- | gst/avi/gstavidemux.c | 21 |
1 files changed, 17 insertions, 4 deletions
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: |