| /* | |
| * Copyright (C) 2012, Collabora Ltd. | |
| * Copyright (C) 2012, Cisco Systems, Inc. | |
| * Author: Youness Alaoui <youness.alaoui@collabora.co.uk> | |
| * | |
| * Copyright (C) 2015, Collabora Ltd. | |
| * Author: Justin Kim <justin.kim@collabora.com> | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation | |
| * version 2.1 of the License. | |
| * | |
| * 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 | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; if not, write to the Free Software | |
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
| * | |
| */ | |
| #ifdef HAVE_CONFIG_H | |
| #include "config.h" | |
| #endif | |
| #include "gstjniutils.h" | |
| #include "gst-android-graphics-imageformat.h" | |
| static struct | |
| { | |
| jclass klass; | |
| jmethodID get_bits_per_pixel; | |
| jint JPEG; | |
| jint NV16; | |
| jint NV21; | |
| jint RGB_565; | |
| jint UNKNOWN; | |
| jint YUY2; | |
| jint YV12; | |
| } android_graphics_imageformat = { | |
| 0 | |
| }; | |
| gint ImageFormat_JPEG; | |
| gint ImageFormat_NV16; | |
| gint ImageFormat_NV21; | |
| gint ImageFormat_RGB_565; | |
| gint ImageFormat_UNKNOWN; | |
| gint ImageFormat_YUY2; | |
| gint ImageFormat_YV12; | |
| static gboolean | |
| _init_classes (void) | |
| { | |
| JNIEnv *env; | |
| jfieldID fieldID; | |
| jclass klass; | |
| GError *err = NULL; | |
| env = gst_amc_jni_get_env (); | |
| /* android.graphics.ImageFormat */ | |
| klass = android_graphics_imageformat.klass = | |
| gst_amc_jni_get_class (env, &err, "android/graphics/ImageFormat"); | |
| if (err) | |
| goto failed; | |
| android_graphics_imageformat.get_bits_per_pixel = | |
| gst_amc_jni_get_static_method_id (env, &err, klass, | |
| "getBitsPerPixel", "(I)I"); | |
| if (err) | |
| goto failed; | |
| fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "JPEG", "I"); | |
| if (err) | |
| goto failed; | |
| if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, | |
| &android_graphics_imageformat.JPEG)) | |
| goto failed; | |
| ImageFormat_JPEG = android_graphics_imageformat.JPEG; | |
| fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "NV16", "I"); | |
| if (err) | |
| goto failed; | |
| if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, | |
| &android_graphics_imageformat.NV16)) | |
| goto failed; | |
| ImageFormat_NV16 = android_graphics_imageformat.NV16; | |
| fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "NV21", "I"); | |
| if (err) | |
| goto failed; | |
| if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, | |
| &android_graphics_imageformat.NV21)) | |
| goto failed; | |
| ImageFormat_NV21 = android_graphics_imageformat.NV21; | |
| fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "RGB_565", "I"); | |
| if (err) | |
| goto failed; | |
| if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, | |
| &android_graphics_imageformat.RGB_565)) | |
| goto failed; | |
| ImageFormat_RGB_565 = android_graphics_imageformat.RGB_565; | |
| fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "UNKNOWN", "I"); | |
| if (err) | |
| goto failed; | |
| if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, | |
| &android_graphics_imageformat.UNKNOWN)) | |
| goto failed; | |
| ImageFormat_UNKNOWN = android_graphics_imageformat.UNKNOWN; | |
| fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "YUY2", "I"); | |
| if (err) | |
| goto failed; | |
| if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, | |
| &android_graphics_imageformat.YUY2)) | |
| goto failed; | |
| ImageFormat_YUY2 = android_graphics_imageformat.YUY2; | |
| fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "YV12", "I"); | |
| if (err) | |
| goto failed; | |
| if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, | |
| &android_graphics_imageformat.YV12)) | |
| goto failed; | |
| ImageFormat_YV12 = android_graphics_imageformat.YV12; | |
| return TRUE; | |
| failed: | |
| if (err) { | |
| GST_ERROR ("Failed to get android.graphics.ImageFormat class: %s", | |
| err->message); | |
| g_clear_error (&err); | |
| } | |
| return FALSE; | |
| } | |
| gboolean | |
| gst_android_graphics_imageformat_init (void) | |
| { | |
| if (!_init_classes ()) { | |
| gst_android_graphics_imageformat_deinit (); | |
| return FALSE; | |
| } | |
| return TRUE; | |
| } | |
| void | |
| gst_android_graphics_imageformat_deinit (void) | |
| { | |
| JNIEnv *env = gst_amc_jni_get_env (); | |
| if (android_graphics_imageformat.klass) | |
| (*env)->DeleteGlobalRef (env, android_graphics_imageformat.klass); | |
| android_graphics_imageformat.klass = NULL; | |
| } | |
| /* android.graphics.ImageFormat */ | |
| gint | |
| gst_ag_imageformat_get_bits_per_pixel (gint format) | |
| { | |
| JNIEnv *env; | |
| GError *err = NULL; | |
| jclass klass = android_graphics_imageformat.klass; | |
| jint bpp = 0; | |
| env = gst_amc_jni_get_env (); | |
| if (!gst_amc_jni_call_static_int_method (env, &err, | |
| klass, android_graphics_imageformat.get_bits_per_pixel, &bpp, | |
| format)) { | |
| GST_ERROR ("Failed to get android.graphics.ImageFormat class: %s", | |
| err->message); | |
| g_clear_error (&err); | |
| } | |
| return bpp; | |
| } |