summaryrefslogtreecommitdiffstats
path: root/gst/avi/gstavimux.h
diff options
context:
space:
mode:
authorMark Nauwelaerts <manauw@skynet.be>2007-01-14 17:55:33 +0000
committerTim-Philipp Müller <tim@centricular.net>2007-01-14 17:55:33 +0000
commit36dfafcda96f1fe13bfd26cb18b5770bbf1d1de6 (patch)
treec257bd2e532feafc5f0d38bae78d52efaf4c7e4d /gst/avi/gstavimux.h
parent1509c2efccb6e892815f55a54feee3e431d271c9 (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.h79
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;