summaryrefslogtreecommitdiffstats
path: root/ext/dv
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim.muller@collabora.co.uk>2009-06-18 23:51:52 +0100
committerTim-Philipp Müller <tim.muller@collabora.co.uk>2009-06-22 10:49:02 +0100
commitd0056049d3f9f225d2295bd0b2d39f6cc1b5b55b (patch)
tree5cd87831f74be9b71e69607c69f6ef984fd5c4af /ext/dv
parent42936a73e6d149cd1267957f0661a9fce7757d9b (diff)
dvdemux: post container-format tag
Also merge the two almost identical _add_*_pad() functions into one.
Diffstat (limited to 'ext/dv')
-rw-r--r--ext/dv/gstdvdemux.c72
1 files changed, 28 insertions, 44 deletions
diff --git a/ext/dv/gstdvdemux.c b/ext/dv/gstdvdemux.c
index 524444c0..90de4175 100644
--- a/ext/dv/gstdvdemux.c
+++ b/ext/dv/gstdvdemux.c
@@ -287,58 +287,42 @@ gst_dvdemux_reset (GstDVDemux * dvdemux)
gst_segment_init (&dvdemux->time_segment, GST_FORMAT_TIME);
}
-static void
-gst_dvdemux_add_video_pad (GstDVDemux * dvdemux)
+static GstPad *
+gst_dvdemux_add_pad (GstDVDemux * dvdemux, GstStaticPadTemplate * template)
{
- if (dvdemux->videosrcpad)
- return;
-
- dvdemux->videosrcpad =
- gst_pad_new_from_static_template (&video_src_temp, "video");
- gst_pad_set_query_function (dvdemux->videosrcpad,
- GST_DEBUG_FUNCPTR (gst_dvdemux_src_query));
- gst_pad_set_query_type_function (dvdemux->videosrcpad,
- GST_DEBUG_FUNCPTR (gst_dvdemux_get_src_query_types));
- gst_pad_set_event_function (dvdemux->videosrcpad,
- GST_DEBUG_FUNCPTR (gst_dvdemux_handle_src_event));
- gst_pad_use_fixed_caps (dvdemux->videosrcpad);
- gst_pad_set_active (dvdemux->videosrcpad, TRUE);
- gst_element_add_pad (GST_ELEMENT (dvdemux), dvdemux->videosrcpad);
-
- if (dvdemux->videosrcpad && dvdemux->audiosrcpad)
- gst_element_no_more_pads (GST_ELEMENT (dvdemux));
+ gboolean no_more_pads;
+ GstPad *pad;
- gst_pad_push_event (dvdemux->videosrcpad, gst_event_new_new_segment (FALSE,
- dvdemux->byte_segment.rate, GST_FORMAT_TIME,
- dvdemux->time_segment.start, dvdemux->time_segment.stop,
- dvdemux->time_segment.start));
-}
+ pad = gst_pad_new_from_static_template (template, template->name_template);
-static void
-gst_dvdemux_add_audio_pad (GstDVDemux * dvdemux)
-{
- if (dvdemux->audiosrcpad)
- return;
+ gst_pad_set_query_function (pad, GST_DEBUG_FUNCPTR (gst_dvdemux_src_query));
- dvdemux->audiosrcpad =
- gst_pad_new_from_static_template (&audio_src_temp, "audio");
- gst_pad_set_query_function (dvdemux->audiosrcpad,
- GST_DEBUG_FUNCPTR (gst_dvdemux_src_query));
- gst_pad_set_query_type_function (dvdemux->audiosrcpad,
+ gst_pad_set_query_type_function (pad,
GST_DEBUG_FUNCPTR (gst_dvdemux_get_src_query_types));
- gst_pad_set_event_function (dvdemux->audiosrcpad,
+ gst_pad_set_event_function (pad,
GST_DEBUG_FUNCPTR (gst_dvdemux_handle_src_event));
- gst_pad_use_fixed_caps (dvdemux->audiosrcpad);
- gst_pad_set_active (dvdemux->audiosrcpad, TRUE);
- gst_element_add_pad (GST_ELEMENT (dvdemux), dvdemux->audiosrcpad);
+ gst_pad_use_fixed_caps (pad);
+ gst_pad_set_active (pad, TRUE);
+ gst_element_add_pad (GST_ELEMENT (dvdemux), pad);
- if (dvdemux->videosrcpad && dvdemux->audiosrcpad)
+ no_more_pads =
+ (dvdemux->videosrcpad != NULL && template == &audio_src_temp) ||
+ (dvdemux->audiosrcpad != NULL && template == &video_src_temp);
+
+ if (no_more_pads)
gst_element_no_more_pads (GST_ELEMENT (dvdemux));
- gst_pad_push_event (dvdemux->audiosrcpad, gst_event_new_new_segment (FALSE,
+ gst_pad_push_event (pad, gst_event_new_new_segment (FALSE,
dvdemux->byte_segment.rate, GST_FORMAT_TIME,
dvdemux->time_segment.start, dvdemux->time_segment.stop,
dvdemux->time_segment.start));
+
+ if (no_more_pads) {
+ gst_element_found_tags (GST_ELEMENT (dvdemux),
+ gst_tag_list_new_full (GST_TAG_CONTAINER_FORMAT, "DV", NULL));
+ }
+
+ return pad;
}
static void
@@ -1235,8 +1219,8 @@ gst_dvdemux_demux_audio (GstDVDemux * dvdemux, GstBuffer * buffer,
GstBuffer *outbuf;
gint frequency, channels;
- if (!dvdemux->audiosrcpad)
- gst_dvdemux_add_audio_pad (dvdemux);
+ if (dvdemux->audiosrcpad == NULL)
+ dvdemux->audiosrcpad = gst_dvdemux_add_pad (dvdemux, &audio_src_temp);
/* get initial format or check if format changed */
frequency = dv_get_frequency (dvdemux->decoder);
@@ -1301,8 +1285,8 @@ gst_dvdemux_demux_video (GstDVDemux * dvdemux, GstBuffer * buffer,
gboolean wide;
GstFlowReturn ret = GST_FLOW_OK;
- if (!dvdemux->videosrcpad)
- gst_dvdemux_add_video_pad (dvdemux);
+ if (dvdemux->videosrcpad == NULL)
+ dvdemux->videosrcpad = gst_dvdemux_add_pad (dvdemux, &video_src_temp);
/* get params */
/* framerate is already up-to-date */