mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 18:21:04 +00:00
v4l2-util: Introduce GstV4l2Error
This is to allow returning an error that can easily be sent as message to the application if the element needs it. Using this also allow ignoring errors. https://bugzilla.gnome.org/show_bug.cgi?id=766172
This commit is contained in:
parent
ec169a1517
commit
e228430788
2 changed files with 63 additions and 0 deletions
|
@ -164,3 +164,38 @@ gst_v4l2_iterator_free (GstV4l2Iterator * _it)
|
|||
}
|
||||
|
||||
#endif
|
||||
|
||||
void
|
||||
gst_v4l2_clear_error (GstV4l2Error * v4l2err)
|
||||
{
|
||||
if (v4l2err) {
|
||||
g_clear_error (&v4l2err->error);
|
||||
g_free (v4l2err->dbg_message);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
gst_v4l2_error (gpointer element, GstV4l2Error * v4l2err)
|
||||
{
|
||||
GError *error;
|
||||
|
||||
if (!v4l2err || !v4l2err->error)
|
||||
return;
|
||||
|
||||
error = v4l2err->error;
|
||||
|
||||
if (error->message)
|
||||
GST_WARNING_OBJECT (element, "error: %s", error->message);
|
||||
|
||||
if (v4l2err->dbg_message)
|
||||
GST_WARNING_OBJECT (element, "error: %s", v4l2err->dbg_message);
|
||||
|
||||
gst_element_message_full (GST_ELEMENT (element), GST_MESSAGE_ERROR,
|
||||
error->domain, error->code, error->message, v4l2err->dbg_message,
|
||||
v4l2err->file, v4l2err->func, v4l2err->line);
|
||||
|
||||
error->message = NULL;
|
||||
v4l2err->dbg_message = NULL;
|
||||
|
||||
gst_v4l2_clear_error (v4l2err);
|
||||
}
|
||||
|
|
|
@ -26,7 +26,23 @@
|
|||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_V4L2_ERROR_INIT { NULL, NULL }
|
||||
#define GST_V4L2_ERROR(v4l2err,domain,code,msg,dbg) \
|
||||
{\
|
||||
if (v4l2err) { \
|
||||
gchar *_msg = _gst_element_error_printf msg; \
|
||||
v4l2err->error = g_error_new_literal (GST_##domain##_ERROR, \
|
||||
GST_##domain##_ERROR_##code, _msg); \
|
||||
g_free (_msg); \
|
||||
v4l2err->dbg_message = _gst_element_error_printf dbg; \
|
||||
v4l2err->file = __FILE__; \
|
||||
v4l2err->func = GST_FUNCTION; \
|
||||
v4l2err->line = __LINE__; \
|
||||
} \
|
||||
}
|
||||
|
||||
typedef struct _GstV4l2Iterator GstV4l2Iterator;
|
||||
typedef struct _GstV4l2Error GstV4l2Error;
|
||||
|
||||
struct _GstV4l2Iterator
|
||||
{
|
||||
|
@ -35,6 +51,15 @@ struct _GstV4l2Iterator
|
|||
const gchar *sys_path;
|
||||
};
|
||||
|
||||
struct _GstV4l2Error
|
||||
{
|
||||
GError *error;
|
||||
gchar *dbg_message;
|
||||
const gchar *file;
|
||||
const gchar *func;
|
||||
gint line;
|
||||
};
|
||||
|
||||
GstV4l2Iterator * gst_v4l2_iterator_new (void);
|
||||
gboolean gst_v4l2_iterator_next (GstV4l2Iterator *it);
|
||||
void gst_v4l2_iterator_free (GstV4l2Iterator *it);
|
||||
|
@ -43,6 +68,9 @@ const gchar * gst_v4l2_iterator_get_device_path (GstV4l2Iterator *it);
|
|||
const gchar * gst_v4l2_iterator_get_device_name (GstV4l2Iterator *it);
|
||||
const gchar * gst_v4l2_iterator_get_sys_path (GstV4l2Iterator *it);
|
||||
|
||||
void gst_v4l2_clear_error (GstV4l2Error *error);
|
||||
void gst_v4l2_error (gpointer element, GstV4l2Error *error);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __V4L2_UTILS_H__ */
|
||||
|
|
Loading…
Reference in a new issue