Now metadataparse works in push or pull mode.
Original commit message from CVS: Now metadataparse works in push or pull mode.
This commit is contained in:
parent
929954f595
commit
05e1fdf681
@ -1,3 +1,10 @@
|
|||||||
|
2007-11-02 Edgard Lima <edgard.lima@indt.org.br>
|
||||||
|
|
||||||
|
* ext/metadata/gstmetadataparse.c: (gst_metadata_parse_init),
|
||||||
|
(gst_metadata_parse_activate), (gst_metadata_parse_get_range),
|
||||||
|
(gst_metadata_parse_element_activate_src_pull):
|
||||||
|
Now metadataparse works in push or pull mode.
|
||||||
|
|
||||||
2007-11-01 Edgard Lima <edgard.lima@indt.org.br>
|
2007-11-01 Edgard Lima <edgard.lima@indt.org.br>
|
||||||
|
|
||||||
* configure.ac:
|
* configure.ac:
|
||||||
|
@ -143,6 +143,9 @@ gst_metadata_parse_get_range (GstPad * pad, guint64 offset, guint size,
|
|||||||
|
|
||||||
static gboolean gst_metadata_parse_activate (GstPad * pad);
|
static gboolean gst_metadata_parse_activate (GstPad * pad);
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gst_metadata_parse_element_activate_src_pull (GstPad * pad, gboolean active);
|
||||||
|
|
||||||
static void gst_metadata_parse_init_members (GstMetadataParse * filter);
|
static void gst_metadata_parse_init_members (GstMetadataParse * filter);
|
||||||
static void gst_metadata_parse_dispose_members (GstMetadataParse * filter);
|
static void gst_metadata_parse_dispose_members (GstMetadataParse * filter);
|
||||||
|
|
||||||
@ -242,9 +245,9 @@ gst_metadata_parse_init (GstMetadataParse * filter,
|
|||||||
GST_DEBUG_FUNCPTR (gst_metadata_parse_get_caps));
|
GST_DEBUG_FUNCPTR (gst_metadata_parse_get_caps));
|
||||||
gst_pad_set_event_function (filter->srcpad, gst_metadata_parse_src_event);
|
gst_pad_set_event_function (filter->srcpad, gst_metadata_parse_src_event);
|
||||||
gst_pad_use_fixed_caps (filter->srcpad);
|
gst_pad_use_fixed_caps (filter->srcpad);
|
||||||
#if 0 /* FIXME it should also work with it */
|
|
||||||
gst_pad_set_getrange_function (filter->srcpad, gst_metadata_parse_get_range);
|
gst_pad_set_getrange_function (filter->srcpad, gst_metadata_parse_get_range);
|
||||||
#endif
|
gst_pad_set_activatepull_function (filter->srcpad,
|
||||||
|
GST_DEBUG_FUNCPTR (gst_metadata_parse_element_activate_src_pull));
|
||||||
/* addind pads */
|
/* addind pads */
|
||||||
|
|
||||||
gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad);
|
gst_element_add_pad (GST_ELEMENT (filter), filter->sinkpad);
|
||||||
@ -813,12 +816,12 @@ gst_metadata_parse_activate (GstPad * pad)
|
|||||||
int res;
|
int res;
|
||||||
guint32 offset = 0;
|
guint32 offset = 0;
|
||||||
|
|
||||||
filter = GST_METADATA_PARSE (gst_pad_get_parent (pad));
|
filter = GST_METADATA_PARSE (GST_PAD_PARENT (pad));
|
||||||
|
|
||||||
if (!gst_pad_check_pull_range (pad) ||
|
if (!gst_pad_check_pull_range (pad) ||
|
||||||
!gst_pad_activate_pull (filter->sinkpad, TRUE)) {
|
!gst_pad_activate_pull (filter->sinkpad, TRUE)) {
|
||||||
/* nothing to be done by now, activate push mode */
|
/* nothing to be done by now, activate push mode */
|
||||||
goto done;
|
return gst_pad_activate_push (pad, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(ret =
|
if (!(ret =
|
||||||
@ -870,16 +873,12 @@ gst_metadata_parse_activate (GstPad * pad)
|
|||||||
done:
|
done:
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
do {
|
gst_pad_activate_pull (pad, FALSE);
|
||||||
if (!(ret = gst_pad_activate_pull (filter->sinkpad, FALSE)))
|
gst_pad_activate_push (filter->srcpad, FALSE);
|
||||||
break;
|
if (!gst_pad_is_active (pad)) {
|
||||||
|
|
||||||
if (!gst_pad_is_active (filter->sinkpad)) {
|
|
||||||
ret = gst_pad_activate_push (filter->srcpad, TRUE);
|
ret = gst_pad_activate_push (filter->srcpad, TRUE);
|
||||||
ret = ret && gst_pad_activate_push (filter->sinkpad, TRUE);
|
ret = ret && gst_pad_activate_push (pad, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
} while (FALSE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -891,22 +890,33 @@ gst_metadata_parse_get_range (GstPad * pad,
|
|||||||
guint64 offset, guint size, GstBuffer ** buf)
|
guint64 offset, guint size, GstBuffer ** buf)
|
||||||
{
|
{
|
||||||
GstMetadataParse *filter = NULL;
|
GstMetadataParse *filter = NULL;
|
||||||
gboolean ret;
|
|
||||||
|
|
||||||
filter = GST_METADATA_PARSE (gst_pad_get_parent (pad));
|
filter = GST_METADATA_PARSE (GST_PAD_PARENT (pad));
|
||||||
|
|
||||||
if (filter->need_send_tag) {
|
if (filter->need_send_tag) {
|
||||||
gst_metadata_parse_send_tags (filter);
|
gst_metadata_parse_send_tags (filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = gst_pad_pull_range (filter->sinkpad, offset, size, buf);
|
return gst_pad_pull_range (filter->sinkpad, offset, size, buf);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gst_metadata_parse_element_activate_src_pull (GstPad * pad, gboolean active)
|
||||||
|
{
|
||||||
|
GstMetadataParse *filter = NULL;
|
||||||
|
gboolean ret;
|
||||||
|
|
||||||
|
filter = GST_METADATA_PARSE (gst_pad_get_parent (pad));
|
||||||
|
|
||||||
|
ret = gst_pad_activate_pull (filter->sinkpad, active);
|
||||||
|
|
||||||
gst_object_unref (filter);
|
gst_object_unref (filter);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static GstStateChangeReturn
|
static GstStateChangeReturn
|
||||||
gst_metadata_parse_change_state (GstElement * element,
|
gst_metadata_parse_change_state (GstElement * element,
|
||||||
GstStateChange transition)
|
GstStateChange transition)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user