/* * Copyright (C) 2012, Collabora Ltd. * Copyright (C) 2012, Cisco Systems, Inc. * Author: Youness Alaoui * * Copyright (C) 2015, Collabora Ltd. * Author: Justin Kim * * 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-hardware-camera.h" GST_DEBUG_CATEGORY_STATIC (ahc_debug); #define GST_CAT_DEFAULT ahc_debug #define GST_DVM_STATIC_CALL(error_statement, type, k, method, ...) \ (*env)->CallStatic##type##Method (env, k.klass, k.method, ## __VA_ARGS__); \ if ((*env)->ExceptionCheck (env)) { \ GST_ERROR ("Failed to call Java method"); \ (*env)->ExceptionDescribe (env); \ (*env)->ExceptionClear (env); \ error_statement; \ } #define GST_DVM_CALL(error_statement, obj, type, k, method, ...) \ (*env)->Call##type##Method (env, obj, k.method, ## __VA_ARGS__); \ if ((*env)->ExceptionCheck (env)) { \ GST_ERROR ("Failed to call Java method"); \ (*env)->ExceptionDescribe (env); \ (*env)->ExceptionClear (env); \ error_statement; \ } static struct { jclass klass; jmethodID addCallbackBuffer; jmethodID autoFocus; jmethodID cancelAutoFocus; jmethodID getCameraInfo; jmethodID getNumberOfCameras; jmethodID getParameters; jmethodID lock; jmethodID open; jmethodID reconnect; jmethodID release; jmethodID setErrorCallback; jmethodID setParameters; jmethodID setPreviewCallbackWithBuffer; jmethodID setPreviewTexture; jmethodID startPreview; jmethodID startSmoothZoom; jmethodID stopPreview; jmethodID stopSmoothZoom; jmethodID unlock; } android_hardware_camera = { 0}; static struct { jclass klass; jmethodID constructor; jfieldID facing; jfieldID orientation; jint CAMERA_FACING_BACK; jint CAMERA_FACING_FRONT; } android_hardware_camera_camerainfo = { 0}; gint CameraInfo_CAMERA_FACING_BACK; gint CameraInfo_CAMERA_FACING_FRONT; static struct { jclass klass; jfieldID width; jfieldID height; } android_hardware_camera_size = { 0}; static struct { jclass klass; jmethodID flatten; jmethodID getAntibanding; jmethodID getColorEffect; jmethodID getExposureCompensation; jmethodID getExposureCompensationStep; jmethodID getFlashMode; jmethodID getFocalLength; jmethodID getFocusMode; jmethodID getHorizontalViewAngle; jmethodID getMaxExposureCompensation; jmethodID getMaxZoom; jmethodID getMinExposureCompensation; jmethodID getPreviewFormat; jmethodID getPreviewFpsRange; jmethodID getPreviewSize; jmethodID getSceneMode; jmethodID getSupportedAntibanding; jmethodID getSupportedColorEffects; jmethodID getSupportedFlashModes; jmethodID getSupportedFocusModes; jmethodID getSupportedPreviewFormats; jmethodID getSupportedPreviewFpsRange; jmethodID getSupportedPreviewSizes; jmethodID getSupportedSceneModes; jmethodID getSupportedWhiteBalance; jmethodID getVerticalViewAngle; jmethodID getVideoStabilization; jmethodID getWhiteBalance; jmethodID getZoom; jmethodID getZoomRatios; jmethodID isSmoothZoomSupported; jmethodID isVideoStabilizationSupported; jmethodID isZoomSupported; jmethodID setAntibanding; jmethodID setColorEffect; jmethodID setExposureCompensation; jmethodID setFlashMode; jmethodID setFocusMode; jmethodID setPreviewFormat; jmethodID setPreviewFpsRange; jmethodID setPreviewSize; jmethodID setSceneMode; jmethodID setVideoStabilization; jmethodID setWhiteBalance; jmethodID setZoom; jmethodID unflatten; jstring WHITE_BALANCE_AUTO; jstring WHITE_BALANCE_INCANDESCENT; jstring WHITE_BALANCE_FLUORESCENT; jstring WHITE_BALANCE_WARM_FLUORESCENT; jstring WHITE_BALANCE_DAYLIGHT; jstring WHITE_BALANCE_CLOUDY_DAYLIGHT; jstring WHITE_BALANCE_TWILIGHT; jstring WHITE_BALANCE_SHADE; jstring EFFECT_NONE; jstring EFFECT_MONO; jstring EFFECT_NEGATIVE; jstring EFFECT_SOLARIZE; jstring EFFECT_SEPIA; jstring EFFECT_POSTERIZE; jstring EFFECT_WHITEBOARD; jstring EFFECT_BLACKBOARD; jstring EFFECT_AQUA; jstring ANTIBANDING_AUTO; jstring ANTIBANDING_50HZ; jstring ANTIBANDING_60HZ; jstring ANTIBANDING_OFF; jstring FLASH_MODE_OFF; jstring FLASH_MODE_AUTO; jstring FLASH_MODE_ON; jstring FLASH_MODE_RED_EYE; jstring FLASH_MODE_TORCH; jstring SCENE_MODE_AUTO; jstring SCENE_MODE_ACTION; jstring SCENE_MODE_PORTRAIT; jstring SCENE_MODE_LANDSCAPE; jstring SCENE_MODE_NIGHT; jstring SCENE_MODE_NIGHT_PORTRAIT; jstring SCENE_MODE_THEATRE; jstring SCENE_MODE_BEACH; jstring SCENE_MODE_SNOW; jstring SCENE_MODE_SUNSET; jstring SCENE_MODE_STEADYPHOTO; jstring SCENE_MODE_FIREWORKS; jstring SCENE_MODE_SPORTS; jstring SCENE_MODE_PARTY; jstring SCENE_MODE_CANDLELIGHT; jstring SCENE_MODE_BARCODE; jstring FOCUS_MODE_AUTO; jstring FOCUS_MODE_INFINITY; jstring FOCUS_MODE_MACRO; jstring FOCUS_MODE_FIXED; jstring FOCUS_MODE_EDOF; jstring FOCUS_MODE_CONTINUOUS_VIDEO; jstring FOCUS_MODE_CONTINUOUS_PICTURE; } android_hardware_camera_parameters = { 0}; const gchar *Parameters_WHITE_BALANCE_AUTO; const gchar *Parameters_WHITE_BALANCE_INCANDESCENT; const gchar *Parameters_WHITE_BALANCE_FLUORESCENT; const gchar *Parameters_WHITE_BALANCE_WARM_FLUORESCENT; const gchar *Parameters_WHITE_BALANCE_DAYLIGHT; const gchar *Parameters_WHITE_BALANCE_CLOUDY_DAYLIGHT; const gchar *Parameters_WHITE_BALANCE_TWILIGHT; const gchar *Parameters_WHITE_BALANCE_SHADE; const gchar *Parameters_EFFECT_NONE; const gchar *Parameters_EFFECT_MONO; const gchar *Parameters_EFFECT_NEGATIVE; const gchar *Parameters_EFFECT_SOLARIZE; const gchar *Parameters_EFFECT_SEPIA; const gchar *Parameters_EFFECT_POSTERIZE; const gchar *Parameters_EFFECT_WHITEBOARD; const gchar *Parameters_EFFECT_BLACKBOARD; const gchar *Parameters_EFFECT_AQUA; const gchar *Parameters_ANTIBANDING_AUTO; const gchar *Parameters_ANTIBANDING_50HZ; const gchar *Parameters_ANTIBANDING_60HZ; const gchar *Parameters_ANTIBANDING_OFF; const gchar *Parameters_FLASH_MODE_OFF; const gchar *Parameters_FLASH_MODE_AUTO; const gchar *Parameters_FLASH_MODE_ON; const gchar *Parameters_FLASH_MODE_RED_EYE; const gchar *Parameters_FLASH_MODE_TORCH; const gchar *Parameters_SCENE_MODE_AUTO; const gchar *Parameters_SCENE_MODE_ACTION; const gchar *Parameters_SCENE_MODE_PORTRAIT; const gchar *Parameters_SCENE_MODE_LANDSCAPE; const gchar *Parameters_SCENE_MODE_NIGHT; const gchar *Parameters_SCENE_MODE_NIGHT_PORTRAIT; const gchar *Parameters_SCENE_MODE_THEATRE; const gchar *Parameters_SCENE_MODE_BEACH; const gchar *Parameters_SCENE_MODE_SNOW; const gchar *Parameters_SCENE_MODE_SUNSET; const gchar *Parameters_SCENE_MODE_STEADYPHOTO; const gchar *Parameters_SCENE_MODE_FIREWORKS; const gchar *Parameters_SCENE_MODE_SPORTS; const gchar *Parameters_SCENE_MODE_PARTY; const gchar *Parameters_SCENE_MODE_CANDLELIGHT; const gchar *Parameters_SCENE_MODE_BARCODE; const gchar *Parameters_FOCUS_MODE_AUTO; const gchar *Parameters_FOCUS_MODE_INFINITY; const gchar *Parameters_FOCUS_MODE_MACRO; const gchar *Parameters_FOCUS_MODE_FIXED; const gchar *Parameters_FOCUS_MODE_EDOF; const gchar *Parameters_FOCUS_MODE_CONTINUOUS_VIDEO; const gchar *Parameters_FOCUS_MODE_CONTINUOUS_PICTURE; static struct { jclass klass; jmethodID iterator; } java_util_list = { 0}; static struct { jclass klass; jmethodID hasNext; jmethodID next; } java_util_iterator = { 0}; static struct { jclass klass; jmethodID intValue; } java_lang_integer = { 0}; static struct { jclass klass; jmethodID equals; } java_lang_string = { 0}; static struct { jclass klass; jmethodID constructor; } org_freedesktop_gstreamer_androidmedia_gstahccallback = { 0}; static void gst_ah_camera_on_preview_frame (JNIEnv * env, jclass klass, jbyteArray data, jobject camera, jlong callback, jlong user_data) { GstAHCPreviewCallback cb = (GstAHCPreviewCallback) (gsize) callback; if (cb) cb (data, (gpointer) (gsize) user_data); } static void gst_ah_camera_on_error (JNIEnv * env, jclass klass, jint error, jobject camera, jlong callback, jlong user_data) { GstAHCErrorCallback cb = (GstAHCErrorCallback) (gsize) callback; if (cb) cb (error, (gpointer) (gsize) user_data); } static void gst_ah_camera_on_auto_focus (JNIEnv * env, jclass klass, jboolean success, jobject camera, jlong callback, jlong user_data) { GstAHCAutoFocusCallback cb = (GstAHCAutoFocusCallback) (gsize) callback; if (cb) cb (success, (gpointer) (gsize) user_data); } static JNINativeMethod native_methods[] = { {(gchar *) "gst_ah_camera_on_preview_frame", (gchar *) "([BLandroid/hardware/Camera;JJ)V", (void *) gst_ah_camera_on_preview_frame}, {(gchar *) "gst_ah_camera_on_error", (gchar *) "(ILandroid/hardware/Camera;JJ)V", (void *) gst_ah_camera_on_error}, // {(gchar *) "gst_ah_camera_on_auto_focus", // (gchar *) "(ZLandroid/hardware/Camera;JJ)V", // (void *) gst_ah_camera_on_auto_focus} }; static gboolean _init_classes (void) { JNIEnv *env; GError *err = NULL; jclass klass; jfieldID fieldID; env = gst_amc_jni_get_env (); /* android.hardware.Camera */ klass = android_hardware_camera.klass = gst_amc_jni_get_class (env, &err, "android/hardware/Camera"); if (!klass) goto failed; android_hardware_camera.addCallbackBuffer = gst_amc_jni_get_method_id (env, &err, klass, "addCallbackBuffer", "([B)V"); android_hardware_camera.autoFocus = gst_amc_jni_get_method_id (env, &err, klass, "autoFocus", "(Landroid/hardware/Camera$AutoFocusCallback;)V"); android_hardware_camera.cancelAutoFocus = gst_amc_jni_get_method_id (env, &err, klass, "cancelAutoFocus", "()V"); android_hardware_camera.getCameraInfo = gst_amc_jni_get_static_method_id (env, &err, klass, "getCameraInfo", "(ILandroid/hardware/Camera$CameraInfo;)V"); android_hardware_camera.getNumberOfCameras = gst_amc_jni_get_static_method_id (env, &err, klass, "getNumberOfCameras", "()I"); android_hardware_camera.getParameters = gst_amc_jni_get_method_id (env, &err, klass, "getParameters", "()Landroid/hardware/Camera$Parameters;"); android_hardware_camera.lock = gst_amc_jni_get_method_id (env, &err, klass, "lock", "()V"); android_hardware_camera.open = gst_amc_jni_get_static_method_id (env, &err, klass, "open", "(I)Landroid/hardware/Camera;"); android_hardware_camera.reconnect = gst_amc_jni_get_method_id (env, &err, klass, "reconnect", "()V"); android_hardware_camera.release = gst_amc_jni_get_method_id (env, &err, klass, "release", "()V"); android_hardware_camera.setErrorCallback = gst_amc_jni_get_method_id (env, &err, klass, "setErrorCallback", "(Landroid/hardware/Camera$ErrorCallback;)V"); android_hardware_camera.setParameters = gst_amc_jni_get_method_id (env, &err, klass, "setParameters", "(Landroid/hardware/Camera$Parameters;)V"); android_hardware_camera.setPreviewCallbackWithBuffer = gst_amc_jni_get_method_id (env, &err, klass, "setPreviewCallbackWithBuffer", "(Landroid/hardware/Camera$PreviewCallback;)V"); android_hardware_camera.setPreviewTexture = gst_amc_jni_get_method_id (env, &err, klass, "setPreviewTexture", "(Landroid/graphics/SurfaceTexture;)V"); android_hardware_camera.startPreview = gst_amc_jni_get_method_id (env, &err, klass, "startPreview", "()V"); android_hardware_camera.startSmoothZoom = gst_amc_jni_get_method_id (env, &err, klass, "startSmoothZoom", "(I)V"); android_hardware_camera.stopPreview = gst_amc_jni_get_method_id (env, &err, klass, "stopPreview", "()V"); android_hardware_camera.stopPreview = gst_amc_jni_get_method_id (env, &err, klass, "stopPreview", "()V"); android_hardware_camera.unlock = gst_amc_jni_get_method_id (env, &err, klass, "unlock", "()V"); /* android.hardware.Camera.CameraInfo */ klass = android_hardware_camera_camerainfo.klass = gst_amc_jni_get_class (env, &err, "android/hardware/Camera$CameraInfo"); if (!klass) goto failed; android_hardware_camera_camerainfo.constructor = gst_amc_jni_get_method_id (env, &err, klass, "", "()V"); android_hardware_camera_camerainfo.facing = gst_amc_jni_get_field_id (env, &err, klass, "facing", "I"); android_hardware_camera_camerainfo.orientation = gst_amc_jni_get_field_id (env, &err, klass, "orientation", "I"); fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "CAMERA_FACING_BACK", "I"); if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &android_hardware_camera_camerainfo.CAMERA_FACING_BACK)) goto failed; CameraInfo_CAMERA_FACING_BACK = android_hardware_camera_camerainfo.CAMERA_FACING_BACK; fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "CAMERA_FACING_FRONT", "I"); if (!gst_amc_jni_get_static_int_field (env, &err, klass, fieldID, &android_hardware_camera_camerainfo.CAMERA_FACING_FRONT)) goto failed; CameraInfo_CAMERA_FACING_FRONT = android_hardware_camera_camerainfo.CAMERA_FACING_FRONT; /* android.hardware.Camera.Size */ klass = android_hardware_camera_size.klass = gst_amc_jni_get_class (env, &err, "android/hardware/Camera$Size"); if (!klass) goto failed; android_hardware_camera_size.width = gst_amc_jni_get_field_id (env, &err, klass, "width", "I"); android_hardware_camera_size.height = gst_amc_jni_get_field_id (env, &err, klass, "height", "I"); /* android.hardware.Camera.Parameters */ klass = android_hardware_camera_parameters.klass = gst_amc_jni_get_class (env, &err, "android/hardware/Camera$Parameters"); if (!klass) goto failed; android_hardware_camera_parameters.flatten = gst_amc_jni_get_method_id (env, &err, klass, "flatten", "()Ljava/lang/String;"); android_hardware_camera_parameters.getAntibanding = gst_amc_jni_get_method_id (env, &err, klass, "getAntibanding", "()Ljava/lang/String;"); android_hardware_camera_parameters.getColorEffect = gst_amc_jni_get_method_id (env, &err, klass, "getColorEffect", "()Ljava/lang/String;"); android_hardware_camera_parameters.getExposureCompensation = gst_amc_jni_get_method_id (env, &err, klass, "getExposureCompensation", "()I"); android_hardware_camera_parameters.getExposureCompensationStep = gst_amc_jni_get_method_id (env, &err, klass, "getExposureCompensationStep", "()F"); android_hardware_camera_parameters.getFlashMode = gst_amc_jni_get_method_id (env, &err, klass, "getFlashMode", "()Ljava/lang/String;"); android_hardware_camera_parameters.getFocalLength = gst_amc_jni_get_method_id (env, &err, klass, "getFocalLength", "()F"); android_hardware_camera_parameters.getFocusMode = gst_amc_jni_get_method_id (env, &err, klass, "getFocusMode", "()Ljava/lang/String;"); android_hardware_camera_parameters.getHorizontalViewAngle = gst_amc_jni_get_method_id (env, &err, klass, "getHorizontalViewAngle", "()F"); android_hardware_camera_parameters.getMaxExposureCompensation = gst_amc_jni_get_method_id (env, &err, klass, "getMaxExposureCompensation", "()I"); android_hardware_camera_parameters.getMaxZoom = gst_amc_jni_get_method_id (env, &err, klass, "getMaxZoom", "()I"); android_hardware_camera_parameters.getMinExposureCompensation = gst_amc_jni_get_method_id (env, &err, klass, "getMinExposureCompensation", "()I"); android_hardware_camera_parameters.getPreviewFormat = gst_amc_jni_get_method_id (env, &err, klass, "getPreviewFormat", "()I"); android_hardware_camera_parameters.getPreviewFpsRange = gst_amc_jni_get_method_id (env, &err, klass, "getPreviewFpsRange", "([I)V"); android_hardware_camera_parameters.getPreviewSize = gst_amc_jni_get_method_id (env, &err, klass, "getPreviewSize", "()Landroid/hardware/Camera$Size;"); android_hardware_camera_parameters.getSceneMode = gst_amc_jni_get_method_id (env, &err, klass, "getSceneMode", "()Ljava/lang/String;"); android_hardware_camera_parameters.getSupportedAntibanding = gst_amc_jni_get_method_id (env, &err, klass, "getSupportedAntibanding", "()Ljava/util/List;"); android_hardware_camera_parameters.getSupportedColorEffects = gst_amc_jni_get_method_id (env, &err, klass, "getSupportedColorEffects", "()Ljava/util/List;"); android_hardware_camera_parameters.getSupportedFlashModes = gst_amc_jni_get_method_id (env, &err, klass, "getSupportedFlashModes", "()Ljava/util/List;"); android_hardware_camera_parameters.getSupportedFocusModes = gst_amc_jni_get_method_id (env, &err, klass, "getSupportedFocusModes", "()Ljava/util/List;"); android_hardware_camera_parameters.getSupportedPreviewFormats = gst_amc_jni_get_method_id (env, &err, klass, "getSupportedPreviewFormats", "()Ljava/util/List;"); android_hardware_camera_parameters.getSupportedPreviewFpsRange = gst_amc_jni_get_method_id (env, &err, klass, "getSupportedPreviewFpsRange", "()Ljava/util/List;"); android_hardware_camera_parameters.getSupportedPreviewSizes = gst_amc_jni_get_method_id (env, &err, klass, "getSupportedPreviewSizes", "()Ljava/util/List;"); android_hardware_camera_parameters.getSupportedSceneModes = gst_amc_jni_get_method_id (env, &err, klass, "getSupportedSceneModes", "()Ljava/util/List;"); android_hardware_camera_parameters.getSupportedWhiteBalance = gst_amc_jni_get_method_id (env, &err, klass, "getSupportedWhiteBalance", "()Ljava/util/List;"); android_hardware_camera_parameters.getVerticalViewAngle = gst_amc_jni_get_method_id (env, &err, klass, "getVerticalViewAngle", "()F"); android_hardware_camera_parameters.getVideoStabilization = gst_amc_jni_get_method_id (env, &err, klass, "getVideoStabilization", "()Z"); android_hardware_camera_parameters.getWhiteBalance = gst_amc_jni_get_method_id (env, &err, klass, "getWhiteBalance", "()Ljava/lang/String;"); android_hardware_camera_parameters.getZoom = gst_amc_jni_get_method_id (env, &err, klass, "getZoom", "()I"); android_hardware_camera_parameters.getZoomRatios = gst_amc_jni_get_method_id (env, &err, klass, "getZoomRatios", "()Ljava/util/List;"); android_hardware_camera_parameters.isSmoothZoomSupported = gst_amc_jni_get_method_id (env, &err, klass, "isSmoothZoomSupported", "()Z"); android_hardware_camera_parameters.isVideoStabilizationSupported = gst_amc_jni_get_method_id (env, &err, klass, "isVideoStabilizationSupported", "()Z"); android_hardware_camera_parameters.isZoomSupported = gst_amc_jni_get_method_id (env, &err, klass, "isZoomSupported", "()Z"); android_hardware_camera_parameters.setAntibanding = gst_amc_jni_get_method_id (env, &err, klass, "setAntibanding", "(Ljava/lang/String;)V"); android_hardware_camera_parameters.setColorEffect = gst_amc_jni_get_method_id (env, &err, klass, "setColorEffect", "(Ljava/lang/String;)V"); android_hardware_camera_parameters.setExposureCompensation = gst_amc_jni_get_method_id (env, &err, klass, "setExposureCompensation", "(I)V"); android_hardware_camera_parameters.setFlashMode = gst_amc_jni_get_method_id (env, &err, klass, "setFlashMode", "(Ljava/lang/String;)V"); android_hardware_camera_parameters.setFocusMode = gst_amc_jni_get_method_id (env, &err, klass, "setFocusMode", "(Ljava/lang/String;)V"); android_hardware_camera_parameters.setPreviewFormat = gst_amc_jni_get_method_id (env, &err, klass, "setPreviewFormat", "(I)V"); android_hardware_camera_parameters.setPreviewFpsRange = gst_amc_jni_get_method_id (env, &err, klass, "setPreviewFpsRange", "(II)V"); android_hardware_camera_parameters.setPreviewSize = gst_amc_jni_get_method_id (env, &err, klass, "setPreviewSize", "(II)V"); android_hardware_camera_parameters.setSceneMode = gst_amc_jni_get_method_id (env, &err, klass, "setSceneMode", "(Ljava/lang/String;)V"); android_hardware_camera_parameters.setWhiteBalance = gst_amc_jni_get_method_id (env, &err, klass, "setWhiteBalance", "(Ljava/lang/String;)V"); android_hardware_camera_parameters.setVideoStabilization = gst_amc_jni_get_method_id (env, &err, klass, "setVideoStabilization", "(Z)V"); android_hardware_camera_parameters.setZoom = gst_amc_jni_get_method_id (env, &err, klass, "setZoom", "(I)V"); android_hardware_camera_parameters.unflatten = gst_amc_jni_get_method_id (env, &err, klass, "unflatten", "(Ljava/lang/String;)V"); fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "WHITE_BALANCE_AUTO", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.WHITE_BALANCE_AUTO)) goto failed; Parameters_WHITE_BALANCE_AUTO = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.WHITE_BALANCE_AUTO, NULL); { jobject local = android_hardware_camera_parameters.WHITE_BALANCE_AUTO; android_hardware_camera_parameters.WHITE_BALANCE_AUTO = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "WHITE_BALANCE_INCANDESCENT", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT)) goto failed; Parameters_WHITE_BALANCE_INCANDESCENT = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT, NULL); { jobject local = android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT; android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "WHITE_BALANCE_FLUORESCENT", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT)) goto failed; Parameters_WHITE_BALANCE_FLUORESCENT = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT, NULL); { jobject local = android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT; android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "WHITE_BALANCE_WARM_FLUORESCENT", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT)) goto failed; Parameters_WHITE_BALANCE_WARM_FLUORESCENT = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT, NULL); { jobject local = android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT; android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "WHITE_BALANCE_DAYLIGHT", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT)) goto failed; Parameters_WHITE_BALANCE_DAYLIGHT = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT, NULL); { jobject local = android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT; android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "WHITE_BALANCE_CLOUDY_DAYLIGHT", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT)) goto failed; Parameters_WHITE_BALANCE_CLOUDY_DAYLIGHT = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT, NULL); { jobject local = android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT; android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "WHITE_BALANCE_TWILIGHT", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT)) goto failed; Parameters_WHITE_BALANCE_TWILIGHT = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT, NULL); { jobject local = android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT; android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "WHITE_BALANCE_SHADE", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.WHITE_BALANCE_SHADE)) goto failed; Parameters_WHITE_BALANCE_SHADE = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.WHITE_BALANCE_SHADE, NULL); { jobject local = android_hardware_camera_parameters.WHITE_BALANCE_SHADE; android_hardware_camera_parameters.WHITE_BALANCE_SHADE = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "EFFECT_NONE", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.EFFECT_NONE)) goto failed; Parameters_EFFECT_NONE = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.EFFECT_NONE, NULL); { jobject local = android_hardware_camera_parameters.EFFECT_NONE; android_hardware_camera_parameters.EFFECT_NONE = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "EFFECT_MONO", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.EFFECT_MONO)) goto failed; Parameters_EFFECT_MONO = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.EFFECT_MONO, NULL); { jobject local = android_hardware_camera_parameters.EFFECT_MONO; android_hardware_camera_parameters.EFFECT_MONO = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "EFFECT_NEGATIVE", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.EFFECT_NEGATIVE)) goto failed; Parameters_EFFECT_NEGATIVE = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.EFFECT_NEGATIVE, NULL); { jobject local = android_hardware_camera_parameters.EFFECT_NEGATIVE; android_hardware_camera_parameters.EFFECT_NEGATIVE = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "EFFECT_SOLARIZE", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.EFFECT_SOLARIZE)) goto failed; Parameters_EFFECT_SOLARIZE = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.EFFECT_SOLARIZE, NULL); { jobject local = android_hardware_camera_parameters.EFFECT_SOLARIZE; android_hardware_camera_parameters.EFFECT_SOLARIZE = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "EFFECT_SEPIA", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.EFFECT_SEPIA)) goto failed; Parameters_EFFECT_SEPIA = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.EFFECT_SEPIA, NULL); { jobject local = android_hardware_camera_parameters.EFFECT_SEPIA; android_hardware_camera_parameters.EFFECT_SEPIA = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "EFFECT_POSTERIZE", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.EFFECT_POSTERIZE)) goto failed; Parameters_EFFECT_POSTERIZE = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.EFFECT_POSTERIZE, NULL); { jobject local = android_hardware_camera_parameters.EFFECT_POSTERIZE; android_hardware_camera_parameters.EFFECT_POSTERIZE = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "EFFECT_WHITEBOARD", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.EFFECT_WHITEBOARD)) goto failed; Parameters_EFFECT_WHITEBOARD = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.EFFECT_WHITEBOARD, NULL); { jobject local = android_hardware_camera_parameters.EFFECT_WHITEBOARD; android_hardware_camera_parameters.EFFECT_WHITEBOARD = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "EFFECT_BLACKBOARD", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.EFFECT_BLACKBOARD)) goto failed; Parameters_EFFECT_BLACKBOARD = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.EFFECT_BLACKBOARD, NULL); { jobject local = android_hardware_camera_parameters.EFFECT_BLACKBOARD; android_hardware_camera_parameters.EFFECT_BLACKBOARD = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "EFFECT_AQUA", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.EFFECT_AQUA)) goto failed; Parameters_EFFECT_AQUA = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.EFFECT_AQUA, NULL); { jobject local = android_hardware_camera_parameters.EFFECT_AQUA; android_hardware_camera_parameters.EFFECT_AQUA = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "ANTIBANDING_AUTO", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.ANTIBANDING_AUTO)) goto failed; Parameters_ANTIBANDING_AUTO = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.ANTIBANDING_AUTO, NULL); { jobject local = android_hardware_camera_parameters.ANTIBANDING_AUTO; android_hardware_camera_parameters.ANTIBANDING_AUTO = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "ANTIBANDING_50HZ", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.ANTIBANDING_50HZ)) goto failed; Parameters_ANTIBANDING_50HZ = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.ANTIBANDING_50HZ, NULL); { jobject local = android_hardware_camera_parameters.ANTIBANDING_50HZ; android_hardware_camera_parameters.ANTIBANDING_50HZ = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "ANTIBANDING_60HZ", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.ANTIBANDING_60HZ)) goto failed; Parameters_ANTIBANDING_60HZ = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.ANTIBANDING_60HZ, NULL); { jobject local = android_hardware_camera_parameters.ANTIBANDING_60HZ; android_hardware_camera_parameters.ANTIBANDING_60HZ = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "ANTIBANDING_OFF", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.ANTIBANDING_OFF)) goto failed; Parameters_ANTIBANDING_OFF = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.ANTIBANDING_OFF, NULL); { jobject local = android_hardware_camera_parameters.ANTIBANDING_OFF; android_hardware_camera_parameters.ANTIBANDING_OFF = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "FLASH_MODE_OFF", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.FLASH_MODE_OFF)) goto failed; Parameters_FLASH_MODE_OFF = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.FLASH_MODE_OFF, NULL); { jobject local = android_hardware_camera_parameters.FLASH_MODE_OFF; android_hardware_camera_parameters.FLASH_MODE_OFF = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "FLASH_MODE_AUTO", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.FLASH_MODE_AUTO)) goto failed; Parameters_FLASH_MODE_AUTO = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.FLASH_MODE_AUTO, NULL); { jobject local = android_hardware_camera_parameters.FLASH_MODE_AUTO; android_hardware_camera_parameters.FLASH_MODE_AUTO = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "FLASH_MODE_ON", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.FLASH_MODE_ON)) goto failed; Parameters_FLASH_MODE_ON = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.FLASH_MODE_ON, NULL); { jobject local = android_hardware_camera_parameters.FLASH_MODE_ON; android_hardware_camera_parameters.FLASH_MODE_ON = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "FLASH_MODE_RED_EYE", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.FLASH_MODE_RED_EYE)) goto failed; Parameters_FLASH_MODE_RED_EYE = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.FLASH_MODE_RED_EYE, NULL); { jobject local = android_hardware_camera_parameters.FLASH_MODE_RED_EYE; android_hardware_camera_parameters.FLASH_MODE_RED_EYE = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "FLASH_MODE_TORCH", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.FLASH_MODE_TORCH)) goto failed; Parameters_FLASH_MODE_TORCH = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.FLASH_MODE_TORCH, NULL); { jobject local = android_hardware_camera_parameters.FLASH_MODE_TORCH; android_hardware_camera_parameters.FLASH_MODE_TORCH = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_AUTO", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.SCENE_MODE_AUTO)) goto failed; Parameters_SCENE_MODE_AUTO = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_AUTO, NULL); { jobject local = android_hardware_camera_parameters.SCENE_MODE_AUTO; android_hardware_camera_parameters.SCENE_MODE_AUTO = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_ACTION", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.SCENE_MODE_ACTION)) goto failed; Parameters_SCENE_MODE_ACTION = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_ACTION, NULL); { jobject local = android_hardware_camera_parameters.SCENE_MODE_ACTION; android_hardware_camera_parameters.SCENE_MODE_ACTION = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_PORTRAIT", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.SCENE_MODE_PORTRAIT)) goto failed; Parameters_SCENE_MODE_PORTRAIT = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_PORTRAIT, NULL); { jobject local = android_hardware_camera_parameters.SCENE_MODE_PORTRAIT; android_hardware_camera_parameters.SCENE_MODE_PORTRAIT = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_LANDSCAPE", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE)) goto failed; Parameters_SCENE_MODE_LANDSCAPE = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE, NULL); { jobject local = android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE; android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_NIGHT", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.SCENE_MODE_NIGHT)) goto failed; Parameters_SCENE_MODE_NIGHT = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_NIGHT, NULL); { jobject local = android_hardware_camera_parameters.SCENE_MODE_NIGHT; android_hardware_camera_parameters.SCENE_MODE_NIGHT = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_NIGHT_PORTRAIT", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT)) goto failed; Parameters_SCENE_MODE_NIGHT_PORTRAIT = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT, NULL); { jobject local = android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT; android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_THEATRE", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.SCENE_MODE_THEATRE)) goto failed; Parameters_SCENE_MODE_THEATRE = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_THEATRE, NULL); { jobject local = android_hardware_camera_parameters.SCENE_MODE_THEATRE; android_hardware_camera_parameters.SCENE_MODE_THEATRE = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_BEACH", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.SCENE_MODE_BEACH)) goto failed; Parameters_SCENE_MODE_BEACH = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_BEACH, NULL); { jobject local = android_hardware_camera_parameters.SCENE_MODE_BEACH; android_hardware_camera_parameters.SCENE_MODE_BEACH = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_SNOW", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.SCENE_MODE_SNOW)) goto failed; Parameters_SCENE_MODE_SNOW = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_SNOW, NULL); { jobject local = android_hardware_camera_parameters.SCENE_MODE_SNOW; android_hardware_camera_parameters.SCENE_MODE_SNOW = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_SUNSET", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.SCENE_MODE_SUNSET)) goto failed; Parameters_SCENE_MODE_SUNSET = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_SUNSET, NULL); { jobject local = android_hardware_camera_parameters.SCENE_MODE_SUNSET; android_hardware_camera_parameters.SCENE_MODE_SUNSET = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_STEADYPHOTO", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO)) goto failed; Parameters_SCENE_MODE_STEADYPHOTO = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO, NULL); { jobject local = android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO; android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_FIREWORKS", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.SCENE_MODE_FIREWORKS)) goto failed; Parameters_SCENE_MODE_FIREWORKS = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_FIREWORKS, NULL); { jobject local = android_hardware_camera_parameters.SCENE_MODE_FIREWORKS; android_hardware_camera_parameters.SCENE_MODE_FIREWORKS = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_SPORTS", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.SCENE_MODE_SPORTS)) goto failed; Parameters_SCENE_MODE_SPORTS = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_SPORTS, NULL); { jobject local = android_hardware_camera_parameters.SCENE_MODE_SPORTS; android_hardware_camera_parameters.SCENE_MODE_SPORTS = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_PARTY", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.SCENE_MODE_PARTY)) goto failed; Parameters_SCENE_MODE_PARTY = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_PARTY, NULL); { jobject local = android_hardware_camera_parameters.SCENE_MODE_PARTY; android_hardware_camera_parameters.SCENE_MODE_PARTY = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_CANDLELIGHT", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT)) goto failed; Parameters_SCENE_MODE_CANDLELIGHT = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT, NULL); { jobject local = android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT; android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "SCENE_MODE_BARCODE", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.SCENE_MODE_BARCODE)) goto failed; Parameters_SCENE_MODE_BARCODE = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_BARCODE, NULL); { jobject local = android_hardware_camera_parameters.SCENE_MODE_BARCODE; android_hardware_camera_parameters.SCENE_MODE_BARCODE = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "FOCUS_MODE_AUTO", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.FOCUS_MODE_AUTO)) goto failed; Parameters_FOCUS_MODE_AUTO = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.FOCUS_MODE_AUTO, NULL); { jobject local = android_hardware_camera_parameters.FOCUS_MODE_AUTO; android_hardware_camera_parameters.FOCUS_MODE_AUTO = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "FOCUS_MODE_INFINITY", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.FOCUS_MODE_INFINITY)) goto failed; Parameters_FOCUS_MODE_INFINITY = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.FOCUS_MODE_INFINITY, NULL); { jobject local = android_hardware_camera_parameters.FOCUS_MODE_INFINITY; android_hardware_camera_parameters.FOCUS_MODE_INFINITY = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "FOCUS_MODE_MACRO", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.FOCUS_MODE_MACRO)) goto failed; Parameters_FOCUS_MODE_MACRO = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.FOCUS_MODE_MACRO, NULL); { jobject local = android_hardware_camera_parameters.FOCUS_MODE_MACRO; android_hardware_camera_parameters.FOCUS_MODE_MACRO = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "FOCUS_MODE_FIXED", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.FOCUS_MODE_FIXED)) goto failed; Parameters_FOCUS_MODE_FIXED = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.FOCUS_MODE_FIXED, NULL); { jobject local = android_hardware_camera_parameters.FOCUS_MODE_FIXED; android_hardware_camera_parameters.FOCUS_MODE_FIXED = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "FOCUS_MODE_EDOF", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.FOCUS_MODE_EDOF)) goto failed; Parameters_FOCUS_MODE_EDOF = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.FOCUS_MODE_EDOF, NULL); { jobject local = android_hardware_camera_parameters.FOCUS_MODE_EDOF; android_hardware_camera_parameters.FOCUS_MODE_EDOF = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "FOCUS_MODE_CONTINUOUS_VIDEO", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) goto failed; Parameters_FOCUS_MODE_CONTINUOUS_VIDEO = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO, NULL); { jobject local = android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO; android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } fieldID = gst_amc_jni_get_static_field_id (env, &err, klass, "FOCUS_MODE_CONTINUOUS_PICTURE", "Ljava/lang/String;"); if (!fieldID) goto failed; if (!gst_amc_jni_get_static_object_field (env, &err, klass, fieldID, &android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) goto failed; Parameters_FOCUS_MODE_CONTINUOUS_PICTURE = (*env)->GetStringUTFChars (env, android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE, NULL); { jobject local = android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE; android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE = (*env)->NewGlobalRef (env, local); (*env)->DeleteLocalRef (env, local); } /* java.lang.String */ klass = java_lang_string.klass = gst_amc_jni_get_class (env, &err, "java/lang/String"); java_lang_string.equals = gst_amc_jni_get_method_id (env, &err, klass, "equals", "(Ljava/lang/Object;)Z"); /* java.util.List */ klass = java_util_list.klass = gst_amc_jni_get_class (env, &err, "java/util/List"); java_util_list.iterator = gst_amc_jni_get_method_id (env, &err, klass, "iterator", "()Ljava/util/Iterator;"); /* java.util.Iterator */ klass = java_util_iterator.klass = gst_amc_jni_get_class (env, &err, "java/util/Iterator"); java_util_iterator.hasNext = gst_amc_jni_get_method_id (env, &err, klass, "hasNext", "()Z"); java_util_iterator.next = gst_amc_jni_get_method_id (env, &err, klass, "next", "()Ljava/lang/Object;"); /* java.lang.Integer */ klass = java_lang_integer.klass = gst_amc_jni_get_class (env, &err, "java/lang/Integer"); java_lang_integer.intValue = gst_amc_jni_get_method_id (env, &err, klass, "intValue", "()I"); if (!org_freedesktop_gstreamer_androidmedia_gstahccallback.klass) { org_freedesktop_gstreamer_androidmedia_gstahccallback.klass = gst_amc_jni_get_class (env, &err, "org/freedesktop/gstreamer/androidmedia/GstAhcCallback"); } if (!org_freedesktop_gstreamer_androidmedia_gstahccallback.klass) goto failed; org_freedesktop_gstreamer_androidmedia_gstahccallback.constructor = gst_amc_jni_get_method_id (env, &err, org_freedesktop_gstreamer_androidmedia_gstahccallback.klass, "", "(JJ)V"); if ((*env)->RegisterNatives (env, org_freedesktop_gstreamer_androidmedia_gstahccallback.klass, native_methods, G_N_ELEMENTS (native_methods))) { GST_ERROR ("Failed to register native methods for GstAhcCallback"); return FALSE; } return TRUE; failed: if (err) { GST_ERROR ("Failed to initialize android.hardware.Camera classes: %s", err->message); g_clear_error (&err); } return FALSE; } gboolean gst_android_hardware_camera_init (void) { GST_DEBUG_CATEGORY_INIT (ahc_debug, "ahc", 0, "Android Gstreamer Hardware Camera"); if (!_init_classes ()) { gst_android_hardware_camera_deinit (); return FALSE; } return TRUE; } void gst_android_hardware_camera_deinit (void) { JNIEnv *env = gst_amc_jni_get_env (); if (android_hardware_camera.klass) (*env)->DeleteGlobalRef (env, android_hardware_camera.klass); android_hardware_camera.klass = NULL; if (android_hardware_camera_camerainfo.klass) (*env)->DeleteGlobalRef (env, android_hardware_camera_camerainfo.klass); android_hardware_camera_camerainfo.klass = NULL; if (android_hardware_camera_size.klass) (*env)->DeleteGlobalRef (env, android_hardware_camera_size.klass); android_hardware_camera_size.klass = NULL; if (android_hardware_camera_parameters.klass) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.klass); android_hardware_camera_parameters.klass = NULL; if (Parameters_WHITE_BALANCE_AUTO) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.WHITE_BALANCE_AUTO, Parameters_WHITE_BALANCE_AUTO); Parameters_WHITE_BALANCE_AUTO = NULL; if (android_hardware_camera_parameters.WHITE_BALANCE_AUTO) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.WHITE_BALANCE_AUTO); android_hardware_camera_parameters.WHITE_BALANCE_AUTO = NULL; if (Parameters_WHITE_BALANCE_INCANDESCENT) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT, Parameters_WHITE_BALANCE_INCANDESCENT); Parameters_WHITE_BALANCE_INCANDESCENT = NULL; if (android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT); android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT = NULL; if (Parameters_WHITE_BALANCE_FLUORESCENT) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT, Parameters_WHITE_BALANCE_FLUORESCENT); Parameters_WHITE_BALANCE_FLUORESCENT = NULL; if (android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT); android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT = NULL; if (Parameters_WHITE_BALANCE_WARM_FLUORESCENT) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT, Parameters_WHITE_BALANCE_WARM_FLUORESCENT); Parameters_WHITE_BALANCE_WARM_FLUORESCENT = NULL; if (android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT); android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT = NULL; if (Parameters_WHITE_BALANCE_DAYLIGHT) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT, Parameters_WHITE_BALANCE_DAYLIGHT); Parameters_WHITE_BALANCE_DAYLIGHT = NULL; if (android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT); android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT = NULL; if (Parameters_WHITE_BALANCE_CLOUDY_DAYLIGHT) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT, Parameters_WHITE_BALANCE_CLOUDY_DAYLIGHT); Parameters_WHITE_BALANCE_CLOUDY_DAYLIGHT = NULL; if (android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT); android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT = NULL; if (Parameters_WHITE_BALANCE_TWILIGHT) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT, Parameters_WHITE_BALANCE_TWILIGHT); Parameters_WHITE_BALANCE_TWILIGHT = NULL; if (android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT); android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT = NULL; if (Parameters_WHITE_BALANCE_SHADE) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.WHITE_BALANCE_SHADE, Parameters_WHITE_BALANCE_SHADE); Parameters_WHITE_BALANCE_SHADE = NULL; if (android_hardware_camera_parameters.WHITE_BALANCE_SHADE) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.WHITE_BALANCE_SHADE); android_hardware_camera_parameters.WHITE_BALANCE_SHADE = NULL; if (Parameters_EFFECT_NONE) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.EFFECT_NONE, Parameters_EFFECT_NONE); Parameters_EFFECT_NONE = NULL; if (android_hardware_camera_parameters.EFFECT_NONE) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.EFFECT_NONE); android_hardware_camera_parameters.EFFECT_NONE = NULL; if (Parameters_EFFECT_MONO) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.EFFECT_MONO, Parameters_EFFECT_MONO); Parameters_EFFECT_MONO = NULL; if (android_hardware_camera_parameters.EFFECT_MONO) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.EFFECT_MONO); android_hardware_camera_parameters.EFFECT_MONO = NULL; if (Parameters_EFFECT_NEGATIVE) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.EFFECT_NEGATIVE, Parameters_EFFECT_NEGATIVE); Parameters_EFFECT_NEGATIVE = NULL; if (android_hardware_camera_parameters.EFFECT_NEGATIVE) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.EFFECT_NEGATIVE); android_hardware_camera_parameters.EFFECT_NEGATIVE = NULL; if (Parameters_EFFECT_SOLARIZE) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.EFFECT_SOLARIZE, Parameters_EFFECT_SOLARIZE); Parameters_EFFECT_SOLARIZE = NULL; if (android_hardware_camera_parameters.EFFECT_SOLARIZE) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.EFFECT_SOLARIZE); android_hardware_camera_parameters.EFFECT_SOLARIZE = NULL; if (Parameters_EFFECT_SEPIA) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.EFFECT_SEPIA, Parameters_EFFECT_SEPIA); Parameters_EFFECT_SEPIA = NULL; if (android_hardware_camera_parameters.EFFECT_SEPIA) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.EFFECT_SEPIA); android_hardware_camera_parameters.EFFECT_SEPIA = NULL; if (Parameters_EFFECT_POSTERIZE) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.EFFECT_POSTERIZE, Parameters_EFFECT_POSTERIZE); Parameters_EFFECT_POSTERIZE = NULL; if (android_hardware_camera_parameters.EFFECT_POSTERIZE) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.EFFECT_POSTERIZE); android_hardware_camera_parameters.EFFECT_POSTERIZE = NULL; if (Parameters_EFFECT_WHITEBOARD) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.EFFECT_WHITEBOARD, Parameters_EFFECT_WHITEBOARD); Parameters_EFFECT_WHITEBOARD = NULL; if (android_hardware_camera_parameters.EFFECT_WHITEBOARD) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.EFFECT_WHITEBOARD); android_hardware_camera_parameters.EFFECT_WHITEBOARD = NULL; if (Parameters_EFFECT_BLACKBOARD) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.EFFECT_BLACKBOARD, Parameters_EFFECT_BLACKBOARD); Parameters_EFFECT_BLACKBOARD = NULL; if (android_hardware_camera_parameters.EFFECT_BLACKBOARD) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.EFFECT_BLACKBOARD); android_hardware_camera_parameters.EFFECT_BLACKBOARD = NULL; if (Parameters_EFFECT_AQUA) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.EFFECT_AQUA, Parameters_EFFECT_AQUA); Parameters_EFFECT_AQUA = NULL; if (android_hardware_camera_parameters.EFFECT_AQUA) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.EFFECT_AQUA); android_hardware_camera_parameters.EFFECT_AQUA = NULL; if (Parameters_ANTIBANDING_AUTO) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.ANTIBANDING_AUTO, Parameters_ANTIBANDING_AUTO); Parameters_ANTIBANDING_AUTO = NULL; if (android_hardware_camera_parameters.ANTIBANDING_AUTO) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.ANTIBANDING_AUTO); android_hardware_camera_parameters.ANTIBANDING_AUTO = NULL; if (Parameters_ANTIBANDING_50HZ) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.ANTIBANDING_50HZ, Parameters_ANTIBANDING_50HZ); Parameters_ANTIBANDING_50HZ = NULL; if (android_hardware_camera_parameters.ANTIBANDING_50HZ) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.ANTIBANDING_50HZ); android_hardware_camera_parameters.ANTIBANDING_50HZ = NULL; if (Parameters_ANTIBANDING_60HZ) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.ANTIBANDING_60HZ, Parameters_ANTIBANDING_60HZ); Parameters_ANTIBANDING_60HZ = NULL; if (android_hardware_camera_parameters.ANTIBANDING_60HZ) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.ANTIBANDING_60HZ); android_hardware_camera_parameters.ANTIBANDING_60HZ = NULL; if (Parameters_ANTIBANDING_OFF) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.ANTIBANDING_OFF, Parameters_ANTIBANDING_OFF); Parameters_ANTIBANDING_OFF = NULL; if (android_hardware_camera_parameters.ANTIBANDING_OFF) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.ANTIBANDING_OFF); android_hardware_camera_parameters.ANTIBANDING_OFF = NULL; if (Parameters_FLASH_MODE_OFF) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.FLASH_MODE_OFF, Parameters_FLASH_MODE_OFF); Parameters_FLASH_MODE_OFF = NULL; if (android_hardware_camera_parameters.FLASH_MODE_OFF) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.FLASH_MODE_OFF); android_hardware_camera_parameters.FLASH_MODE_OFF = NULL; if (Parameters_FLASH_MODE_AUTO) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.FLASH_MODE_AUTO, Parameters_FLASH_MODE_AUTO); Parameters_FLASH_MODE_AUTO = NULL; if (android_hardware_camera_parameters.FLASH_MODE_AUTO) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.FLASH_MODE_AUTO); android_hardware_camera_parameters.FLASH_MODE_AUTO = NULL; if (Parameters_FLASH_MODE_ON) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.FLASH_MODE_ON, Parameters_FLASH_MODE_ON); Parameters_FLASH_MODE_ON = NULL; if (android_hardware_camera_parameters.FLASH_MODE_ON) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.FLASH_MODE_ON); android_hardware_camera_parameters.FLASH_MODE_ON = NULL; if (Parameters_FLASH_MODE_RED_EYE) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.FLASH_MODE_RED_EYE, Parameters_FLASH_MODE_RED_EYE); Parameters_FLASH_MODE_RED_EYE = NULL; if (android_hardware_camera_parameters.FLASH_MODE_RED_EYE) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.FLASH_MODE_RED_EYE); android_hardware_camera_parameters.FLASH_MODE_RED_EYE = NULL; if (Parameters_FLASH_MODE_TORCH) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.FLASH_MODE_TORCH, Parameters_FLASH_MODE_TORCH); Parameters_FLASH_MODE_TORCH = NULL; if (android_hardware_camera_parameters.FLASH_MODE_TORCH) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.FLASH_MODE_TORCH); android_hardware_camera_parameters.FLASH_MODE_TORCH = NULL; if (Parameters_SCENE_MODE_AUTO) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_AUTO, Parameters_SCENE_MODE_AUTO); Parameters_SCENE_MODE_AUTO = NULL; if (android_hardware_camera_parameters.SCENE_MODE_AUTO) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.SCENE_MODE_AUTO); android_hardware_camera_parameters.SCENE_MODE_AUTO = NULL; if (Parameters_SCENE_MODE_ACTION) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_ACTION, Parameters_SCENE_MODE_ACTION); Parameters_SCENE_MODE_ACTION = NULL; if (android_hardware_camera_parameters.SCENE_MODE_ACTION) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.SCENE_MODE_ACTION); android_hardware_camera_parameters.SCENE_MODE_ACTION = NULL; if (Parameters_SCENE_MODE_PORTRAIT) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_PORTRAIT, Parameters_SCENE_MODE_PORTRAIT); Parameters_SCENE_MODE_PORTRAIT = NULL; if (android_hardware_camera_parameters.SCENE_MODE_PORTRAIT) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.SCENE_MODE_PORTRAIT); android_hardware_camera_parameters.SCENE_MODE_PORTRAIT = NULL; if (Parameters_SCENE_MODE_LANDSCAPE) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE, Parameters_SCENE_MODE_LANDSCAPE); Parameters_SCENE_MODE_LANDSCAPE = NULL; if (android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE); android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE = NULL; if (Parameters_SCENE_MODE_NIGHT) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_NIGHT, Parameters_SCENE_MODE_NIGHT); Parameters_SCENE_MODE_NIGHT = NULL; if (android_hardware_camera_parameters.SCENE_MODE_NIGHT) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.SCENE_MODE_NIGHT); android_hardware_camera_parameters.SCENE_MODE_NIGHT = NULL; if (Parameters_SCENE_MODE_NIGHT_PORTRAIT) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT, Parameters_SCENE_MODE_NIGHT_PORTRAIT); Parameters_SCENE_MODE_NIGHT_PORTRAIT = NULL; if (android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT); android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT = NULL; if (Parameters_SCENE_MODE_THEATRE) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_THEATRE, Parameters_SCENE_MODE_THEATRE); Parameters_SCENE_MODE_THEATRE = NULL; if (android_hardware_camera_parameters.SCENE_MODE_THEATRE) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.SCENE_MODE_THEATRE); android_hardware_camera_parameters.SCENE_MODE_THEATRE = NULL; if (Parameters_SCENE_MODE_BEACH) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_BEACH, Parameters_SCENE_MODE_BEACH); Parameters_SCENE_MODE_BEACH = NULL; if (android_hardware_camera_parameters.SCENE_MODE_BEACH) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.SCENE_MODE_BEACH); android_hardware_camera_parameters.SCENE_MODE_BEACH = NULL; if (Parameters_SCENE_MODE_SNOW) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_SNOW, Parameters_SCENE_MODE_SNOW); Parameters_SCENE_MODE_SNOW = NULL; if (android_hardware_camera_parameters.SCENE_MODE_SNOW) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.SCENE_MODE_SNOW); android_hardware_camera_parameters.SCENE_MODE_SNOW = NULL; if (Parameters_SCENE_MODE_SUNSET) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_SUNSET, Parameters_SCENE_MODE_SUNSET); Parameters_SCENE_MODE_SUNSET = NULL; if (android_hardware_camera_parameters.SCENE_MODE_SUNSET) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.SCENE_MODE_SUNSET); android_hardware_camera_parameters.SCENE_MODE_SUNSET = NULL; if (Parameters_SCENE_MODE_STEADYPHOTO) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO, Parameters_SCENE_MODE_STEADYPHOTO); Parameters_SCENE_MODE_STEADYPHOTO = NULL; if (android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO); android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO = NULL; if (Parameters_SCENE_MODE_FIREWORKS) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_FIREWORKS, Parameters_SCENE_MODE_FIREWORKS); Parameters_SCENE_MODE_FIREWORKS = NULL; if (android_hardware_camera_parameters.SCENE_MODE_FIREWORKS) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.SCENE_MODE_FIREWORKS); android_hardware_camera_parameters.SCENE_MODE_FIREWORKS = NULL; if (Parameters_SCENE_MODE_SPORTS) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_SPORTS, Parameters_SCENE_MODE_SPORTS); Parameters_SCENE_MODE_SPORTS = NULL; if (android_hardware_camera_parameters.SCENE_MODE_SPORTS) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.SCENE_MODE_SPORTS); android_hardware_camera_parameters.SCENE_MODE_SPORTS = NULL; if (Parameters_SCENE_MODE_PARTY) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_PARTY, Parameters_SCENE_MODE_PARTY); Parameters_SCENE_MODE_PARTY = NULL; if (android_hardware_camera_parameters.SCENE_MODE_PARTY) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.SCENE_MODE_PARTY); android_hardware_camera_parameters.SCENE_MODE_PARTY = NULL; if (Parameters_SCENE_MODE_CANDLELIGHT) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT, Parameters_SCENE_MODE_CANDLELIGHT); Parameters_SCENE_MODE_CANDLELIGHT = NULL; if (android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT); android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT = NULL; if (Parameters_SCENE_MODE_BARCODE) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.SCENE_MODE_BARCODE, Parameters_SCENE_MODE_BARCODE); Parameters_SCENE_MODE_BARCODE = NULL; if (android_hardware_camera_parameters.SCENE_MODE_BARCODE) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.SCENE_MODE_BARCODE); android_hardware_camera_parameters.SCENE_MODE_BARCODE = NULL; if (Parameters_FOCUS_MODE_AUTO) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.FOCUS_MODE_AUTO, Parameters_FOCUS_MODE_AUTO); Parameters_FOCUS_MODE_AUTO = NULL; if (android_hardware_camera_parameters.FOCUS_MODE_AUTO) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.FOCUS_MODE_AUTO); android_hardware_camera_parameters.FOCUS_MODE_AUTO = NULL; if (Parameters_FOCUS_MODE_INFINITY) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.FOCUS_MODE_INFINITY, Parameters_FOCUS_MODE_INFINITY); Parameters_FOCUS_MODE_INFINITY = NULL; if (android_hardware_camera_parameters.FOCUS_MODE_INFINITY) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.FOCUS_MODE_INFINITY); android_hardware_camera_parameters.FOCUS_MODE_INFINITY = NULL; if (Parameters_FOCUS_MODE_MACRO) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.FOCUS_MODE_MACRO, Parameters_FOCUS_MODE_MACRO); Parameters_FOCUS_MODE_MACRO = NULL; if (android_hardware_camera_parameters.FOCUS_MODE_MACRO) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.FOCUS_MODE_MACRO); android_hardware_camera_parameters.FOCUS_MODE_MACRO = NULL; if (Parameters_FOCUS_MODE_FIXED) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.FOCUS_MODE_FIXED, Parameters_FOCUS_MODE_FIXED); Parameters_FOCUS_MODE_FIXED = NULL; if (android_hardware_camera_parameters.FOCUS_MODE_FIXED) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.FOCUS_MODE_FIXED); android_hardware_camera_parameters.FOCUS_MODE_FIXED = NULL; if (Parameters_FOCUS_MODE_EDOF) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.FOCUS_MODE_EDOF, Parameters_FOCUS_MODE_EDOF); Parameters_FOCUS_MODE_EDOF = NULL; if (android_hardware_camera_parameters.FOCUS_MODE_EDOF) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.FOCUS_MODE_EDOF); android_hardware_camera_parameters.FOCUS_MODE_EDOF = NULL; if (Parameters_FOCUS_MODE_CONTINUOUS_VIDEO) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO, Parameters_FOCUS_MODE_CONTINUOUS_VIDEO); Parameters_FOCUS_MODE_CONTINUOUS_VIDEO = NULL; if (android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO); android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO = NULL; if (Parameters_FOCUS_MODE_CONTINUOUS_PICTURE) (*env)->ReleaseStringUTFChars (env, android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE, Parameters_FOCUS_MODE_CONTINUOUS_PICTURE); Parameters_FOCUS_MODE_CONTINUOUS_PICTURE = NULL; if (android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE) (*env)->DeleteGlobalRef (env, android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE); android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE = NULL; if (java_lang_string.klass) (*env)->DeleteGlobalRef (env, java_lang_string.klass); java_lang_string.klass = NULL; if (java_util_list.klass) (*env)->DeleteGlobalRef (env, java_util_list.klass); java_util_list.klass = NULL; if (java_util_iterator.klass) (*env)->DeleteGlobalRef (env, java_util_iterator.klass); java_util_iterator.klass = NULL; if (java_lang_integer.klass) (*env)->DeleteGlobalRef (env, java_lang_integer.klass); java_lang_integer.klass = NULL; if (org_freedesktop_gstreamer_androidmedia_gstahccallback.klass) { (*env)->UnregisterNatives (env, org_freedesktop_gstreamer_androidmedia_gstahccallback.klass); (*env)->DeleteGlobalRef (env, org_freedesktop_gstreamer_androidmedia_gstahccallback.klass); } org_freedesktop_gstreamer_androidmedia_gstahccallback.klass = NULL; } /* android.hardware.Camera */ #define AHC_CALL(error_statement, type, method, ...) \ GST_DVM_CALL (error_statement, self->object, type, android_hardware_camera, \ method, ## __VA_ARGS__); #define AHC_STATIC_CALL(error_statement, type, method, ...) \ GST_DVM_STATIC_CALL (error_statement, type, android_hardware_camera, \ method, ## __VA_ARGS__); void gst_ah_camera_add_callback_buffer (GstAHCamera * self, jbyteArray buffer) { JNIEnv *env = gst_amc_jni_get_env (); GST_DEBUG ("add callback_buffer %p", buffer); AHC_CALL (, Void, addCallbackBuffer, buffer); } gboolean gst_ah_camera_auto_focus (GstAHCamera * self, GstAHCAutoFocusCallback cb, gpointer user_data) { JNIEnv *env = gst_amc_jni_get_env (); jobject object = NULL; gboolean ret = FALSE; if (cb) { object = (*env)->NewObject (env, org_freedesktop_gstreamer_androidmedia_gstahccallback.klass, org_freedesktop_gstreamer_androidmedia_gstahccallback.constructor, *((jlong *) & cb), *((jlong *) & user_data)); if (!object) { GST_ERROR ("Failed to create callback object"); (*env)->ExceptionClear (env); goto done; } } AHC_CALL (goto done, Void, autoFocus, object); ret = TRUE; done: if (object) (*env)->DeleteLocalRef (env, object); return ret; } gboolean gst_ah_camera_cancel_auto_focus (GstAHCamera * self) { JNIEnv *env = gst_amc_jni_get_env (); AHC_CALL (return FALSE, Void, cancelAutoFocus); return TRUE; } gboolean gst_ah_camera_get_camera_info (gint camera_id, GstAHCCameraInfo * camera_info) { JNIEnv *env = gst_amc_jni_get_env (); jobject jcamera_info = NULL; gboolean ret = FALSE; jcamera_info = (*env)->NewObject (env, android_hardware_camera_camerainfo.klass, android_hardware_camera_camerainfo.constructor); if (!jcamera_info) { GST_ERROR ("Failed to call Java method"); (*env)->ExceptionClear (env); goto done; } AHC_STATIC_CALL (goto done, Void, getCameraInfo, camera_id, jcamera_info); camera_info->facing = (*env)->GetIntField (env, jcamera_info, android_hardware_camera_camerainfo.facing); if ((*env)->ExceptionCheck (env)) { GST_ERROR ("Failed to get CameraInfo.facing field"); (*env)->ExceptionClear (env); goto done; } camera_info->orientation = (*env)->GetIntField (env, jcamera_info, android_hardware_camera_camerainfo.orientation); if ((*env)->ExceptionCheck (env)) { GST_ERROR ("Failed to get CameraInfo.orientation field"); (*env)->ExceptionClear (env); goto done; } ret = TRUE; done: if (jcamera_info) (*env)->DeleteLocalRef (env, jcamera_info); return ret; } gint gst_ah_camera_get_number_of_cameras (void) { JNIEnv *env = gst_amc_jni_get_env (); gint num_cameras; num_cameras = AHC_STATIC_CALL (return -1, Int, getNumberOfCameras); return num_cameras; } GstAHCParameters * gst_ah_camera_get_parameters (GstAHCamera * self) { JNIEnv *env = gst_amc_jni_get_env (); jobject object = NULL; GstAHCParameters *params = NULL; object = AHC_CALL (return NULL, Object, getParameters); if (object) { params = g_slice_new0 (GstAHCParameters); params->object = (*env)->NewGlobalRef (env, object); (*env)->DeleteLocalRef (env, object); if (!params->object) { GST_ERROR ("Failed to create global reference"); (*env)->ExceptionClear (env); g_slice_free (GstAHCParameters, params); return NULL; } } GST_DEBUG ("return parameters %p", params->object); return params; } gboolean gst_ah_camera_lock (GstAHCamera * self) { JNIEnv *env = gst_amc_jni_get_env (); AHC_CALL (return FALSE, Void, lock); return TRUE; } GstAHCamera * gst_ah_camera_open (gint camera_id) { JNIEnv *env = gst_amc_jni_get_env (); jobject object = NULL; GstAHCamera *camera = NULL; object = AHC_STATIC_CALL (goto done, Object, open, camera_id); if (object) { camera = g_slice_new0 (GstAHCamera); camera->object = (*env)->NewGlobalRef (env, object); (*env)->DeleteLocalRef (env, object); if (!camera->object) { GST_ERROR ("Failed to create global reference"); (*env)->ExceptionClear (env); g_slice_free (GstAHCamera, camera); camera = NULL; } } done: return camera; } gboolean gst_ah_camera_reconnect (GstAHCamera * self) { JNIEnv *env = gst_amc_jni_get_env (); AHC_CALL (return FALSE, Void, reconnect); return TRUE; } void gst_ah_camera_release (GstAHCamera * self) { JNIEnv *env = gst_amc_jni_get_env (); AHC_CALL (, Void, release); } void gst_ah_camera_free (GstAHCamera * self) { JNIEnv *env = gst_amc_jni_get_env (); (*env)->DeleteGlobalRef (env, self->object); g_slice_free (GstAHCamera, self); } gboolean gst_ah_camera_set_parameters (GstAHCamera * self, GstAHCParameters * params) { JNIEnv *env = gst_amc_jni_get_env (); AHC_CALL (return FALSE, Void, setParameters, params->object); return TRUE; } gboolean gst_ah_camera_set_error_callback (GstAHCamera * self, GstAHCErrorCallback cb, gpointer user_data) { JNIEnv *env = gst_amc_jni_get_env (); jobject object = NULL; gboolean ret = FALSE; if (cb) { object = (*env)->NewObject (env, org_freedesktop_gstreamer_androidmedia_gstahccallback.klass, org_freedesktop_gstreamer_androidmedia_gstahccallback.constructor, *((jlong *) & cb), *((jlong *) & user_data)); if (!object) { GST_ERROR ("Failed to create callback object"); (*env)->ExceptionClear (env); goto done; } } AHC_CALL (goto done, Void, setErrorCallback, object); ret = TRUE; done: if (object) (*env)->DeleteLocalRef (env, object); return ret; } gboolean gst_ah_camera_set_preview_callback_with_buffer (GstAHCamera * self, GstAHCPreviewCallback cb, gpointer user_data) { JNIEnv *env = gst_amc_jni_get_env (); jobject object = NULL; gboolean ret = FALSE; if (cb) { object = (*env)->NewObject (env, org_freedesktop_gstreamer_androidmedia_gstahccallback.klass, org_freedesktop_gstreamer_androidmedia_gstahccallback.constructor, *((jlong *) & cb), *((jlong *) & user_data)); if (!object) { GST_ERROR ("Failed to create callback object"); (*env)->ExceptionClear (env); goto done; } } AHC_CALL (goto done, Void, setPreviewCallbackWithBuffer, object); ret = TRUE; done: if (object) (*env)->DeleteLocalRef (env, object); return ret; } void gst_ah_camera_set_preview_texture (GstAHCamera * self, GstAGSurfaceTexture * surfaceTexture) { JNIEnv *env = gst_amc_jni_get_env (); AHC_CALL (, Void, setPreviewTexture, surfaceTexture->object); } gboolean gst_ah_camera_start_preview (GstAHCamera * self) { JNIEnv *env = gst_amc_jni_get_env (); AHC_CALL (return FALSE, Void, startPreview); return TRUE; } gboolean gst_ah_camera_start_smooth_zoom (GstAHCamera * self, gint value) { JNIEnv *env = gst_amc_jni_get_env (); AHC_CALL (return FALSE, Void, startSmoothZoom, value); return TRUE; } gboolean gst_ah_camera_stop_preview (GstAHCamera * self) { JNIEnv *env = gst_amc_jni_get_env (); AHC_CALL (return FALSE, Void, stopPreview); return TRUE; } gboolean gst_ah_camera_stop_smooth_zoom (GstAHCamera * self) { JNIEnv *env = gst_amc_jni_get_env (); AHC_CALL (return FALSE, Void, stopSmoothZoom); return TRUE; } gboolean gst_ah_camera_unlock (GstAHCamera * self) { JNIEnv *env = gst_amc_jni_get_env (); AHC_CALL (return FALSE, Void, unlock); return TRUE; } #undef AHC_CALL #undef AHC_STATIC_CALL /* android.hardware.Camera.Size */ GstAHCSize * gst_ahc_size_new (gint width, gint height) { GstAHCSize *self = g_slice_new0 (GstAHCSize); self->width = width; self->height = height; return self; } void gst_ahc_size_free (GstAHCSize * self) { g_slice_free (GstAHCSize, self); } /* java.lang.String */ static jboolean java_lang_string_equals (JNIEnv * env, jstring str, jstring obj) { return (*env)->CallBooleanMethod (env, str, java_lang_string.equals, obj); } /* java.util.List */ static jobject java_util_list_iterator (JNIEnv * env, jobject obj) { return (*env)->CallObjectMethod (env, obj, java_util_list.iterator); } /* java.util.Iterator */ static jobject java_util_iterator_next (JNIEnv * env, jobject obj) { return (*env)->CallObjectMethod (env, obj, java_util_iterator.next); } static jboolean java_util_iterator_has_next (JNIEnv * env, jobject obj) { return (*env)->CallBooleanMethod (env, obj, java_util_iterator.hasNext); } /* java.lang.Integer */ static jint java_lang_integer_int_value (JNIEnv * env, jobject obj) { return (*env)->CallIntMethod (env, obj, java_lang_integer.intValue); } /* android.hardware.Camera.Parameters */ #define AHCP_CALL(error_statement, type, method, ...) \ GST_DVM_CALL (error_statement, self->object, type, \ android_hardware_camera_parameters, method, ## __VA_ARGS__); #define AHCP_STATIC_CALL(error_statement, type, method, ...) \ GST_DVM_STATIC_CALL (error_statement, type, \ android_hardware_camera_parameters, method, ## __VA_ARGS__); static const gchar * _white_balance_to_gchar (JNIEnv * env, jstring white_balance) { if (!white_balance) return NULL; if (java_lang_string_equals (env, white_balance, android_hardware_camera_parameters.WHITE_BALANCE_AUTO)) return Parameters_WHITE_BALANCE_AUTO; else if (java_lang_string_equals (env, white_balance, android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT)) return Parameters_WHITE_BALANCE_INCANDESCENT; else if (java_lang_string_equals (env, white_balance, android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT)) return Parameters_WHITE_BALANCE_FLUORESCENT; else if (java_lang_string_equals (env, white_balance, android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT)) return Parameters_WHITE_BALANCE_WARM_FLUORESCENT; else if (java_lang_string_equals (env, white_balance, android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT)) return Parameters_WHITE_BALANCE_DAYLIGHT; else if (java_lang_string_equals (env, white_balance, android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT)) return Parameters_WHITE_BALANCE_CLOUDY_DAYLIGHT; else if (java_lang_string_equals (env, white_balance, android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT)) return Parameters_WHITE_BALANCE_TWILIGHT; else if (java_lang_string_equals (env, white_balance, android_hardware_camera_parameters.WHITE_BALANCE_SHADE)) return Parameters_WHITE_BALANCE_SHADE; return NULL; } static jstring _white_balance_to_jstring (const gchar * white_balance) { if (!white_balance) return NULL; if (!g_strcmp0 (white_balance, Parameters_WHITE_BALANCE_AUTO)) return android_hardware_camera_parameters.WHITE_BALANCE_AUTO; else if (!g_strcmp0 (white_balance, Parameters_WHITE_BALANCE_INCANDESCENT)) return android_hardware_camera_parameters.WHITE_BALANCE_INCANDESCENT; else if (!g_strcmp0 (white_balance, Parameters_WHITE_BALANCE_FLUORESCENT)) return android_hardware_camera_parameters.WHITE_BALANCE_FLUORESCENT; else if (!g_strcmp0 (white_balance, Parameters_WHITE_BALANCE_WARM_FLUORESCENT)) return android_hardware_camera_parameters.WHITE_BALANCE_WARM_FLUORESCENT; else if (!g_strcmp0 (white_balance, Parameters_WHITE_BALANCE_DAYLIGHT)) return android_hardware_camera_parameters.WHITE_BALANCE_DAYLIGHT; else if (!g_strcmp0 (white_balance, Parameters_WHITE_BALANCE_CLOUDY_DAYLIGHT)) return android_hardware_camera_parameters.WHITE_BALANCE_CLOUDY_DAYLIGHT; else if (!g_strcmp0 (white_balance, Parameters_WHITE_BALANCE_TWILIGHT)) return android_hardware_camera_parameters.WHITE_BALANCE_TWILIGHT; else if (!g_strcmp0 (white_balance, Parameters_WHITE_BALANCE_SHADE)) return android_hardware_camera_parameters.WHITE_BALANCE_SHADE; return NULL; } static const gchar * _color_effect_to_gchar (JNIEnv * env, jstring color_effect) { if (!color_effect) return NULL; if (java_lang_string_equals (env, color_effect, android_hardware_camera_parameters.EFFECT_NONE)) return Parameters_EFFECT_NONE; else if (java_lang_string_equals (env, color_effect, android_hardware_camera_parameters.EFFECT_MONO)) return Parameters_EFFECT_MONO; else if (java_lang_string_equals (env, color_effect, android_hardware_camera_parameters.EFFECT_NEGATIVE)) return Parameters_EFFECT_NEGATIVE; else if (java_lang_string_equals (env, color_effect, android_hardware_camera_parameters.EFFECT_SOLARIZE)) return Parameters_EFFECT_SOLARIZE; else if (java_lang_string_equals (env, color_effect, android_hardware_camera_parameters.EFFECT_SEPIA)) return Parameters_EFFECT_SEPIA; else if (java_lang_string_equals (env, color_effect, android_hardware_camera_parameters.EFFECT_POSTERIZE)) return Parameters_EFFECT_POSTERIZE; else if (java_lang_string_equals (env, color_effect, android_hardware_camera_parameters.EFFECT_WHITEBOARD)) return Parameters_EFFECT_WHITEBOARD; else if (java_lang_string_equals (env, color_effect, android_hardware_camera_parameters.EFFECT_BLACKBOARD)) return Parameters_EFFECT_BLACKBOARD; else if (java_lang_string_equals (env, color_effect, android_hardware_camera_parameters.EFFECT_AQUA)) return Parameters_EFFECT_AQUA; return NULL; } static jstring _color_effect_to_jstring (const gchar * color_effect) { if (!color_effect) return NULL; if (!g_strcmp0 (color_effect, Parameters_EFFECT_NONE)) return android_hardware_camera_parameters.EFFECT_NONE; else if (!g_strcmp0 (color_effect, Parameters_EFFECT_MONO)) return android_hardware_camera_parameters.EFFECT_MONO; else if (!g_strcmp0 (color_effect, Parameters_EFFECT_NEGATIVE)) return android_hardware_camera_parameters.EFFECT_NEGATIVE; else if (!g_strcmp0 (color_effect, Parameters_EFFECT_SOLARIZE)) return android_hardware_camera_parameters.EFFECT_SOLARIZE; else if (!g_strcmp0 (color_effect, Parameters_EFFECT_SEPIA)) return android_hardware_camera_parameters.EFFECT_SEPIA; else if (!g_strcmp0 (color_effect, Parameters_EFFECT_POSTERIZE)) return android_hardware_camera_parameters.EFFECT_POSTERIZE; else if (!g_strcmp0 (color_effect, Parameters_EFFECT_WHITEBOARD)) return android_hardware_camera_parameters.EFFECT_WHITEBOARD; else if (!g_strcmp0 (color_effect, Parameters_EFFECT_BLACKBOARD)) return android_hardware_camera_parameters.EFFECT_BLACKBOARD; else if (!g_strcmp0 (color_effect, Parameters_EFFECT_AQUA)) return android_hardware_camera_parameters.EFFECT_AQUA; return NULL; } static const gchar * _antibanding_to_gchar (JNIEnv * env, jstring antibanding) { if (!antibanding) return NULL; if (java_lang_string_equals (env, antibanding, android_hardware_camera_parameters.ANTIBANDING_AUTO)) return Parameters_ANTIBANDING_AUTO; else if (java_lang_string_equals (env, antibanding, android_hardware_camera_parameters.ANTIBANDING_50HZ)) return Parameters_ANTIBANDING_50HZ; else if (java_lang_string_equals (env, antibanding, android_hardware_camera_parameters.ANTIBANDING_60HZ)) return Parameters_ANTIBANDING_60HZ; else if (java_lang_string_equals (env, antibanding, android_hardware_camera_parameters.ANTIBANDING_OFF)) return Parameters_ANTIBANDING_OFF; return NULL; } static jstring _antibanding_to_jstring (const gchar * antibanding) { if (!antibanding) return NULL; if (!g_strcmp0 (antibanding, Parameters_ANTIBANDING_AUTO)) return android_hardware_camera_parameters.ANTIBANDING_AUTO; else if (!g_strcmp0 (antibanding, Parameters_ANTIBANDING_50HZ)) return android_hardware_camera_parameters.ANTIBANDING_50HZ; else if (!g_strcmp0 (antibanding, Parameters_ANTIBANDING_60HZ)) return android_hardware_camera_parameters.ANTIBANDING_60HZ; else if (!g_strcmp0 (antibanding, Parameters_ANTIBANDING_OFF)) return android_hardware_camera_parameters.ANTIBANDING_OFF; return NULL; } static const gchar * _flash_mode_to_gchar (JNIEnv * env, jstring flash_mode) { if (!flash_mode) return NULL; if (java_lang_string_equals (env, flash_mode, android_hardware_camera_parameters.FLASH_MODE_OFF)) return Parameters_FLASH_MODE_OFF; else if (java_lang_string_equals (env, flash_mode, android_hardware_camera_parameters.FLASH_MODE_AUTO)) return Parameters_FLASH_MODE_AUTO; else if (java_lang_string_equals (env, flash_mode, android_hardware_camera_parameters.FLASH_MODE_ON)) return Parameters_FLASH_MODE_ON; else if (java_lang_string_equals (env, flash_mode, android_hardware_camera_parameters.FLASH_MODE_RED_EYE)) return Parameters_FLASH_MODE_RED_EYE; else if (java_lang_string_equals (env, flash_mode, android_hardware_camera_parameters.FLASH_MODE_TORCH)) return Parameters_FLASH_MODE_TORCH; return NULL; } static jstring _flash_mode_to_jstring (const gchar * flash_mode) { if (!flash_mode) return NULL; if (!g_strcmp0 (flash_mode, Parameters_FLASH_MODE_OFF)) return android_hardware_camera_parameters.FLASH_MODE_OFF; else if (!g_strcmp0 (flash_mode, Parameters_FLASH_MODE_AUTO)) return android_hardware_camera_parameters.FLASH_MODE_AUTO; else if (!g_strcmp0 (flash_mode, Parameters_FLASH_MODE_ON)) return android_hardware_camera_parameters.FLASH_MODE_ON; else if (!g_strcmp0 (flash_mode, Parameters_FLASH_MODE_RED_EYE)) return android_hardware_camera_parameters.FLASH_MODE_RED_EYE; else if (!g_strcmp0 (flash_mode, Parameters_FLASH_MODE_TORCH)) return android_hardware_camera_parameters.FLASH_MODE_TORCH; return NULL; } static const gchar * _scene_mode_to_gchar (JNIEnv * env, jstring scene_mode) { if (!scene_mode) return NULL; if (java_lang_string_equals (env, scene_mode, android_hardware_camera_parameters.SCENE_MODE_AUTO)) return Parameters_SCENE_MODE_AUTO; else if (java_lang_string_equals (env, scene_mode, android_hardware_camera_parameters.SCENE_MODE_ACTION)) return Parameters_SCENE_MODE_ACTION; else if (java_lang_string_equals (env, scene_mode, android_hardware_camera_parameters.SCENE_MODE_PORTRAIT)) return Parameters_SCENE_MODE_PORTRAIT; else if (java_lang_string_equals (env, scene_mode, android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE)) return Parameters_SCENE_MODE_LANDSCAPE; else if (java_lang_string_equals (env, scene_mode, android_hardware_camera_parameters.SCENE_MODE_NIGHT)) return Parameters_SCENE_MODE_NIGHT; else if (java_lang_string_equals (env, scene_mode, android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT)) return Parameters_SCENE_MODE_NIGHT_PORTRAIT; else if (java_lang_string_equals (env, scene_mode, android_hardware_camera_parameters.SCENE_MODE_THEATRE)) return Parameters_SCENE_MODE_THEATRE; else if (java_lang_string_equals (env, scene_mode, android_hardware_camera_parameters.SCENE_MODE_BEACH)) return Parameters_SCENE_MODE_BEACH; else if (java_lang_string_equals (env, scene_mode, android_hardware_camera_parameters.SCENE_MODE_SNOW)) return Parameters_SCENE_MODE_SNOW; else if (java_lang_string_equals (env, scene_mode, android_hardware_camera_parameters.SCENE_MODE_SUNSET)) return Parameters_SCENE_MODE_SUNSET; else if (java_lang_string_equals (env, scene_mode, android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO)) return Parameters_SCENE_MODE_STEADYPHOTO; else if (java_lang_string_equals (env, scene_mode, android_hardware_camera_parameters.SCENE_MODE_FIREWORKS)) return Parameters_SCENE_MODE_FIREWORKS; else if (java_lang_string_equals (env, scene_mode, android_hardware_camera_parameters.SCENE_MODE_SPORTS)) return Parameters_SCENE_MODE_SPORTS; else if (java_lang_string_equals (env, scene_mode, android_hardware_camera_parameters.SCENE_MODE_PARTY)) return Parameters_SCENE_MODE_PARTY; else if (java_lang_string_equals (env, scene_mode, android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT)) return Parameters_SCENE_MODE_CANDLELIGHT; else if (java_lang_string_equals (env, scene_mode, android_hardware_camera_parameters.SCENE_MODE_BARCODE)) return Parameters_SCENE_MODE_BARCODE; return NULL; } static const jstring _scene_mode_to_jstring (const gchar * scene_mode) { if (!scene_mode) return NULL; if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_AUTO)) return android_hardware_camera_parameters.SCENE_MODE_AUTO; else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_ACTION)) return android_hardware_camera_parameters.SCENE_MODE_ACTION; else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_PORTRAIT)) return android_hardware_camera_parameters.SCENE_MODE_PORTRAIT; else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_LANDSCAPE)) return android_hardware_camera_parameters.SCENE_MODE_LANDSCAPE; else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_NIGHT)) return android_hardware_camera_parameters.SCENE_MODE_NIGHT; else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_NIGHT_PORTRAIT)) return android_hardware_camera_parameters.SCENE_MODE_NIGHT_PORTRAIT; else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_THEATRE)) return android_hardware_camera_parameters.SCENE_MODE_THEATRE; else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_BEACH)) return android_hardware_camera_parameters.SCENE_MODE_BEACH; else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_SNOW)) return android_hardware_camera_parameters.SCENE_MODE_SNOW; else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_SUNSET)) return android_hardware_camera_parameters.SCENE_MODE_SUNSET; else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_STEADYPHOTO)) return android_hardware_camera_parameters.SCENE_MODE_STEADYPHOTO; else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_FIREWORKS)) return android_hardware_camera_parameters.SCENE_MODE_FIREWORKS; else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_SPORTS)) return android_hardware_camera_parameters.SCENE_MODE_SPORTS; else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_PARTY)) return android_hardware_camera_parameters.SCENE_MODE_PARTY; else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_CANDLELIGHT)) return android_hardware_camera_parameters.SCENE_MODE_CANDLELIGHT; else if (!g_strcmp0 (scene_mode, Parameters_SCENE_MODE_BARCODE)) return android_hardware_camera_parameters.SCENE_MODE_BARCODE; return NULL; } static const gchar * _focus_mode_to_gchar (JNIEnv * env, jstring focus_mode) { if (!focus_mode) return NULL; if (java_lang_string_equals (env, focus_mode, android_hardware_camera_parameters.FOCUS_MODE_AUTO)) return Parameters_FOCUS_MODE_AUTO; else if (java_lang_string_equals (env, focus_mode, android_hardware_camera_parameters.FOCUS_MODE_INFINITY)) return Parameters_FOCUS_MODE_INFINITY; else if (java_lang_string_equals (env, focus_mode, android_hardware_camera_parameters.FOCUS_MODE_MACRO)) return Parameters_FOCUS_MODE_MACRO; else if (java_lang_string_equals (env, focus_mode, android_hardware_camera_parameters.FOCUS_MODE_FIXED)) return Parameters_FOCUS_MODE_FIXED; else if (java_lang_string_equals (env, focus_mode, android_hardware_camera_parameters.FOCUS_MODE_EDOF)) return Parameters_FOCUS_MODE_EDOF; else if (java_lang_string_equals (env, focus_mode, android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO)) return Parameters_FOCUS_MODE_CONTINUOUS_VIDEO; else if (java_lang_string_equals (env, focus_mode, android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) return Parameters_FOCUS_MODE_CONTINUOUS_PICTURE; return NULL; } static jstring _focus_mode_to_jstring (const gchar * focus_mode) { if (!focus_mode) return NULL; if (!g_strcmp0 (focus_mode, Parameters_FOCUS_MODE_AUTO)) return android_hardware_camera_parameters.FOCUS_MODE_AUTO; else if (!g_strcmp0 (focus_mode, Parameters_FOCUS_MODE_INFINITY)) return android_hardware_camera_parameters.FOCUS_MODE_INFINITY; else if (!g_strcmp0 (focus_mode, Parameters_FOCUS_MODE_MACRO)) return android_hardware_camera_parameters.FOCUS_MODE_MACRO; else if (!g_strcmp0 (focus_mode, Parameters_FOCUS_MODE_FIXED)) return android_hardware_camera_parameters.FOCUS_MODE_FIXED; else if (!g_strcmp0 (focus_mode, Parameters_FOCUS_MODE_EDOF)) return android_hardware_camera_parameters.FOCUS_MODE_EDOF; else if (!g_strcmp0 (focus_mode, Parameters_FOCUS_MODE_CONTINUOUS_VIDEO)) return android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_VIDEO; else if (!g_strcmp0 (focus_mode, Parameters_FOCUS_MODE_CONTINUOUS_PICTURE)) return android_hardware_camera_parameters.FOCUS_MODE_CONTINUOUS_PICTURE; return NULL; } gchar * gst_ahc_parameters_flatten (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); jstring v_str = NULL; const gchar *v = NULL; gchar *ret = NULL; v_str = AHCP_CALL (goto done, Object, flatten); v = (*env)->GetStringUTFChars (env, v_str, NULL); if (!v) { GST_ERROR ("Failed to convert string to UTF8"); (*env)->ExceptionClear (env); goto done; } ret = g_strdup (v); done: if (v) (*env)->ReleaseStringUTFChars (env, v_str, v); if (v_str) (*env)->DeleteLocalRef (env, v_str); return ret; } const gchar * gst_ahc_parameters_get_antibanding (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); const gchar *ret = NULL; jstring antibanding; antibanding = AHCP_CALL (return NULL, Object, getAntibanding); ret = _antibanding_to_gchar (env, antibanding); if (antibanding) (*env)->DeleteLocalRef (env, antibanding); return ret; } const gchar * gst_ahc_parameters_get_color_effect (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); const gchar *ret = NULL; jstring color_effect; color_effect = AHCP_CALL (return NULL, Object, getColorEffect); ret = _color_effect_to_gchar (env, color_effect); if (color_effect) (*env)->DeleteLocalRef (env, color_effect); return ret; } gint gst_ahc_parameters_get_exposure_compensation (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); gint ev; ev = AHCP_CALL (return -1, Int, getExposureCompensation); return ev; } gfloat gst_ahc_parameters_get_exposure_compensation_step (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); gfloat step; step = AHCP_CALL (return 0.0, Float, getExposureCompensationStep); return step; } const gchar * gst_ahc_parameters_get_flash_mode (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); const gchar *ret = NULL; jstring flash_mode; flash_mode = AHCP_CALL (return NULL, Object, getFlashMode); ret = _flash_mode_to_gchar (env, flash_mode); if (flash_mode) (*env)->DeleteLocalRef (env, flash_mode); return ret; } gfloat gst_ahc_parameters_get_focal_length (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); gfloat length; length = AHCP_CALL (return 0.0, Float, getFocalLength); return length; } const gchar * gst_ahc_parameters_get_focus_mode (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); const gchar *ret = NULL; jstring focus_mode; focus_mode = AHCP_CALL (return NULL, Object, getFocusMode); ret = _focus_mode_to_gchar (env, focus_mode); if (focus_mode) (*env)->DeleteLocalRef (env, focus_mode); return ret; } gfloat gst_ahc_parameters_get_horizontal_view_angle (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); gfloat angle; angle = AHCP_CALL (return 0.0, Float, getHorizontalViewAngle); return angle; } gint gst_ahc_parameters_get_max_exposure_compensation (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); gint max; max = AHCP_CALL (return 0, Int, getMaxExposureCompensation); return max; } gint gst_ahc_parameters_get_max_zoom (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); gint max; max = AHCP_CALL (return -1, Int, getMaxZoom); return max; } gint gst_ahc_parameters_get_min_exposure_compensation (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); gint min; min = AHCP_CALL (return 0, Int, getMinExposureCompensation); return min; } gint gst_ahc_parameters_get_preview_format (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); gint format; format = AHCP_CALL (return 0, Int, getPreviewFormat); return format; } gboolean gst_ahc_parameters_get_preview_fps_range (GstAHCParameters * self, gint * min, gint * max) { JNIEnv *env = gst_amc_jni_get_env (); gboolean ret = FALSE; jintArray range = NULL; jint *fps = NULL; range = (*env)->NewIntArray (env, 2); if (!fps) { (*env)->ExceptionClear (env); GST_ERROR ("Failed to create array"); goto done; } AHCP_CALL (goto done, Void, getPreviewFpsRange, range); fps = (*env)->GetIntArrayElements (env, range, NULL); if ((*env)->ExceptionCheck (env) || !fps) { (*env)->ExceptionClear (env); GST_ERROR ("Failed to get array elements"); goto done; } if (min) *min = fps[0]; if (max) *max = fps[1]; ret = TRUE; done: if (fps) (*env)->ReleaseIntArrayElements (env, range, fps, JNI_ABORT); if (range) (*env)->DeleteLocalRef (env, range); return ret; } GstAHCSize * gst_ahc_parameters_get_preview_size (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); jobject jsize = NULL; GstAHCSize *size = NULL; jsize = AHCP_CALL (goto done, Object, getPreviewSize); size = g_slice_new0 (GstAHCSize); size->width = (*env)->GetIntField (env, jsize, android_hardware_camera_size.width); if ((*env)->ExceptionCheck (env)) { GST_ERROR ("Failed to get Camera.Size.width field"); (*env)->ExceptionClear (env); g_slice_free (GstAHCSize, size); size = NULL; goto done; } size->height = (*env)->GetIntField (env, jsize, android_hardware_camera_size.height); if ((*env)->ExceptionCheck (env)) { GST_ERROR ("Failed to get Camera.Size.height field"); (*env)->ExceptionClear (env); g_slice_free (GstAHCSize, size); size = NULL; goto done; } done: if (jsize) (*env)->DeleteLocalRef (env, jsize); return size; } const gchar * gst_ahc_parameters_get_scene_mode (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); const gchar *ret = NULL; jstring scene_mode; scene_mode = AHCP_CALL (return NULL, Object, getSceneMode); ret = _scene_mode_to_gchar (env, scene_mode); if (scene_mode) (*env)->DeleteLocalRef (env, scene_mode); return ret; } GList * gst_ahc_parameters_get_supported_antibanding (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); jobject list = NULL; GList *ret = NULL; list = AHCP_CALL (return NULL, Object, getSupportedAntibanding); if (list) { jobject iterator = NULL; iterator = java_util_list_iterator (env, list); if (iterator) { while (java_util_iterator_has_next (env, iterator)) { jobject str = java_util_iterator_next (env, iterator); if (str) { const gchar *value = _antibanding_to_gchar (env, str); ret = g_list_append (ret, (gchar *) value); (*env)->DeleteLocalRef (env, str); } } (*env)->DeleteLocalRef (env, iterator); } (*env)->DeleteLocalRef (env, list); } return ret; } void gst_ahc_parameters_supported_antibanding_free (GList * list) { g_list_free (list); } GList * gst_ahc_parameters_get_supported_color_effects (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); jobject list = NULL; GList *ret = NULL; list = AHCP_CALL (return NULL, Object, getSupportedColorEffects); if (list) { jobject iterator = NULL; iterator = java_util_list_iterator (env, list); if (iterator) { while (java_util_iterator_has_next (env, iterator)) { jobject str = java_util_iterator_next (env, iterator); if (str) { const gchar *value = _color_effect_to_gchar (env, str); ret = g_list_append (ret, (gchar *) value); (*env)->DeleteLocalRef (env, str); } } (*env)->DeleteLocalRef (env, iterator); } (*env)->DeleteLocalRef (env, list); } return ret; } void gst_ahc_parameters_supported_color_effects_free (GList * list) { g_list_free (list); } GList * gst_ahc_parameters_get_supported_flash_modes (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); jobject list = NULL; GList *ret = NULL; list = AHCP_CALL (return NULL, Object, getSupportedFlashModes); if (list) { jobject iterator = NULL; iterator = java_util_list_iterator (env, list); if (iterator) { while (java_util_iterator_has_next (env, iterator)) { jobject str = java_util_iterator_next (env, iterator); if (str) { const gchar *value = _flash_mode_to_gchar (env, str); ret = g_list_append (ret, (gchar *) value); (*env)->DeleteLocalRef (env, str); } } (*env)->DeleteLocalRef (env, iterator); } (*env)->DeleteLocalRef (env, list); } return ret; } void gst_ahc_parameters_supported_flash_modes_free (GList * list) { g_list_free (list); } GList * gst_ahc_parameters_get_supported_focus_modes (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); jobject list = NULL; GList *ret = NULL; list = AHCP_CALL (return NULL, Object, getSupportedFocusModes); if (list) { jobject iterator = NULL; iterator = java_util_list_iterator (env, list); if (iterator) { while (java_util_iterator_has_next (env, iterator)) { jobject str = java_util_iterator_next (env, iterator); if (str) { const gchar *value = _focus_mode_to_gchar (env, str); ret = g_list_append (ret, (gchar *) value); (*env)->DeleteLocalRef (env, str); } } (*env)->DeleteLocalRef (env, iterator); } (*env)->DeleteLocalRef (env, list); } return ret; } void gst_ahc_parameters_supported_focus_modes_free (GList * list) { g_list_free (list); } GList * gst_ahc_parameters_get_supported_preview_formats (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); jobject list = NULL; GList *ret = NULL; list = AHCP_CALL (return NULL, Object, getSupportedPreviewFormats); if (list) { jobject iterator = NULL; iterator = java_util_list_iterator (env, list); if (iterator) { while (java_util_iterator_has_next (env, iterator)) { jobject integer = java_util_iterator_next (env, iterator); if (integer) { jint value = java_lang_integer_int_value (env, integer); ret = g_list_append (ret, GINT_TO_POINTER (value)); (*env)->DeleteLocalRef (env, integer); } } (*env)->DeleteLocalRef (env, iterator); } (*env)->DeleteLocalRef (env, list); } return ret; } void gst_ahc_parameters_supported_preview_formats_free (GList * list) { g_list_free (list); } GList * gst_ahc_parameters_get_supported_preview_fps_range (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); jobject list = NULL; GList *ret = NULL; list = AHCP_CALL (return NULL, Object, getSupportedPreviewFpsRange); if (list) { jobject iterator = NULL; iterator = java_util_list_iterator (env, list); if (iterator) { while (java_util_iterator_has_next (env, iterator)) { jintArray range = java_util_iterator_next (env, iterator); if (range) { jint *fps = g_new (jint, 2); (*env)->GetIntArrayRegion (env, range, 0, 2, fps); ret = g_list_append (ret, fps); (*env)->DeleteLocalRef (env, range); } } (*env)->DeleteLocalRef (env, iterator); } (*env)->DeleteLocalRef (env, list); } return ret; } void gst_ahc_parameters_supported_preview_fps_range_free (GList * list) { g_list_foreach (list, (GFunc) g_free, NULL); g_list_free (list); } GList * gst_ahc_parameters_get_supported_preview_sizes (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); jobject list = NULL; GList *ret = NULL; list = AHCP_CALL (return NULL, Object, getSupportedPreviewSizes); if (list) { jobject iterator = NULL; iterator = java_util_list_iterator (env, list); if (iterator) { while (java_util_iterator_has_next (env, iterator)) { jobject jsize = java_util_iterator_next (env, iterator); if (jsize) { jint width, height; width = (*env)->GetIntField (env, jsize, android_hardware_camera_size.width); height = (*env)->GetIntField (env, jsize, android_hardware_camera_size.height); ret = g_list_append (ret, gst_ahc_size_new (width, height)); (*env)->DeleteLocalRef (env, jsize); } } (*env)->DeleteLocalRef (env, iterator); } (*env)->DeleteLocalRef (env, list); } return ret; } void gst_ahc_parameters_supported_preview_sizes_free (GList * list) { g_list_foreach (list, (GFunc) gst_ahc_size_free, NULL); g_list_free (list); } GList * gst_ahc_parameters_get_supported_scene_modes (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); jobject list = NULL; GList *ret = NULL; list = AHCP_CALL (return NULL, Object, getSupportedSceneModes); if (list) { jobject iterator = NULL; iterator = java_util_list_iterator (env, list); if (iterator) { while (java_util_iterator_has_next (env, iterator)) { jobject str = java_util_iterator_next (env, iterator); if (str) { const gchar *value = _scene_mode_to_gchar (env, str); ret = g_list_append (ret, (gchar *) value); (*env)->DeleteLocalRef (env, str); } } (*env)->DeleteLocalRef (env, iterator); } (*env)->DeleteLocalRef (env, list); } return ret; } void gst_ahc_parameters_supported_scene_modes_free (GList * list) { g_list_free (list); } GList * gst_ahc_parameters_get_supported_white_balance (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); jobject list = NULL; GList *ret = NULL; list = AHCP_CALL (return NULL, Object, getSupportedWhiteBalance); if (list) { jobject iterator = NULL; iterator = java_util_list_iterator (env, list); if (iterator) { while (java_util_iterator_has_next (env, iterator)) { jobject str = java_util_iterator_next (env, iterator); if (str) { const gchar *value = _white_balance_to_gchar (env, str); ret = g_list_append (ret, (gchar *) value); (*env)->DeleteLocalRef (env, str); } } (*env)->DeleteLocalRef (env, iterator); } (*env)->DeleteLocalRef (env, list); } return ret; } void gst_ahc_parameters_supported_white_balance_free (GList * list) { g_list_free (list); } gfloat gst_ahc_parameters_get_vertical_view_angle (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); gfloat angle; angle = AHCP_CALL (return 0.0, Float, getVerticalViewAngle); return angle; } gboolean gst_ahc_parameters_get_video_stabilization (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); gboolean ret; ret = AHCP_CALL (return FALSE, Boolean, getVideoStabilization); return ret; } const gchar * gst_ahc_parameters_get_white_balance (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); const gchar *ret = NULL; jstring white_balance; white_balance = AHCP_CALL (return NULL, Object, getWhiteBalance); ret = _white_balance_to_gchar (env, white_balance); if (white_balance) (*env)->DeleteLocalRef (env, white_balance); return ret; } gint gst_ahc_parameters_get_zoom (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); gint zoom; zoom = AHCP_CALL (return -1, Int, getZoom); return zoom; } GList * gst_ahc_parameters_get_zoom_ratios (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); jobject list = NULL; GList *ret = NULL; list = AHCP_CALL (return NULL, Object, getZoomRatios); if (list) { jobject iterator = NULL; iterator = java_util_list_iterator (env, list); if (iterator) { while (java_util_iterator_has_next (env, iterator)) { jobject integer = java_util_iterator_next (env, iterator); if (integer) { jint value = java_lang_integer_int_value (env, integer); ret = g_list_append (ret, GINT_TO_POINTER (value)); (*env)->DeleteLocalRef (env, integer); } } (*env)->DeleteLocalRef (env, iterator); } (*env)->DeleteLocalRef (env, list); } return ret; } void gst_ahc_parameters_zoom_ratios_free (GList * list) { g_list_free (list); } gboolean gst_ahc_parameters_is_smooth_zoom_supported (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); gboolean supported; supported = AHCP_CALL (return FALSE, Boolean, isSmoothZoomSupported); return supported; } gboolean gst_ahc_parameters_is_video_stabilization_supported (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); gboolean supported; supported = AHCP_CALL (return FALSE, Boolean, isVideoStabilizationSupported); return supported; } gboolean gst_ahc_parameters_is_zoom_supported (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); gboolean supported; supported = AHCP_CALL (return FALSE, Boolean, isZoomSupported); return supported; } gboolean gst_ahc_parameters_set_antibanding (GstAHCParameters * self, const gchar * value) { JNIEnv *env = gst_amc_jni_get_env (); jstring antibanding; antibanding = _antibanding_to_jstring (value); if (!antibanding) return FALSE; AHCP_CALL (return FALSE, Void, setAntibanding, antibanding); return TRUE; } gboolean gst_ahc_parameters_set_color_effect (GstAHCParameters * self, const gchar * value) { JNIEnv *env = gst_amc_jni_get_env (); jstring color_effect; color_effect = _color_effect_to_jstring (value); if (!color_effect) return FALSE; AHCP_CALL (return FALSE, Void, setColorEffect, color_effect); return TRUE; } gboolean gst_ahc_parameters_set_exposure_compensation (GstAHCParameters * self, gint value) { JNIEnv *env = gst_amc_jni_get_env (); AHCP_CALL (return FALSE, Void, setExposureCompensation, value); return TRUE; } gboolean gst_ahc_parameters_set_flash_mode (GstAHCParameters * self, const gchar * value) { JNIEnv *env = gst_amc_jni_get_env (); jstring flash_mode; flash_mode = _flash_mode_to_jstring (value); if (!flash_mode) return FALSE; AHCP_CALL (return FALSE, Void, setFlashMode, flash_mode); return TRUE; } gboolean gst_ahc_parameters_set_focus_mode (GstAHCParameters * self, const gchar * value) { JNIEnv *env = gst_amc_jni_get_env (); jstring focus_mode; focus_mode = _focus_mode_to_jstring (value); if (!focus_mode) return FALSE; AHCP_CALL (return FALSE, Void, setFocusMode, focus_mode); return TRUE; } gboolean gst_ahc_parameters_set_preview_format (GstAHCParameters * self, gint format) { JNIEnv *env = gst_amc_jni_get_env (); AHCP_CALL (return FALSE, Void, setPreviewFormat, format); return TRUE; } gboolean gst_ahc_parameters_set_preview_fps_range (GstAHCParameters * self, gint min, gint max) { JNIEnv *env = gst_amc_jni_get_env (); AHCP_CALL (return FALSE, Void, setPreviewFpsRange, min, max); return TRUE; } gboolean gst_ahc_parameters_set_preview_size (GstAHCParameters * self, gint width, gint height) { JNIEnv *env = gst_amc_jni_get_env (); AHCP_CALL (return FALSE, Void, setPreviewSize, width, height); return TRUE; } gboolean gst_ahc_parameters_set_scene_mode (GstAHCParameters * self, const gchar * value) { JNIEnv *env = gst_amc_jni_get_env (); jstring scene_mode; scene_mode = _scene_mode_to_jstring (value); if (!scene_mode) return FALSE; AHCP_CALL (return FALSE, Void, setSceneMode, scene_mode); return TRUE; } gboolean gst_ahc_parameters_set_video_stabilization (GstAHCParameters * self, gboolean toggle) { JNIEnv *env = gst_amc_jni_get_env (); AHCP_CALL (return FALSE, Void, setVideoStabilization, toggle); return TRUE; } gboolean gst_ahc_parameters_set_white_balance (GstAHCParameters * self, const gchar * value) { JNIEnv *env = gst_amc_jni_get_env (); jstring white_balance; white_balance = _white_balance_to_jstring (value); if (!white_balance) return FALSE; AHCP_CALL (return FALSE, Void, setWhiteBalance, white_balance); return TRUE; } gboolean gst_ahc_parameters_set_zoom (GstAHCParameters * self, gint value) { JNIEnv *env = gst_amc_jni_get_env (); AHCP_CALL (return FALSE, Void, setZoom, value); return TRUE; } gboolean gst_ahc_parameters_unflatten (GstAHCParameters * self, const gchar * flattened) { JNIEnv *env = gst_amc_jni_get_env (); jstring v_str = NULL; gboolean ret = TRUE; v_str = (*env)->NewStringUTF (env, flattened); if (v_str == NULL) return FALSE; AHCP_CALL (ret = FALSE, Void, unflatten, v_str); (*env)->DeleteLocalRef (env, v_str); return ret; } void gst_ahc_parameters_free (GstAHCParameters * self) { JNIEnv *env = gst_amc_jni_get_env (); g_return_if_fail (self != NULL); g_return_if_fail (self->object != NULL); GST_DEBUG ("freeing parameters %p", self->object); (*env)->DeleteGlobalRef (env, self->object); g_slice_free (GstAHCParameters, self); }