From 3de9d58348fc1723c172dfdbbdcf02e76dc2d293 Mon Sep 17 00:00:00 2001 From: Mark Nauwelaerts Date: Mon, 22 May 2006 13:53:18 +0000 Subject: gst/avi/gstavimux.*: - add odml (large file) index support Original commit message from CVS: Patch by: Mark Nauwelaerts * 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 --- gst/avi/gstavimux.h | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) (limited to 'gst/avi/gstavimux.h') 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; -- cgit