diff options
author | Mark Nauwelaerts <manauw@skynet.be> | 2007-01-14 17:55:33 +0000 |
---|---|---|
committer | Tim-Philipp Müller <tim@centricular.net> | 2007-01-14 17:55:33 +0000 |
commit | 36dfafcda96f1fe13bfd26cb18b5770bbf1d1de6 (patch) | |
tree | c257bd2e532feafc5f0d38bae78d52efaf4c7e4d /gst/avi/gstavimux.h | |
parent | 1509c2efccb6e892815f55a54feee3e431d271c9 (diff) |
Add support for more than one audio stream; write better AVIX header; refactor code a bit; don't announce vorbis caps...
Original commit message from CVS:
Patch by: Mark Nauwelaerts <manauw at skynet be>
* gst/avi/gstavimux.c: (gst_avi_mux_finalize),
(gst_avi_mux_pad_reset), (gst_avi_mux_reset), (gst_avi_mux_init),
(gst_avi_mux_vidsink_set_caps), (gst_avi_mux_audsink_set_caps),
(gst_avi_mux_request_new_pad), (gst_avi_mux_release_pad),
(gst_avi_mux_riff_get_avi_header),
(gst_avi_mux_riff_get_avix_header), (gst_avi_mux_riff_get_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_buffer), (gst_avi_mux_do_one_buffer),
(gst_avi_mux_change_state):
* gst/avi/gstavimux.h:
* tests/check/elements/avimux.c: (teardown_src_pad):
Add support for more than one audio stream; write better AVIX
header; refactor code a bit; don't announce vorbis caps on our audio
sink pads since we don't support it anyway. Closes #379298.
Diffstat (limited to 'gst/avi/gstavimux.h')
-rw-r--r-- | gst/avi/gstavimux.h | 79 |
1 files changed, 57 insertions, 22 deletions
diff --git a/gst/avi/gstavimux.h b/gst/avi/gstavimux.h index 38866df8..f08b8c74 100644 --- a/gst/avi/gstavimux.h +++ b/gst/avi/gstavimux.h @@ -52,6 +52,54 @@ typedef struct _gst_avi_superindex_entry { guint32 duration; } gst_avi_superindex_entry; +typedef struct _GstAviPad { + /* do not extend, link to it */ + /* is NULL if original sink request pad has been removed */ + GstCollectData *collect; + + /* type */ + gboolean is_video; + gboolean connected; + + /* chunk tag */ + gchar *tag; + + /* stream header */ + gst_riff_strh hdr; + + /* odml super indexes */ + gst_avi_superindex_entry idx[GST_AVI_SUPERINDEX_COUNT]; + gint idx_index; + gchar *idx_tag; +} GstAviPad; + +typedef struct _GstAviVideoPad { + GstAviPad parent; + + /* stream format */ + gst_riff_strf_vids vids; + /* extra data */ + GstBuffer *vids_codec_data; + +} GstAviVideoPad; + +typedef struct _GstAviAudioPad { + GstAviPad parent; + + /* stream format */ + gst_riff_strf_auds auds; + /* audio info for bps calculation */ + guint32 audio_size; + guint64 audio_time; + +} GstAviAudioPad; + +typedef struct _GstAviCollectData { + /* extend the CollectData */ + GstCollectData collect; + + GstAviPad *avipad; +} GstAviCollectData; typedef struct _GstAviMux GstAviMux; typedef struct _GstAviMuxClass GstAviMuxClass; @@ -61,14 +109,15 @@ struct _GstAviMux { /* pads */ GstPad *srcpad; - GstCollectData *audiocollectdata; - gboolean audio_pad_connected; - GstCollectData *videocollectdata; - gboolean video_pad_connected; + /* sinkpads, video first */ + GSList *sinkpads; + /* video restricted to 1 pad */ + guint video_pads, audio_pads; GstCollectPads *collect; GstPadEventFunction collect_event; /* the AVI header */ + /* still some single stream video data in mux struct */ gst_riff_avih avi_hdr; /* total number of (video) frames */ guint32 total_frames; @@ -80,25 +129,16 @@ struct _GstAviMux { /* num (video) frames in the AVI/AVIX block */ guint32 num_frames, numx_frames; /* size of hdrl list, including tag as usual */ - guint32 header_size; + + /* total size of extra codec data */ + guint32 codec_data_size; + /* state info */ gboolean write_header; gboolean restart; - guint32 audio_size; - guint64 audio_time; - - /* video header */ - gst_riff_strh vids_hdr; - gst_riff_strf_vids vids; - GstBuffer *vids_codec_data; - - /* audio header */ - gst_riff_strh auds_hdr; - gst_riff_strf_auds auds; /* tags */ GstTagList *tags; GstTagList *tags_snap; - guint32 tag_size; /* information about the AVI index ('idx') */ gst_riff_index_entry *idx; @@ -108,11 +148,6 @@ struct _GstAviMux { /* 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; guint64 avix_start; |