mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-05 15:08:53 +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>
|
2007-01-13 Tim-Philipp Müller <tim at centricular dot net>
|
||||||
|
|
||||||
Patch by: Sebastian Dröge <slomo circular-chaos org>
|
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;
|
guint32 duration;
|
||||||
} gst_avi_superindex_entry;
|
} 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 _GstAviMux GstAviMux;
|
||||||
typedef struct _GstAviMuxClass GstAviMuxClass;
|
typedef struct _GstAviMuxClass GstAviMuxClass;
|
||||||
|
@ -61,14 +109,15 @@ struct _GstAviMux {
|
||||||
|
|
||||||
/* pads */
|
/* pads */
|
||||||
GstPad *srcpad;
|
GstPad *srcpad;
|
||||||
GstCollectData *audiocollectdata;
|
/* sinkpads, video first */
|
||||||
gboolean audio_pad_connected;
|
GSList *sinkpads;
|
||||||
GstCollectData *videocollectdata;
|
/* video restricted to 1 pad */
|
||||||
gboolean video_pad_connected;
|
guint video_pads, audio_pads;
|
||||||
GstCollectPads *collect;
|
GstCollectPads *collect;
|
||||||
GstPadEventFunction collect_event;
|
GstPadEventFunction collect_event;
|
||||||
|
|
||||||
/* the AVI header */
|
/* the AVI header */
|
||||||
|
/* still some single stream video data in mux struct */
|
||||||
gst_riff_avih avi_hdr;
|
gst_riff_avih avi_hdr;
|
||||||
/* total number of (video) frames */
|
/* total number of (video) frames */
|
||||||
guint32 total_frames;
|
guint32 total_frames;
|
||||||
|
@ -80,25 +129,16 @@ struct _GstAviMux {
|
||||||
/* num (video) frames in the AVI/AVIX block */
|
/* num (video) frames in the AVI/AVIX block */
|
||||||
guint32 num_frames, numx_frames;
|
guint32 num_frames, numx_frames;
|
||||||
/* size of hdrl list, including tag as usual */
|
/* 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 write_header;
|
||||||
gboolean restart;
|
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 */
|
/* tags */
|
||||||
GstTagList *tags;
|
GstTagList *tags;
|
||||||
GstTagList *tags_snap;
|
GstTagList *tags_snap;
|
||||||
guint32 tag_size;
|
|
||||||
|
|
||||||
/* information about the AVI index ('idx') */
|
/* information about the AVI index ('idx') */
|
||||||
gst_riff_index_entry *idx;
|
gst_riff_index_entry *idx;
|
||||||
|
@ -108,11 +148,6 @@ struct _GstAviMux {
|
||||||
/* size of idx1 chunk (including! chunk header and size bytes) */
|
/* size of idx1 chunk (including! chunk header and size bytes) */
|
||||||
guint32 idx_size;
|
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? */
|
/* are we a big file already? */
|
||||||
gboolean is_bigfile;
|
gboolean is_bigfile;
|
||||||
guint64 avix_start;
|
guint64 avix_start;
|
||||||
|
|
|
@ -100,8 +100,9 @@ teardown_src_pad (GstElement * element, gchar * sinkname)
|
||||||
|
|
||||||
gst_pad_unlink (srcpad, sinkpad);
|
gst_pad_unlink (srcpad, sinkpad);
|
||||||
|
|
||||||
/* after unlinking, pad refs held by 1) avimux and 2) us (through _get) */
|
/* after unlinking, pad refs still held by
|
||||||
ASSERT_OBJECT_REFCOUNT (sinkpad, "sinkpad", 2);
|
* 1) avimux and 2) collectpads and 3) us (through _get) */
|
||||||
|
ASSERT_OBJECT_REFCOUNT (sinkpad, "sinkpad", 3);
|
||||||
gst_object_unref (sinkpad);
|
gst_object_unref (sinkpad);
|
||||||
/* one more ref is held by element itself */
|
/* one more ref is held by element itself */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue