static jint android_media_AudioEffect_native_getParameter(JNIEnv *env, jobject thiz, int psize, jbyteArray pJavaParam, jintArray pJavaValueSize, jbyteArray pJavaValue) { // retrieve the AudioEffect object jbyte* lpParam = NULL; jbyte* lpValue = NULL; jbyte* lpValueSize = NULL; jint lStatus = AUDIOEFFECT_ERROR_BAD_VALUE; effect_param_t *p; int voffset; AudioEffect* lpAudioEffect = (AudioEffect *) env->GetIntField(thiz, fields.fidNativeAudioEffect); if (lpAudioEffect == NULL) { jniThrowException(env, "java/lang/IllegalStateException", "Unable to retrieve AudioEffect pointer for getParameter()"); return AUDIOEFFECT_ERROR_NO_INIT; } if (psize == 0 || pJavaValueSize == NULL || pJavaParam == NULL || pJavaValue == NULL) { return AUDIOEFFECT_ERROR_BAD_VALUE; } // get the pointer for the param from the java array lpParam = (jbyte *) env->GetPrimitiveArrayCritical(pJavaParam, NULL); if (lpParam == NULL) { LOGE("getParameter: Error retrieving param pointer"); goto getParameter_Exit; } // get the pointer for the value from the java array lpValue = (jbyte *) env->GetPrimitiveArrayCritical(pJavaValue, NULL); if (lpValue == NULL) { LOGE("getParameter: Error retrieving value pointer"); goto getParameter_Exit; } // get the pointer for the value size from the java array lpValueSize = (jbyte *) env->GetPrimitiveArrayCritical(pJavaValueSize, NULL); if (lpValueSize == NULL) { LOGE("getParameter: Error retrieving value size pointer"); goto getParameter_Exit; } voffset = ((psize - 1) / sizeof(int) + 1) * sizeof(int); p = (effect_param_t *) malloc(sizeof(effect_param_t) + voffset + lpValueSize[0]); memcpy(p->data, lpParam, psize); p->psize = psize; p->vsize = lpValueSize[0]; lStatus = lpAudioEffect->getParameter(p); if (lStatus == NO_ERROR) { lStatus = p->status; if (lStatus == NO_ERROR) { memcpy(lpValue, p->data + voffset, p->vsize); lpValueSize[0] = p->vsize; } } free(p); getParameter_Exit: if (lpParam != NULL) { env->ReleasePrimitiveArrayCritical(pJavaParam, lpParam, 0); } if (lpValue != NULL) { env->ReleasePrimitiveArrayCritical(pJavaValue, lpValue, 0); } if (lpValueSize != NULL) { env->ReleasePrimitiveArrayCritical(pJavaValueSize, lpValueSize, 0); } return translateError(lStatus); }
//----------------------------------------------------------------------------- float getParameterClass(AEffect *e, long index) { AudioEffect *ae = (AudioEffect *)(e->object); return ae->getParameter(index); }
//------------------------------------------------------------------------------------------------------- float AudioEffect::getParameterClass (AEffect* e, VstInt32 index) { AudioEffect* ae = (AudioEffect*)(e->object); return ae->getParameter (index); }