mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-05 22:12:34 +00:00
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:
parent
1509c2efcc
commit
36dfafcda9
4 changed files with 564 additions and 544 deletions
21
ChangeLog
21
ChangeLog
|
@ -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>
|
||||
|
|
1003
gst/avi/gstavimux.c
1003
gst/avi/gstavimux.c
File diff suppressed because it is too large
Load diff
|
@ -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;
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
Loading…
Reference in a new issue