mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-18 05:16:05 +00:00
goom2k1: Fix event handling and negotiate as soon as possible
This commit is contained in:
parent
78c7c16e9e
commit
9f73447229
1 changed files with 11 additions and 15 deletions
|
@ -106,6 +106,8 @@ static gboolean gst_goom_sink_event (GstPad * pad, GstObject * parent,
|
|||
static gboolean gst_goom_src_query (GstPad * pad, GstObject * parent,
|
||||
GstQuery * query);
|
||||
|
||||
static gboolean gst_goom_src_negotiate (GstGoom * goom);
|
||||
|
||||
#define gst_goom_parent_class parent_class
|
||||
typedef GstGoom GstGoom2k1;
|
||||
typedef GstGoomClass GstGoom2k1Class;
|
||||
|
@ -203,10 +205,12 @@ gst_goom_sink_setcaps (GstGoom * goom, GstCaps * caps)
|
|||
|
||||
res = gst_structure_get_int (structure, "channels", &goom->channels);
|
||||
res &= gst_structure_get_int (structure, "rate", &goom->rate);
|
||||
if (!res)
|
||||
return FALSE;
|
||||
|
||||
goom->bps = goom->channels * sizeof (gint16);
|
||||
|
||||
return res;
|
||||
return gst_goom_src_negotiate (goom);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@ -356,11 +360,11 @@ gst_goom_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
|
|||
goom->earliest_time = timestamp + diff;
|
||||
GST_OBJECT_UNLOCK (goom);
|
||||
|
||||
res = gst_pad_push_event (goom->sinkpad, event);
|
||||
res = gst_pad_event_default (pad, parent, event);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
res = gst_pad_push_event (goom->sinkpad, event);
|
||||
res = gst_pad_event_default (pad, parent, event);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -385,12 +389,9 @@ gst_goom_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
|
|||
gst_event_unref (event);
|
||||
break;
|
||||
}
|
||||
case GST_EVENT_FLUSH_START:
|
||||
res = gst_pad_push_event (goom->srcpad, event);
|
||||
break;
|
||||
case GST_EVENT_FLUSH_STOP:
|
||||
gst_goom_reset (goom);
|
||||
res = gst_pad_push_event (goom->srcpad, event);
|
||||
res = gst_pad_event_default (pad, parent, event);
|
||||
break;
|
||||
case GST_EVENT_SEGMENT:
|
||||
{
|
||||
|
@ -399,11 +400,11 @@ gst_goom_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
|
|||
* we can do QoS */
|
||||
gst_event_copy_segment (event, &goom->segment);
|
||||
|
||||
res = gst_pad_push_event (goom->srcpad, event);
|
||||
res = gst_pad_event_default (pad, parent, event);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
res = gst_pad_push_event (goom->srcpad, event);
|
||||
res = gst_pad_event_default (pad, parent, event);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -469,12 +470,7 @@ gst_goom_src_query (GstPad * pad, GstObject * parent, GstQuery * query)
|
|||
static GstFlowReturn
|
||||
ensure_negotiated (GstGoom * goom)
|
||||
{
|
||||
gboolean reconfigure;
|
||||
|
||||
reconfigure = gst_pad_check_reconfigure (goom->srcpad);
|
||||
|
||||
/* we don't know an output format yet, pick one */
|
||||
if (reconfigure || !gst_pad_has_current_caps (goom->srcpad)) {
|
||||
if (gst_pad_check_reconfigure (goom->srcpad)) {
|
||||
if (!gst_goom_src_negotiate (goom))
|
||||
return GST_FLOW_NOT_NEGOTIATED;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue