dataurisrc: must release the object lock before using GST_ELEMENT_ERROR
This commit is contained in:
parent
78b699278c
commit
61c6c38bd0
@ -234,19 +234,31 @@ gst_data_uri_src_create (GstBaseSrc * basesrc, guint64 offset, guint size,
|
|||||||
GstFlowReturn ret;
|
GstFlowReturn ret;
|
||||||
|
|
||||||
GST_OBJECT_LOCK (src);
|
GST_OBJECT_LOCK (src);
|
||||||
if (!src->buffer) {
|
|
||||||
ret = GST_FLOW_NOT_NEGOTIATED;
|
if (!src->buffer)
|
||||||
GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND, (NULL), (NULL));
|
goto no_buffer;
|
||||||
} else if (offset + size > GST_BUFFER_SIZE (src->buffer)) {
|
|
||||||
|
/* This is only correct because GstBaseSrc already clips size for us to be no
|
||||||
|
* larger than the max. available size if a segment at the end is requested */
|
||||||
|
if (offset + size > GST_BUFFER_SIZE (src->buffer)) {
|
||||||
ret = GST_FLOW_UNEXPECTED;
|
ret = GST_FLOW_UNEXPECTED;
|
||||||
} else {
|
} else {
|
||||||
ret = GST_FLOW_OK;
|
ret = GST_FLOW_OK;
|
||||||
*buf = gst_buffer_create_sub (src->buffer, offset, size);
|
*buf = gst_buffer_create_sub (src->buffer, offset, size);
|
||||||
gst_buffer_set_caps (*buf, GST_BUFFER_CAPS (src->buffer));
|
gst_buffer_set_caps (*buf, GST_BUFFER_CAPS (src->buffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_OBJECT_UNLOCK (src);
|
GST_OBJECT_UNLOCK (src);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
/* ERRORS */
|
||||||
|
no_buffer:
|
||||||
|
{
|
||||||
|
GST_OBJECT_UNLOCK (src);
|
||||||
|
GST_ELEMENT_ERROR (src, RESOURCE, NOT_FOUND, (NULL), (NULL));
|
||||||
|
return GST_FLOW_NOT_NEGOTIATED;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
Loading…
x
Reference in New Issue
Block a user