vlcjni_object * VLCJniObject_newFromLibVlc(JNIEnv *env, jobject thiz, libvlc_instance_t *p_libvlc, const char **pp_error) { vlcjni_object *p_obj; libvlc_event_manager_t *ev; p_obj = VLCJniObject_getInstance(env, thiz); if (p_obj) { *pp_error = "VLCObject.mInstanceID already exists"; return NULL; } p_obj = calloc(1, sizeof(vlcjni_object)); if (!p_obj) { *pp_error = "vlcjni_object calloc failed"; goto error; } p_obj->p_owner = calloc(1, sizeof(vlcjni_object_owner)); if (!p_obj->p_owner) { *pp_error = "vlcjni_object_owner calloc failed"; goto error; } p_obj->p_libvlc = p_libvlc; libvlc_retain(p_libvlc); if (fields.VLCObject.getWeakReferenceID) { jobject weakCompat = (*env)->CallObjectMethod(env, thiz, fields.VLCObject.getWeakReferenceID); if (weakCompat) { p_obj->p_owner->weakCompat = (*env)->NewGlobalRef(env, weakCompat); (*env)->DeleteLocalRef(env, weakCompat); } } else p_obj->p_owner->weak = (*env)->NewWeakGlobalRef(env, thiz); if (!p_obj->p_owner->weak && !p_obj->p_owner->weakCompat) { *pp_error = "No VLCObject weak reference"; goto error; } VLCJniObject_setInstance(env, thiz, p_obj); *pp_error = NULL; return p_obj; error: VLCJniObject_release(env, thiz, p_obj); return NULL; }
void Java_org_videolan_libvlc_MediaPlayer_00024Equalizer_nativeNew(JNIEnv *env, jobject thiz) { libvlc_equalizer_t *p_eq = libvlc_audio_equalizer_new(); if (!p_eq) throw_IllegalStateException(env, "can't create Equalizer instance"); VLCJniObject_setInstance(env, thiz, p_eq); }
void Java_org_videolan_libvlc_MediaPlayer_00024Equalizer_nativeRelease(JNIEnv *env, jobject thiz) { libvlc_equalizer_t *p_eq = Equalizer_getInstance(env, thiz); if (!p_eq) return; libvlc_audio_equalizer_release(p_eq); VLCJniObject_setInstance(env, thiz, NULL); }
void VLCJniObject_release(JNIEnv *env, jobject thiz, vlcjni_object *p_obj) { if (p_obj) { if (p_obj->p_libvlc) libvlc_release(p_obj->p_libvlc); if (p_obj->p_owner) { if (p_obj->p_owner->weak) (*env)->DeleteWeakGlobalRef(env, p_obj->p_owner->weak); else if (p_obj->p_owner->weakCompat) (*env)->DeleteGlobalRef(env, p_obj->p_owner->weakCompat); } free(p_obj->p_owner); free(p_obj); VLCJniObject_setInstance(env, thiz, NULL); } }