• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012, Collabora Ltd.
3  *   Author: Sebastian Dröge <sebastian.droege@collabora.co.uk>
4  * Copyright (C) 2013, Fluendo S.A.
5  *   Author: Andoni Morales <amorales@fluendo.com>
6  * Copyright (C) 2014, Sebastian Dröge <sebastian@centricular.com>
7  * Copyright (C) 2014, Collabora Ltd.
8  *   Author: Matthieu Bouron <matthieu.bouron@collabora.com>
9  *
10  * This library is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Lesser General Public
12  * License as published by the Free Software Foundation
13  * version 2.1 of the License.
14  *
15  * This library is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18  * Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public
21  * License along with this library; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
23  *
24  */
25 #ifndef __GST_AMC_JNI_UTILS_H__
26 #define __GST_AMC_JNI_UTILS_H__
27 
28 #include <jni.h>
29 #include <glib.h>
30 #include <gst/gst.h>
31 
32 jclass    gst_amc_jni_get_class              (JNIEnv * env,
33                                              GError ** err,
34                                              const gchar * name);
35 
36 jmethodID gst_amc_jni_get_method_id          (JNIEnv * env,
37                                              GError ** err,
38                                              jclass klass,
39                                              const gchar * name,
40                                              const gchar * signature);
41 
42 jmethodID gst_amc_jni_get_static_method_id   (JNIEnv * env,
43                                              GError ** err,
44                                              jclass klass,
45                                              const gchar * name,
46                                              const gchar * signature);
47 
48 jfieldID gst_amc_jni_get_field_id            (JNIEnv * env,
49                                              GError ** err,
50                                              jclass klass,
51                                              const gchar * name,
52                                              const gchar * type);
53 
54 jfieldID gst_amc_jni_get_static_field_id     (JNIEnv * env,
55                                              GError ** err,
56                                              jclass klass,
57                                              const gchar * name,
58                                              const gchar * type);
59 
60 jobject gst_amc_jni_new_object               (JNIEnv * env,
61                                              GError ** err,
62                                              gboolean global,
63                                              jclass klass,
64                                              jmethodID constructor,
65                                              ...);
66 
67 jobject gst_amc_jni_new_object_from_static   (JNIEnv * env,
68                                              GError ** err,
69                                              gboolean global,
70                                              jclass klass,
71                                              jmethodID constructor,
72                                              ...);
73 
74 jobject gst_amc_jni_object_make_global       (JNIEnv * env,
75                                              jobject object);
76 
77 jobject gst_amc_jni_object_ref               (JNIEnv * env,
78                                              jobject object);
79 
80 void gst_amc_jni_object_unref                (JNIEnv * env,
81                                              jobject object);
82 
83 void gst_amc_jni_object_local_unref          (JNIEnv * env,
84                                              jobject object);
85 
86 gchar *gst_amc_jni_string_to_gchar           (JNIEnv * env,
87                                              jstring string,
88                                              gboolean release);
89 
90 jstring gst_amc_jni_string_from_gchar        (JNIEnv * env,
91                                              GError ** error,
92                                              gboolean global,
93                                              const gchar * string);
94 
95 G_GNUC_PRINTF (5, 6)
96 void gst_amc_jni_set_error                   (JNIEnv * env,
97                                               GError ** error,
98                                               GQuark domain,
99                                               gint code,
100                                               const gchar * format, ...);
101 
102 void gst_amc_jni_set_java_vm                 (JavaVM *java_vm);
103 
104 gboolean gst_amc_jni_initialize              (void);
105 
106 gboolean gst_amc_jni_is_vm_started           (void);
107 
108 JNIEnv *gst_amc_jni_get_env                  (void);
109 
110 jclass gst_amc_jni_get_application_class     (JNIEnv * env,
111                                              const gchar * name,
112                                              GError ** err);
113 
114 #define DEF_CALL_STATIC_TYPE_METHOD(_type, _name,  _jname, _retval) \
115 gboolean gst_amc_jni_call_static_##_name##_method (JNIEnv *env, GError ** err, jclass klass, jmethodID methodID, _type * value, ...)
116 
117 DEF_CALL_STATIC_TYPE_METHOD (gboolean, boolean, Boolean, FALSE);
118 DEF_CALL_STATIC_TYPE_METHOD (gint8, byte, Byte, G_MININT8);
119 DEF_CALL_STATIC_TYPE_METHOD (gshort, short, Short, G_MINSHORT);
120 DEF_CALL_STATIC_TYPE_METHOD (gint, int, Int, G_MININT);
121 DEF_CALL_STATIC_TYPE_METHOD (gchar, char, Char, 0);
122 DEF_CALL_STATIC_TYPE_METHOD (gint64, long, Long, G_MINLONG);
123 DEF_CALL_STATIC_TYPE_METHOD (gfloat, float, Float, G_MINFLOAT);
124 DEF_CALL_STATIC_TYPE_METHOD (gdouble, double, Double, G_MINDOUBLE);
125 DEF_CALL_STATIC_TYPE_METHOD (jobject, object, Object, NULL);
126 
127 gboolean gst_amc_jni_call_static_void_method        (JNIEnv * env,
128                                                     GError ** error,
129                                                     jclass klass,
130                                                     jmethodID method, ...);
131 
132 #define DEF_CALL_TYPE_METHOD(_type, _name,  _jname, _retval) \
133 gboolean gst_amc_jni_call_##_name##_method (JNIEnv *env, GError ** err, jobject obj, jmethodID methodID, _type * value, ...)
134 
135 DEF_CALL_TYPE_METHOD (gboolean, boolean, Boolean, FALSE);
136 DEF_CALL_TYPE_METHOD (gint8, byte, Byte, G_MININT8);
137 DEF_CALL_TYPE_METHOD (gshort, short, Short, G_MINSHORT);
138 DEF_CALL_TYPE_METHOD (gint, int, Int, G_MININT);
139 DEF_CALL_TYPE_METHOD (gchar, char, Char, 0);
140 DEF_CALL_TYPE_METHOD (gint64, long, Long, G_MINLONG);
141 DEF_CALL_TYPE_METHOD (gfloat, float, Float, G_MINFLOAT);
142 DEF_CALL_TYPE_METHOD (gdouble, double, Double, G_MINDOUBLE);
143 DEF_CALL_TYPE_METHOD (jobject, object, Object, NULL);
144 
145 gboolean gst_amc_jni_call_void_method        (JNIEnv * env,
146                                              GError ** error,
147                                              jobject obj,
148                                              jmethodID method, ...);
149 
150 #define DEF_GET_TYPE_FIELD(_type, _name, _jname) \
151 gboolean gst_amc_jni_get_##_name##_field (JNIEnv *env, GError ** err, jobject obj, jfieldID fieldID, _type * value)
152 
153 DEF_GET_TYPE_FIELD (gboolean, boolean, Boolean);
154 DEF_GET_TYPE_FIELD (gint8, byte, Byte);
155 DEF_GET_TYPE_FIELD (gshort, short, Short);
156 DEF_GET_TYPE_FIELD (gint, int, Int);
157 DEF_GET_TYPE_FIELD (gchar, char, Char);
158 DEF_GET_TYPE_FIELD (gint64, long, Long);
159 DEF_GET_TYPE_FIELD (gfloat, float, Float);
160 DEF_GET_TYPE_FIELD (gdouble, double, Double);
161 DEF_GET_TYPE_FIELD (jobject, object, Object);
162 
163 #define DEF_GET_STATIC_TYPE_FIELD(_type, _name, _jname) \
164 gboolean gst_amc_jni_get_static_##_name##_field (JNIEnv *env, GError ** err, jclass klass, jfieldID fieldID, _type * value)
165 
166 DEF_GET_STATIC_TYPE_FIELD (gboolean, boolean, Boolean);
167 DEF_GET_STATIC_TYPE_FIELD (gint8, byte, Byte);
168 DEF_GET_STATIC_TYPE_FIELD (gshort, short, Short);
169 DEF_GET_STATIC_TYPE_FIELD (gint, int, Int);
170 DEF_GET_STATIC_TYPE_FIELD (gchar, char, Char);
171 DEF_GET_STATIC_TYPE_FIELD (gint64, long, Long);
172 DEF_GET_STATIC_TYPE_FIELD (gfloat, float, Float);
173 DEF_GET_STATIC_TYPE_FIELD (gdouble, double, Double);
174 DEF_GET_STATIC_TYPE_FIELD (jobject, object, Object);
175 
176 typedef struct _GstAmcBuffer GstAmcBuffer;
177 
178 struct _GstAmcBuffer {
179   jobject object; /* global reference */
180   guint8 *data;
181   gsize size;
182 };
183 
184 gboolean gst_amc_buffer_get_position_and_limit (GstAmcBuffer * buffer, GError ** err, gint * position, gint * limit);
185 gboolean gst_amc_buffer_set_position_and_limit (GstAmcBuffer * buffer, GError ** err, gint position, gint limit);
186 gboolean gst_amc_buffer_clear (GstAmcBuffer * buffer, GError ** err);
187 GstAmcBuffer * gst_amc_buffer_copy (GstAmcBuffer * buffer);
188 void     gst_amc_buffer_free (GstAmcBuffer * buffer);
189 
190 gboolean gst_amc_jni_get_buffer_array (JNIEnv * env, GError ** err, jobject array, GstAmcBuffer ** buffers, gsize * n_buffers);
191 void gst_amc_jni_free_buffer_array (JNIEnv * env, GstAmcBuffer * buffers, gsize n_buffers);
192 
193 #endif
194