gstreamer: amlv4l2dec [1/1]

PD#SWPL-79817

Problem:
new git for amlv4l2dec

Solution:
(detail info)

Verify:
(detail info)

Change-Id: I9b84c97bc6fd27ea269bf4c2cc7bcf51b6be8502
Signed-off-by: xuesong.jiang <xuesong.jiang@amlogic.com>
diff --git a/src/aml-v4l2-utils.h b/src/aml-v4l2-utils.h
new file mode 100644
index 0000000..961be22
--- /dev/null
+++ b/src/aml-v4l2-utils.h
@@ -0,0 +1,95 @@
+/* GStreamer
+ * Copyright (C) 2022 <xuesong.jiang@amlogic.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Suite 500,
+ * Boston, MA 02110-1335, USA.
+ */
+
+#ifndef __AML_V4L2_UTILS_H__
+#define __AML_V4L2_UTILS_H__
+
+#include <gst/gst.h>
+
+G_BEGIN_DECLS
+
+#define GST_AML_V4L2_ERROR_INIT \
+    {                           \
+        NULL, NULL              \
+    }
+#define GST_AML_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__;                                                \
+        }                                                                            \
+    }
+
+/**
+ * GST_AML_V4L2_IS_M2M:
+ * @_dcaps: The device capabilities
+ *
+ * Checks if the device caps represent an M2M device. Note that modern M2M
+ * devices uses V4L2_CAP_VIDEO_M2M* flag, but legacy uses to set both CAPTURE
+ * and OUTPUT flags instead.
+ *
+ * Returns: %TRUE if this is a M2M device.
+ */
+#define GST_AML_V4L2_IS_M2M(_dcaps)                                              \
+  (((_dcaps) & (V4L2_CAP_VIDEO_M2M | V4L2_CAP_VIDEO_M2M_MPLANE)) ||\
+            (((_dcaps) & \
+                    (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_CAPTURE_MPLANE)) && \
+                ((_dcaps) & \
+                    (V4L2_CAP_VIDEO_OUTPUT |  V4L2_CAP_VIDEO_OUTPUT_MPLANE))))
+
+typedef struct _GstAmlV4l2Iterator GstAmlV4l2Iterator;
+typedef struct _GstAmlV4l2Error GstAmlV4l2Error;
+
+struct _GstAmlV4l2Iterator
+{
+    const gchar *device_path;
+    const gchar *device_name;
+    const gchar *sys_path;
+};
+
+struct _GstAmlV4l2Error
+{
+    GError *error;
+    gchar *dbg_message;
+    const gchar *file;
+    const gchar *func;
+    gint line;
+};
+
+GstAmlV4l2Iterator *gst_aml_v4l2_iterator_new(void);
+gboolean gst_aml_v4l2_iterator_next(GstAmlV4l2Iterator *it);
+void gst_aml_v4l2_iterator_free(GstAmlV4l2Iterator *it);
+
+const gchar *gst_aml_v4l2_iterator_get_device_path(GstAmlV4l2Iterator *it);
+const gchar *gst_aml_v4l2_iterator_get_device_name(GstAmlV4l2Iterator *it);
+const gchar *gst_aml_v4l2_iterator_get_sys_path(GstAmlV4l2Iterator *it);
+
+void gst_aml_v4l2_clear_error(GstAmlV4l2Error *error);
+void gst_aml_v4l2_error(gpointer element, GstAmlV4l2Error *error);
+
+G_END_DECLS
+
+#endif /* __AML_V4L2_UTILS_H__ */