mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2026-06-01 21:37:46 -04:00
gst: only reconfigure if not already negotiated
It appears that negotiate leaks resources if called more than once. Signed-off-by: James Hilliard <james.hilliard1@gmail.com>
This commit is contained in:
parent
67db81729e
commit
a1e57b4919
1 changed files with 13 additions and 4 deletions
|
|
@ -424,6 +424,7 @@ gst_pipewire_src_init (GstPipeWireSrc * src)
|
|||
{
|
||||
/* we operate in time */
|
||||
gst_base_src_set_format (GST_BASE_SRC (src), GST_FORMAT_TIME);
|
||||
gst_pad_use_fixed_caps (GST_BASE_SRC_PAD (src));
|
||||
|
||||
GST_OBJECT_FLAG_SET (src, GST_ELEMENT_FLAG_PROVIDE_CLOCK);
|
||||
|
||||
|
|
@ -744,7 +745,7 @@ gst_pipewire_src_negotiate (GstBaseSrc * basesrc)
|
|||
thiscaps = gst_pad_query_caps (GST_BASE_SRC_PAD (basesrc), NULL);
|
||||
GST_DEBUG_OBJECT (basesrc, "caps of src: %" GST_PTR_FORMAT, thiscaps);
|
||||
/* nothing or anything is allowed, we're done */
|
||||
if (thiscaps == NULL)
|
||||
if (thiscaps == NULL || pwsrc->negotiated)
|
||||
goto no_nego_needed;
|
||||
|
||||
if (G_UNLIKELY (gst_caps_is_empty (thiscaps)))
|
||||
|
|
@ -814,7 +815,6 @@ gst_pipewire_src_negotiate (GstBaseSrc * basesrc)
|
|||
|
||||
GST_DEBUG_OBJECT (basesrc, "connect capture with path %s, target-object %s",
|
||||
pwsrc->path, pwsrc->target_object);
|
||||
pwsrc->negotiated = FALSE;
|
||||
pw_stream_connect (pwsrc->stream,
|
||||
PW_DIRECTION_INPUT,
|
||||
target_id,
|
||||
|
|
@ -975,8 +975,11 @@ gst_pipewire_src_unlock_stop (GstBaseSrc * basesrc)
|
|||
static gboolean
|
||||
gst_pipewire_src_event (GstBaseSrc * src, GstEvent * event)
|
||||
{
|
||||
GstPipeWireSrc *pwsrc = GST_PIPEWIRE_SRC (src);
|
||||
gboolean res = FALSE;
|
||||
|
||||
GST_DEBUG_OBJECT (pwsrc, "handle event %" GST_PTR_FORMAT, event);
|
||||
|
||||
switch (GST_EVENT_TYPE (event)) {
|
||||
case GST_EVENT_CUSTOM_UPSTREAM:
|
||||
if (gst_video_event_is_force_key_unit (event)) {
|
||||
|
|
@ -992,6 +995,12 @@ gst_pipewire_src_event (GstBaseSrc * src, GstEvent * event)
|
|||
res = GST_BASE_SRC_CLASS (parent_class)->event (src, event);
|
||||
}
|
||||
break;
|
||||
case GST_EVENT_RECONFIGURE:
|
||||
if (!pwsrc->negotiated)
|
||||
res = GST_BASE_SRC_CLASS (parent_class)->event (src, event);
|
||||
else
|
||||
res = TRUE;
|
||||
break;
|
||||
default:
|
||||
res = GST_BASE_SRC_CLASS (parent_class)->event (src, event);
|
||||
break;
|
||||
|
|
@ -1357,11 +1366,11 @@ gst_pipewire_src_change_state (GstElement * element, GstStateChange transition)
|
|||
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
|
||||
break;
|
||||
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
||||
break;
|
||||
case GST_STATE_CHANGE_READY_TO_NULL:
|
||||
pw_thread_loop_lock (this->core->loop);
|
||||
this->negotiated = FALSE;
|
||||
pw_thread_loop_unlock (this->core->loop);
|
||||
break;
|
||||
case GST_STATE_CHANGE_READY_TO_NULL:
|
||||
gst_pipewire_src_close (this);
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue