diff options
-rw-r--r-- | libs/gst/base/gstcollectpads.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/libs/gst/base/gstcollectpads.c b/libs/gst/base/gstcollectpads.c index 411fb66a55..f9aa1168a4 100644 --- a/libs/gst/base/gstcollectpads.c +++ b/libs/gst/base/gstcollectpads.c @@ -1307,7 +1307,6 @@ gst_collect_pads_chain (GstPad * pad, GstBuffer * buffer) GstCollectPads *pads; GstCollectPadsPrivate *priv; GstFlowReturn ret; - GstBuffer **buffer_p; GST_DEBUG ("Got buffer for pad %s:%s", GST_DEBUG_PAD_NAME (pad)); @@ -1346,12 +1345,15 @@ gst_collect_pads_chain (GstPad * pad, GstBuffer * buffer) /* One more pad has data queued */ pads->queuedpads++; - buffer_p = &data->buffer; - gst_buffer_replace (buffer_p, buffer); + /* take ownership of the buffer */ + if (data->buffer) + gst_buffer_unref (data->buffer); + data->buffer = buffer; + buffer = NULL; /* update segment last position if in TIME */ if (G_LIKELY (data->segment.format == GST_FORMAT_TIME)) { - GstClockTime timestamp = GST_BUFFER_TIMESTAMP (buffer); + GstClockTime timestamp = GST_BUFFER_TIMESTAMP (data->buffer); if (GST_CLOCK_TIME_IS_VALID (timestamp)) gst_segment_set_last_stop (&data->segment, GST_FORMAT_TIME, timestamp); @@ -1405,7 +1407,8 @@ unlock_done: GST_DEBUG ("Pad %s:%s done", GST_DEBUG_PAD_NAME (pad)); GST_OBJECT_UNLOCK (pads); unref_data (data); - gst_buffer_unref (buffer); + if (buffer) + gst_buffer_unref (buffer); return ret; pad_removed: @@ -1448,9 +1451,8 @@ unexpected: clipped: { GST_DEBUG ("clipped buffer on pad %s:%s", GST_DEBUG_PAD_NAME (pad)); - GST_OBJECT_UNLOCK (pads); - unref_data (data); - return GST_FLOW_OK; + ret = GST_FLOW_OK; + goto unlock_done; } error: { |