mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
visual: improve negotiation
Remove the setcaps function on the srcpad, we know exactly when we negotiate a new format now. Use a caps event to configure new caps.
This commit is contained in:
parent
5619a238c0
commit
b2e80a09ca
1 changed files with 4 additions and 7 deletions
|
@ -140,7 +140,6 @@ static gboolean gst_visual_src_event (GstPad * pad, GstEvent * event);
|
||||||
static gboolean gst_visual_src_query (GstPad * pad, GstQuery * query);
|
static gboolean gst_visual_src_query (GstPad * pad, GstQuery * query);
|
||||||
|
|
||||||
static gboolean gst_visual_sink_setcaps (GstPad * pad, GstCaps * caps);
|
static gboolean gst_visual_sink_setcaps (GstPad * pad, GstCaps * caps);
|
||||||
static gboolean gst_visual_src_setcaps (GstPad * pad, GstCaps * caps);
|
|
||||||
static GstCaps *gst_visual_getcaps (GstPad * pad, GstCaps * filter);
|
static GstCaps *gst_visual_getcaps (GstPad * pad, GstCaps * filter);
|
||||||
static void libvisual_log_handler (const char *message, const char *funcname,
|
static void libvisual_log_handler (const char *message, const char *funcname,
|
||||||
void *priv);
|
void *priv);
|
||||||
|
@ -220,7 +219,6 @@ gst_visual_init (GstVisual * visual)
|
||||||
gst_element_add_pad (GST_ELEMENT (visual), visual->sinkpad);
|
gst_element_add_pad (GST_ELEMENT (visual), visual->sinkpad);
|
||||||
|
|
||||||
visual->srcpad = gst_pad_new_from_static_template (&src_template, "src");
|
visual->srcpad = gst_pad_new_from_static_template (&src_template, "src");
|
||||||
gst_pad_set_setcaps_function (visual->srcpad, gst_visual_src_setcaps);
|
|
||||||
gst_pad_set_getcaps_function (visual->srcpad, gst_visual_getcaps);
|
gst_pad_set_getcaps_function (visual->srcpad, gst_visual_getcaps);
|
||||||
gst_pad_set_event_function (visual->srcpad, gst_visual_src_event);
|
gst_pad_set_event_function (visual->srcpad, gst_visual_src_event);
|
||||||
gst_pad_set_query_function (visual->srcpad, gst_visual_src_query);
|
gst_pad_set_query_function (visual->srcpad, gst_visual_src_query);
|
||||||
|
@ -327,9 +325,8 @@ beach:
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_visual_src_setcaps (GstPad * pad, GstCaps * caps)
|
gst_visual_src_setcaps (GstVisual * visual, GstCaps * caps)
|
||||||
{
|
{
|
||||||
GstVisual *visual = GST_VISUAL (gst_pad_get_parent (pad));
|
|
||||||
GstStructure *structure;
|
GstStructure *structure;
|
||||||
gint depth, pitch;
|
gint depth, pitch;
|
||||||
|
|
||||||
|
@ -361,14 +358,14 @@ gst_visual_src_setcaps (GstPad * pad, GstCaps * caps)
|
||||||
visual->duration =
|
visual->duration =
|
||||||
gst_util_uint64_scale_int (GST_SECOND, visual->fps_d, visual->fps_n);
|
gst_util_uint64_scale_int (GST_SECOND, visual->fps_d, visual->fps_n);
|
||||||
|
|
||||||
gst_object_unref (visual);
|
gst_pad_push_event (visual->srcpad, gst_event_new_caps (caps));
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* ERRORS */
|
/* ERRORS */
|
||||||
error:
|
error:
|
||||||
{
|
{
|
||||||
GST_DEBUG_OBJECT (visual, "error parsing caps");
|
GST_DEBUG_OBJECT (visual, "error parsing caps");
|
||||||
gst_object_unref (visual);
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -434,7 +431,7 @@ gst_vis_src_negotiate (GstVisual * visual)
|
||||||
gst_structure_fixate_field_nearest_fraction (structure, "framerate",
|
gst_structure_fixate_field_nearest_fraction (structure, "framerate",
|
||||||
DEFAULT_FPS_N, DEFAULT_FPS_D);
|
DEFAULT_FPS_N, DEFAULT_FPS_D);
|
||||||
|
|
||||||
gst_pad_set_caps (visual->srcpad, target);
|
gst_visual_src_setcaps (visual, target);
|
||||||
gst_caps_unref (target);
|
gst_caps_unref (target);
|
||||||
|
|
||||||
/* try to get a bufferpool now */
|
/* try to get a bufferpool now */
|
||||||
|
|
Loading…
Reference in a new issue