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.
This commit is contained in:
Mark Nauwelaerts 2007-01-14 17:55:33 +00:00 committed by Tim-Philipp Müller
parent 1509c2efcc
commit 36dfafcda9
4 changed files with 564 additions and 544 deletions

View file

@ -1,3 +1,24 @@
2007-01-14 Tim-Philipp Müller <tim at centricular dot net>
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.
2007-01-13 Tim-Philipp Müller <tim at centricular dot net>
Patch by: Sebastian Dröge <slomo circular-chaos org>

File diff suppressed because it is too large Load diff

View file

@ -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;

View file

@ -100,8 +100,9 @@ teardown_src_pad (GstElement * element, gchar * sinkname)
gst_pad_unlink (srcpad, sinkpad);
/* after unlinking, pad refs held by 1) avimux and 2) us (through _get) */
ASSERT_OBJECT_REFCOUNT (sinkpad, "sinkpad", 2);
/* after unlinking, pad refs still held by
* 1) avimux and 2) collectpads and 3) us (through _get) */
ASSERT_OBJECT_REFCOUNT (sinkpad, "sinkpad", 3);
gst_object_unref (sinkpad);
/* one more ref is held by element itself */