mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-02 12:32:29 +00:00
camerabin2: Handle null taglists for images
Add NULL and check for them to the image capture taglist list, representing that a capture has no application tags set.
This commit is contained in:
parent
9ab6406f23
commit
27e01e02a4
1 changed files with 32 additions and 24 deletions
|
@ -427,29 +427,28 @@ gst_camera_bin_start_capture (GstCameraBin2 * camerabin)
|
||||||
* notify from ready for capture going to FALSE
|
* notify from ready for capture going to FALSE
|
||||||
*/
|
*/
|
||||||
taglist = gst_tag_setter_get_tag_list (GST_TAG_SETTER (camerabin));
|
taglist = gst_tag_setter_get_tag_list (GST_TAG_SETTER (camerabin));
|
||||||
if (taglist) {
|
GST_DEBUG_OBJECT (camerabin, "Have tags from application: %"
|
||||||
|
GST_PTR_FORMAT, taglist);
|
||||||
|
|
||||||
|
if (camerabin->mode == MODE_IMAGE) {
|
||||||
|
/* Store image tags in a list and push them later, this prevents
|
||||||
|
start_capture() from blocking in pad_push_event call */
|
||||||
|
g_mutex_lock (camerabin->image_tags_mutex);
|
||||||
|
camerabin->image_tags_list =
|
||||||
|
g_slist_append (camerabin->image_tags_list,
|
||||||
|
taglist ? gst_tag_list_copy (taglist) : NULL);
|
||||||
|
g_mutex_unlock (camerabin->image_tags_mutex);
|
||||||
|
} else if (taglist) {
|
||||||
GstPad *active_pad;
|
GstPad *active_pad;
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (camerabin, "Have tags from application: %"
|
active_pad = gst_element_get_static_pad (camerabin->src,
|
||||||
GST_PTR_FORMAT, taglist);
|
GST_BASE_CAMERA_SRC_VIDEO_PAD_NAME);
|
||||||
|
gst_pad_push_event (active_pad,
|
||||||
|
gst_event_new_tag (gst_tag_list_copy (taglist)));
|
||||||
|
|
||||||
if (camerabin->mode == MODE_IMAGE) {
|
gst_object_unref (active_pad);
|
||||||
/* Store image tags in a list and push them later, this prevents
|
|
||||||
start_capture() from blocking in pad_push_event call */
|
|
||||||
g_mutex_lock (camerabin->image_tags_mutex);
|
|
||||||
camerabin->image_tags_list =
|
|
||||||
g_slist_append (camerabin->image_tags_list,
|
|
||||||
gst_tag_list_copy (taglist));
|
|
||||||
g_mutex_unlock (camerabin->image_tags_mutex);
|
|
||||||
} else {
|
|
||||||
active_pad = gst_element_get_static_pad (camerabin->src,
|
|
||||||
GST_BASE_CAMERA_SRC_VIDEO_PAD_NAME);
|
|
||||||
gst_pad_push_event (active_pad,
|
|
||||||
gst_event_new_tag (gst_tag_list_copy (taglist)));
|
|
||||||
|
|
||||||
gst_object_unref (active_pad);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GST_DEBUG_OBJECT (camerabin, "Start-capture end");
|
GST_DEBUG_OBJECT (camerabin, "Start-capture end");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1284,9 +1283,11 @@ gst_camera_bin_image_src_buffer_probe (GstPad * pad, GstBuffer * buf,
|
||||||
g_mutex_unlock (camerabin->image_tags_mutex);
|
g_mutex_unlock (camerabin->image_tags_mutex);
|
||||||
GST_DEBUG_OBJECT (camerabin, "Pushing tags from application: %"
|
GST_DEBUG_OBJECT (camerabin, "Pushing tags from application: %"
|
||||||
GST_PTR_FORMAT, tags);
|
GST_PTR_FORMAT, tags);
|
||||||
peer = gst_pad_get_peer (pad);
|
if (tags) {
|
||||||
gst_pad_send_event (peer, gst_event_new_tag (tags));
|
peer = gst_pad_get_peer (pad);
|
||||||
gst_object_unref (peer);
|
gst_pad_send_event (peer, gst_event_new_tag (tags));
|
||||||
|
gst_object_unref (peer);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
g_mutex_unlock (camerabin->image_tags_mutex);
|
g_mutex_unlock (camerabin->image_tags_mutex);
|
||||||
GST_DEBUG_OBJECT (camerabin, "No tags from application to send");
|
GST_DEBUG_OBJECT (camerabin, "No tags from application to send");
|
||||||
|
@ -1759,6 +1760,13 @@ fail:
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_gst_tag_list_free_maybe (GstTagList * taglist)
|
||||||
|
{
|
||||||
|
if (taglist)
|
||||||
|
gst_tag_list_free (taglist);
|
||||||
|
}
|
||||||
|
|
||||||
static GstStateChangeReturn
|
static GstStateChangeReturn
|
||||||
gst_camera_bin_change_state (GstElement * element, GstStateChange trans)
|
gst_camera_bin_change_state (GstElement * element, GstStateChange trans)
|
||||||
{
|
{
|
||||||
|
@ -1805,8 +1813,8 @@ gst_camera_bin_change_state (GstElement * element, GstStateChange trans)
|
||||||
camera->image_location_list = NULL;
|
camera->image_location_list = NULL;
|
||||||
|
|
||||||
g_mutex_lock (camera->image_tags_mutex);
|
g_mutex_lock (camera->image_tags_mutex);
|
||||||
g_slist_foreach (camera->image_tags_list, (GFunc) gst_tag_list_free,
|
g_slist_foreach (camera->image_tags_list,
|
||||||
NULL);
|
(GFunc) _gst_tag_list_free_maybe, NULL);
|
||||||
g_slist_free (camera->image_tags_list);
|
g_slist_free (camera->image_tags_list);
|
||||||
camera->image_tags_list = NULL;
|
camera->image_tags_list = NULL;
|
||||||
g_mutex_unlock (camera->image_tags_mutex);
|
g_mutex_unlock (camera->image_tags_mutex);
|
||||||
|
|
Loading…
Reference in a new issue