summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/jni/android_media_AudioSystem.cpp26
1 files changed, 18 insertions, 8 deletions
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index 8dc56ed15d6f..94bd28a59e7c 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -1023,7 +1023,9 @@ static jint convertAudioPortConfigFromNative(JNIEnv *env,
audio_channel_mask_t nMask;
jint jMask;
- int gainIndex = nAudioPortConfig->gain.index;
+ int gainIndex = (nAudioPortConfig->config_mask & AUDIO_PORT_CONFIG_GAIN)
+ ? nAudioPortConfig->gain.index
+ : -1;
if (gainIndex >= 0) {
ALOGV("convertAudioPortConfigFromNative gain found with index %d mode %x",
gainIndex, nAudioPortConfig->gain.mode);
@@ -1120,7 +1122,9 @@ static jint convertAudioPortConfigFromNative(JNIEnv *env,
goto exit;
}
}
- nMask = nAudioPortConfig->channel_mask;
+ nMask = (nAudioPortConfig->config_mask & AUDIO_PORT_CONFIG_CHANNEL_MASK)
+ ? nAudioPortConfig->channel_mask
+ : AUDIO_CONFIG_BASE_INITIALIZER.channel_mask;
if (useInMask) {
jMask = inChannelMaskFromNative(nMask);
ALOGV("convertAudioPortConfigFromNative IN mask java %x native %x", jMask, nMask);
@@ -1129,12 +1133,17 @@ static jint convertAudioPortConfigFromNative(JNIEnv *env,
ALOGV("convertAudioPortConfigFromNative OUT mask java %x native %x", jMask, nMask);
}
- *jAudioPortConfig = env->NewObject(clazz, methodID,
- jAudioPort,
- nAudioPortConfig->sample_rate,
- jMask,
- audioFormatFromNative(nAudioPortConfig->format),
- jAudioGainConfig);
+ *jAudioPortConfig =
+ env->NewObject(clazz, methodID, jAudioPort,
+ (nAudioPortConfig->config_mask & AUDIO_PORT_CONFIG_SAMPLE_RATE)
+ ? nAudioPortConfig->sample_rate
+ : AUDIO_CONFIG_BASE_INITIALIZER.sample_rate,
+ jMask,
+ audioFormatFromNative(
+ (nAudioPortConfig->config_mask & AUDIO_PORT_CONFIG_FORMAT)
+ ? nAudioPortConfig->format
+ : AUDIO_CONFIG_BASE_INITIALIZER.format),
+ jAudioGainConfig);
if (*jAudioPortConfig == NULL) {
ALOGV("convertAudioPortConfigFromNative could not create new port config");
jStatus = (jint)AUDIO_JAVA_ERROR;
@@ -1936,6 +1945,7 @@ static jint convertAudioMixToNative(JNIEnv *env,
nAudioMix->mCbFlags = env->GetIntField(jAudioMix, gAudioMixFields.mCallbackFlags);
jobject jFormat = env->GetObjectField(jAudioMix, gAudioMixFields.mFormat);
+ nAudioMix->mFormat = AUDIO_CONFIG_INITIALIZER;
nAudioMix->mFormat.sample_rate = env->GetIntField(jFormat,
gAudioFormatFields.mSampleRate);
nAudioMix->mFormat.channel_mask = outChannelMaskToNative(env->GetIntField(jFormat,