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