summaryrefslogtreecommitdiffstats
path: root/gst/avi/gstavimux.h
diff options
context:
space:
mode:
authorMark Nauwelaerts <manauw@skynet.be>2006-05-22 13:53:18 +0000
committerTim-Philipp Müller <tim@centricular.net>2006-05-22 13:53:18 +0000
commit3de9d58348fc1723c172dfdbbdcf02e76dc2d293 (patch)
tree9594089779bd8d200448ad6cfb96bf5859a3c91f /gst/avi/gstavimux.h
parentc3fac626119a90ff82ce86686aa8781ada87a827 (diff)
gst/avi/gstavimux.*: - add odml (large file) index support
Original commit message from CVS: Patch by: Mark Nauwelaerts <manauw at skynet be> * gst/avi/gstavimux.c: (gst_avi_mux_finalize), (gst_avi_mux_init), (gst_avi_mux_vidsink_set_caps), (gst_avi_mux_audsink_set_caps), (gst_avi_mux_write_tag), (gst_avi_mux_riff_get_avi_header), (gst_avi_mux_riff_get_avix_header), (gst_avi_mux_write_avix_index), (gst_avi_mux_add_index), (gst_avi_mux_bigfile), (gst_avi_mux_start_file), (gst_avi_mux_stop_file), (gst_avi_mux_handle_event), (gst_avi_mux_do_audio_buffer), (gst_avi_mux_do_video_buffer), (gst_avi_mux_do_one_buffer), (gst_avi_mux_change_state): * gst/avi/gstavimux.h: Some enhancements for avimux (#342526): - add odml (large file) index support - store codec init data (e.g. huffyuv) - miscellaneous other fixes/cleanups
Diffstat (limited to 'gst/avi/gstavimux.h')
-rw-r--r--gst/avi/gstavimux.h37
1 files changed, 32 insertions, 5 deletions
diff --git a/gst/avi/gstavimux.h b/gst/avi/gstavimux.h
index 68566991..38866df8 100644
--- a/gst/avi/gstavimux.h
+++ b/gst/avi/gstavimux.h
@@ -40,6 +40,18 @@ G_BEGIN_DECLS
#define GST_IS_AVI_MUX_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_AVI_MUX))
+#define GST_AVI_INDEX_OF_INDEXES 0
+#define GST_AVI_INDEX_OF_CHUNKS 1
+
+/* this allows indexing up to 64GB avi file */
+#define GST_AVI_SUPERINDEX_COUNT 32
+
+typedef struct _gst_avi_superindex_entry {
+ guint64 offset;
+ guint32 size;
+ guint32 duration;
+} gst_avi_superindex_entry;
+
typedef struct _GstAviMux GstAviMux;
typedef struct _GstAviMuxClass GstAviMuxClass;
@@ -58,10 +70,16 @@ struct _GstAviMux {
/* the AVI header */
gst_riff_avih avi_hdr;
- guint32 total_frames; /* total number of frames */
- guint64 total_data; /* amount of total data */
- guint32 data_size, datax_size; /* amount of data (bytes) in the AVI/AVIX block */
- guint32 num_frames, numx_frames; /* num frames in the AVI/AVIX block */
+ /* total number of (video) frames */
+ guint32 total_frames;
+ /* amount of total data (bytes) */
+ guint64 total_data;
+ /* amount of data (bytes) in the AVI/AVIX block;
+ * actually the movi list, so counted from and including the movi tag */
+ guint32 data_size, datax_size;
+ /* num (video) frames in the AVI/AVIX block */
+ guint32 num_frames, numx_frames;
+ /* size of hdrl list, including tag as usual */
guint32 header_size;
gboolean write_header;
gboolean restart;
@@ -71,6 +89,7 @@ struct _GstAviMux {
/* video header */
gst_riff_strh vids_hdr;
gst_riff_strf_vids vids;
+ GstBuffer *vids_codec_data;
/* audio header */
gst_riff_strh auds_hdr;
@@ -84,7 +103,15 @@ struct _GstAviMux {
/* information about the AVI index ('idx') */
gst_riff_index_entry *idx;
gint idx_index, idx_count;
- guint32 idx_offset, idx_size;
+ /* offset of *chunk* (relative to a base offset); entered in the index */
+ guint32 idx_offset;
+ /* size of idx1 chunk (including! chunk header and size bytes) */
+ guint32 idx_size;
+
+ /* odml super indexes */
+ gst_avi_superindex_entry *vids_idx;
+ gst_avi_superindex_entry *auds_idx;
+ gint vids_idx_index, auds_idx_index;
/* are we a big file already? */
gboolean is_bigfile;