summaryrefslogtreecommitdiffstats
path: root/gst/avi/gstavidemux.c
diff options
context:
space:
mode:
authorRonald S. Bultje <rbultje@ronald.bitfreak.net>2005-01-10 16:09:25 +0000
committerRonald S. Bultje <rbultje@ronald.bitfreak.net>2005-01-10 16:09:25 +0000
commit5024a7c5b6df3c2bf7a599c76249146e35f5373c (patch)
tree8be2cf168b40c41b6f417bdfef0f769a6488dbbc /gst/avi/gstavidemux.c
parentb92d30f44dd59aa4dc6e33182eaad2c9a4ef0b8b (diff)
gst-libs/gst/riff/riff-read.c: Don't bail on unknown events.
Original commit message from CVS: * gst-libs/gst/riff/riff-read.c: (gst_riff_read_use_event): Don't bail on unknown events. * gst/audioscale/gstaudioscale.c: (gst_audioscale_chain): Don't crash on events before negotiation. * gst/avi/gstavidemux.c: (gst_avi_demux_add_stream): Send tags on pads, too. * gst/playback/gststreamselector.c: (gst_stream_selector_request_new_pad): Forward events on first pad if no input was selected yet.
Diffstat (limited to 'gst/avi/gstavidemux.c')
-rw-r--r--gst/avi/gstavidemux.c44
1 files changed, 26 insertions, 18 deletions
diff --git a/gst/avi/gstavidemux.c b/gst/avi/gstavidemux.c
index ee2c2172..abbd5f12 100644
--- a/gst/avi/gstavidemux.c
+++ b/gst/avi/gstavidemux.c
@@ -885,6 +885,8 @@ gst_avi_demux_add_stream (GstAviDemux * avi)
avi_stream_context *stream;
gint blockalign = 0, bitrate = 0;
guint64 *locations = NULL;
+ GstTagList *list = gst_tag_list_new ();
+ gboolean have_tag = FALSE;
union
{
gst_riff_strf_vids *vids;
@@ -984,7 +986,6 @@ gst_avi_demux_add_stream (GstAviDemux * avi)
case GST_RIFF_FCC_vids:
{
char *codec_name = NULL;
- GstTagList *list = gst_tag_list_new ();
guint32 tag;
padname = g_strdup_printf ("video_%02d", avi->num_v_streams);
@@ -995,12 +996,12 @@ gst_avi_demux_add_stream (GstAviDemux * avi)
tag = strh->fcc_handler;
caps = gst_riff_create_video_caps_with_data (tag,
strh, strf.vids, extradata, initdata, &codec_name);
- gst_tag_list_add (list, GST_TAG_MERGE_APPEND, GST_TAG_VIDEO_CODEC,
- codec_name, NULL);
- gst_element_found_tags (GST_ELEMENT (avi), list);
- gst_tag_list_free (list);
- if (codec_name)
+ if (codec_name) {
+ gst_tag_list_add (list, GST_TAG_MERGE_APPEND, GST_TAG_VIDEO_CODEC,
+ codec_name, NULL);
+ have_tag = TRUE;
g_free (codec_name);
+ }
g_free (strf.vids);
avi->num_v_streams++;
break;
@@ -1008,19 +1009,18 @@ gst_avi_demux_add_stream (GstAviDemux * avi)
case GST_RIFF_FCC_auds:
{
char *codec_name = NULL;
- GstTagList *list = gst_tag_list_new ();
padname = g_strdup_printf ("audio_%02d", avi->num_a_streams);
templ = gst_element_class_get_pad_template (klass, "audio_%02d");
caps =
gst_riff_create_audio_caps_with_data (strf.auds->format, strh,
strf.auds, extradata, initdata, &codec_name);
- gst_tag_list_add (list, GST_TAG_MERGE_APPEND, GST_TAG_AUDIO_CODEC,
- codec_name, NULL);
- gst_element_found_tags (GST_ELEMENT (avi), list);
- gst_tag_list_free (list);
- if (codec_name)
+ if (codec_name) {
+ gst_tag_list_add (list, GST_TAG_MERGE_APPEND, GST_TAG_AUDIO_CODEC,
+ codec_name, NULL);
+ have_tag = TRUE;
g_free (codec_name);
+ }
blockalign = strf.auds->blockalign;
bitrate = strf.auds->av_bps;
g_free (strf.auds);
@@ -1030,18 +1030,17 @@ gst_avi_demux_add_stream (GstAviDemux * avi)
case GST_RIFF_FCC_iavs:
{
char *codec_name = NULL;
- GstTagList *list = gst_tag_list_new ();
padname = g_strdup_printf ("video_%02d", avi->num_v_streams);
templ = gst_element_class_get_pad_template (klass, "video_%02d");
caps = gst_riff_create_iavs_caps (strh->fcc_handler, strh, strf.iavs,
&codec_name);
- gst_tag_list_add (list, GST_TAG_MERGE_APPEND, GST_TAG_VIDEO_CODEC,
- codec_name, NULL);
- gst_element_found_tags (GST_ELEMENT (avi), list);
- gst_tag_list_free (list);
- if (codec_name)
+ if (codec_name) {
+ gst_tag_list_add (list, GST_TAG_MERGE_APPEND, GST_TAG_VIDEO_CODEC,
+ codec_name, NULL);
+ have_tag = TRUE;
g_free (codec_name);
+ }
g_free (strf.iavs);
avi->num_v_streams++;
break;
@@ -1089,6 +1088,15 @@ gst_avi_demux_add_stream (GstAviDemux * avi)
if (extradata)
gst_buffer_unref (extradata);
+ if (have_tag) {
+ GstEvent *event = gst_event_new_tag (list);
+
+ gst_element_found_tags (GST_ELEMENT (avi), list);
+ gst_pad_push (pad, GST_DATA (event));
+ } else {
+ gst_tag_list_free (list);
+ }
+
return TRUE;
skip_stream: