summaryrefslogtreecommitdiffstats
path: root/gst-libs/gst/riff/riff-read.c
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>2004-04-16 01:20:44 +0000
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>2004-04-16 01:20:44 +0000
commitb38e44828eabca21063f3cc570993d61ca419b7c (patch)
tree3a03c2b46f4e30a10ce090227b6a23e19e79acc8 /gst-libs/gst/riff/riff-read.c
parentceb0d7b4a2ca7335023a74fdc87884e017614b5d (diff)
downloadgst-plugins-bad-b38e44828eabca21063f3cc570993d61ca419b7c.tar.gz
gst-plugins-bad-b38e44828eabca21063f3cc570993d61ca419b7c.tar.bz2
gst-plugins-bad-b38e44828eabca21063f3cc570993d61ca419b7c.zip
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-libs/gst/riff/riff-read.c')
-rw-r--r--gst-libs/gst/riff/riff-read.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/gst-libs/gst/riff/riff-read.c b/gst-libs/gst/riff/riff-read.c
index 0eed6242..a86ec866 100644
--- a/gst-libs/gst/riff/riff-read.c
+++ b/gst-libs/gst/riff/riff-read.c
@@ -458,7 +458,8 @@ gst_riff_read_strh (GstRiffRead * riff, gst_riff_strh ** header)
}
gboolean
-gst_riff_read_strf_vids (GstRiffRead * riff, gst_riff_strf_vids ** header)
+gst_riff_read_strf_vids_with_data (GstRiffRead * riff,
+ gst_riff_strf_vids ** header, GstBuffer ** extradata)
{
guint32 tag;
GstBuffer *buf;
@@ -496,10 +497,14 @@ gst_riff_read_strf_vids (GstRiffRead * riff, gst_riff_strf_vids ** header)
#endif
/* size checking */
+ *extradata = NULL;
if (strf->size > GST_BUFFER_SIZE (buf)) {
g_warning ("strf_vids header gave %d bytes data, only %d available",
strf->size, GST_BUFFER_SIZE (buf));
strf->size = GST_BUFFER_SIZE (buf);
+ } else if (strf->size < GST_BUFFER_SIZE (buf)) {
+ *extradata = gst_buffer_create_sub (buf, strf->size,
+ GST_BUFFER_SIZE (buf) - strf->size);
}
/* debug */
@@ -516,6 +521,8 @@ gst_riff_read_strf_vids (GstRiffRead * riff, gst_riff_strf_vids ** header)
GST_INFO (" ypels_meter %d", strf->ypels_meter);
GST_INFO (" num_colors %d", strf->num_colors);
GST_INFO (" imp_colors %d", strf->imp_colors);
+ if (*extradata)
+ GST_INFO (" %d bytes extra_data", GST_BUFFER_SIZE (*extradata));
gst_buffer_unref (buf);
@@ -524,6 +531,23 @@ gst_riff_read_strf_vids (GstRiffRead * riff, gst_riff_strf_vids ** header)
return TRUE;
}
+/*
+ * Obsolete, use gst_riff_read_strf_vids_with_data ().
+ */
+
+gboolean
+gst_riff_read_strf_vids (GstRiffRead * riff, gst_riff_strf_vids ** header)
+{
+ GstBuffer *data = NULL;
+ gboolean ret;
+
+ ret = gst_riff_read_strf_vids_with_data (riff, header, &data);
+ if (data)
+ gst_buffer_unref (data);
+
+ return ret;
+}
+
gboolean
gst_riff_read_strf_auds (GstRiffRead * riff, gst_riff_strf_auds ** header)
{