am a582bd4b: Merge "AudioSystem JNI: fix AudioPortConfig mask usage" into lmp-mr1-dev

* commit 'a582bd4b42e6bd52cb611bd551d0b60ba1ed664f':
  AudioSystem JNI: fix AudioPortConfig mask usage
This commit is contained in:
Eric Laurent
2014-11-20 00:02:12 +00:00
committed by Android Git Automerger

View File

@@ -484,7 +484,8 @@ static void convertAudioGainConfigToNative(JNIEnv *env,
static jint convertAudioPortConfigToNative(JNIEnv *env, static jint convertAudioPortConfigToNative(JNIEnv *env,
struct audio_port_config *nAudioPortConfig, struct audio_port_config *nAudioPortConfig,
const jobject jAudioPortConfig) const jobject jAudioPortConfig,
bool useConfigMask)
{ {
jobject jAudioPort = env->GetObjectField(jAudioPortConfig, gAudioPortConfigFields.mPort); jobject jAudioPort = env->GetObjectField(jAudioPortConfig, gAudioPortConfigFields.mPort);
jobject jHandle = env->GetObjectField(jAudioPort, gAudioPortFields.mHandle); jobject jHandle = env->GetObjectField(jAudioPort, gAudioPortFields.mHandle);
@@ -503,8 +504,13 @@ static jint convertAudioPortConfigToNative(JNIEnv *env,
ALOGV("convertAudioPortConfigToNative handle %d role %d type %d", ALOGV("convertAudioPortConfigToNative handle %d role %d type %d",
nAudioPortConfig->id, nAudioPortConfig->role, nAudioPortConfig->type); nAudioPortConfig->id, nAudioPortConfig->role, nAudioPortConfig->type);
unsigned int configMask = 0;
nAudioPortConfig->sample_rate = env->GetIntField(jAudioPortConfig, nAudioPortConfig->sample_rate = env->GetIntField(jAudioPortConfig,
gAudioPortConfigFields.mSamplingRate); gAudioPortConfigFields.mSamplingRate);
if (nAudioPortConfig->sample_rate != 0) {
configMask |= AUDIO_PORT_CONFIG_SAMPLE_RATE;
}
bool useInMask = useInChannelMask(nAudioPortConfig->type, nAudioPortConfig->role); bool useInMask = useInChannelMask(nAudioPortConfig->type, nAudioPortConfig->role);
audio_channel_mask_t nMask; audio_channel_mask_t nMask;
@@ -518,22 +524,34 @@ static jint convertAudioPortConfigToNative(JNIEnv *env,
ALOGV("convertAudioPortConfigToNative OUT mask java %x native %x", jMask, nMask); ALOGV("convertAudioPortConfigToNative OUT mask java %x native %x", jMask, nMask);
} }
nAudioPortConfig->channel_mask = nMask; nAudioPortConfig->channel_mask = nMask;
if (nAudioPortConfig->channel_mask != AUDIO_CHANNEL_NONE) {
configMask |= AUDIO_PORT_CONFIG_CHANNEL_MASK;
}
jint jFormat = env->GetIntField(jAudioPortConfig, gAudioPortConfigFields.mFormat); jint jFormat = env->GetIntField(jAudioPortConfig, gAudioPortConfigFields.mFormat);
audio_format_t nFormat = audioFormatToNative(jFormat); audio_format_t nFormat = audioFormatToNative(jFormat);
ALOGV("convertAudioPortConfigToNative format %d native %d", jFormat, nFormat); ALOGV("convertAudioPortConfigToNative format %d native %d", jFormat, nFormat);
nAudioPortConfig->format = nFormat; nAudioPortConfig->format = nFormat;
if (nAudioPortConfig->format != AUDIO_FORMAT_DEFAULT &&
nAudioPortConfig->format != AUDIO_FORMAT_INVALID) {
configMask |= AUDIO_PORT_CONFIG_FORMAT;
}
jobject jGain = env->GetObjectField(jAudioPortConfig, gAudioPortConfigFields.mGain); jobject jGain = env->GetObjectField(jAudioPortConfig, gAudioPortConfigFields.mGain);
if (jGain != NULL) { if (jGain != NULL) {
convertAudioGainConfigToNative(env, &nAudioPortConfig->gain, jGain, useInMask); convertAudioGainConfigToNative(env, &nAudioPortConfig->gain, jGain, useInMask);
env->DeleteLocalRef(jGain); env->DeleteLocalRef(jGain);
configMask |= AUDIO_PORT_CONFIG_GAIN;
} else { } else {
ALOGV("convertAudioPortConfigToNative no gain"); ALOGV("convertAudioPortConfigToNative no gain");
nAudioPortConfig->gain.index = -1; nAudioPortConfig->gain.index = -1;
} }
nAudioPortConfig->config_mask = env->GetIntField(jAudioPortConfig, if (useConfigMask) {
gAudioPortConfigFields.mConfigMask); nAudioPortConfig->config_mask = env->GetIntField(jAudioPortConfig,
gAudioPortConfigFields.mConfigMask);
} else {
nAudioPortConfig->config_mask = configMask;
}
env->DeleteLocalRef(jAudioPort); env->DeleteLocalRef(jAudioPort);
env->DeleteLocalRef(jHandle); env->DeleteLocalRef(jHandle);
return (jint)AUDIO_JAVA_SUCCESS; return (jint)AUDIO_JAVA_SUCCESS;
@@ -998,7 +1016,7 @@ android_media_AudioSystem_createAudioPatch(JNIEnv *env, jobject clazz,
jStatus = (jint)AUDIO_JAVA_BAD_VALUE; jStatus = (jint)AUDIO_JAVA_BAD_VALUE;
goto exit; goto exit;
} }
jStatus = convertAudioPortConfigToNative(env, &nPatch.sources[i], jSource); jStatus = convertAudioPortConfigToNative(env, &nPatch.sources[i], jSource, false);
env->DeleteLocalRef(jSource); env->DeleteLocalRef(jSource);
jSource = NULL; jSource = NULL;
if (jStatus != AUDIO_JAVA_SUCCESS) { if (jStatus != AUDIO_JAVA_SUCCESS) {
@@ -1013,7 +1031,7 @@ android_media_AudioSystem_createAudioPatch(JNIEnv *env, jobject clazz,
jStatus = (jint)AUDIO_JAVA_BAD_VALUE; jStatus = (jint)AUDIO_JAVA_BAD_VALUE;
goto exit; goto exit;
} }
jStatus = convertAudioPortConfigToNative(env, &nPatch.sinks[i], jSink); jStatus = convertAudioPortConfigToNative(env, &nPatch.sinks[i], jSink, false);
env->DeleteLocalRef(jSink); env->DeleteLocalRef(jSink);
jSink = NULL; jSink = NULL;
if (jStatus != AUDIO_JAVA_SUCCESS) { if (jStatus != AUDIO_JAVA_SUCCESS) {
@@ -1268,7 +1286,7 @@ android_media_AudioSystem_setAudioPortConfig(JNIEnv *env, jobject clazz,
return AUDIO_JAVA_BAD_VALUE; return AUDIO_JAVA_BAD_VALUE;
} }
struct audio_port_config nAudioPortConfig; struct audio_port_config nAudioPortConfig;
jint jStatus = convertAudioPortConfigToNative(env, &nAudioPortConfig, jAudioPortConfig); jint jStatus = convertAudioPortConfigToNative(env, &nAudioPortConfig, jAudioPortConfig, true);
if (jStatus != AUDIO_JAVA_SUCCESS) { if (jStatus != AUDIO_JAVA_SUCCESS) {
return jStatus; return jStatus;
} }