Merge changes I86b19e65,Ie4161bb9,I6e61ba1c into main am: 36ccc53c44

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2654500

Change-Id: Ie250ea91a114f3e1022951b6cb0eb4ee9f7a4c2a
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Mikhail Naganov
2023-07-12 18:49:07 +00:00
committed by Automerger Merge Worker

View File

@@ -461,8 +461,7 @@ android_media_AudioSystem_setParameters(JNIEnv *env, jobject thiz, jstring keyVa
env->GetStringLength(keyValuePairs));
env->ReleaseStringCritical(keyValuePairs, c_keyValuePairs);
}
int status = check_AudioSystem_Command(AudioSystem::setParameters(c_keyValuePairs8));
return status;
return check_AudioSystem_Command(AudioSystem::setParameters(c_keyValuePairs8));
}
static jstring
@@ -1052,12 +1051,12 @@ static jint convertAudioPortConfigFromNative(JNIEnv *env, ScopedLocalRef<jobject
jAudioPort->reset(env->NewObject(gAudioPortClass, gAudioPortCstor,
jHandle.get(), // handle
0, // role
NULL, // name
NULL, // samplingRates
NULL, // channelMasks
NULL, // channelIndexMasks
NULL, // formats
NULL)); // gains
nullptr, // name
nullptr, // samplingRates
nullptr, // channelMasks
nullptr, // channelIndexMasks
nullptr, // formats
nullptr)); // gains
if (*jAudioPort == nullptr) {
return AUDIO_JAVA_ERROR;
@@ -1084,8 +1083,10 @@ static jint convertAudioPortConfigFromNative(JNIEnv *env, ScopedLocalRef<jobject
gainIndex, nAudioPortConfig->gain.mode);
if (audioportCreated) {
ALOGV("convertAudioPortConfigFromNative creating gain");
jAudioGain.reset(env->NewObject(gAudioGainClass, gAudioGainCstor, gainIndex, 0, 0, 0, 0,
0, 0, 0, 0));
jAudioGain.reset(env->NewObject(gAudioGainClass, gAudioGainCstor, gainIndex, 0 /*mode*/,
0 /*channelMask*/, 0 /*minValue*/, 0 /*maxValue*/,
0 /*defaultValue*/, 0 /*stepValue*/,
0 /*rampDurationMinMs*/, 0 /*rampDurationMaxMs*/));
if (jAudioGain == NULL) {
ALOGV("convertAudioPortConfigFromNative creating gain FAILED");
return AUDIO_JAVA_ERROR;
@@ -1227,7 +1228,7 @@ static bool isAudioPortArrayCountOutOfBounds(const struct audio_port_v7 *nAudioP
return false;
}
static jint convertAudioProfileFromNative(JNIEnv *env, jobject *jAudioProfile,
static jint convertAudioProfileFromNative(JNIEnv *env, ScopedLocalRef<jobject> *jAudioProfile,
const audio_profile *nAudioProfile, bool useInMask) {
size_t numPositionMasks = 0;
size_t numIndexMasks = 0;
@@ -1281,10 +1282,9 @@ static jint convertAudioProfileFromNative(JNIEnv *env, jobject *jAudioProfile,
ALOGW("Unknown encapsulation type for JAVA API: %u", nAudioProfile->encapsulation_type);
}
*jAudioProfile = env->NewObject(gAudioProfileClass, gAudioProfileCstor, audioFormat,
jSamplingRates.get(), jChannelMasks.get(),
jChannelIndexMasks.get(), encapsulationType);
jAudioProfile->reset(env->NewObject(gAudioProfileClass, gAudioProfileCstor, audioFormat,
jSamplingRates.get(), jChannelMasks.get(),
jChannelIndexMasks.get(), encapsulationType));
if (*jAudioProfile == nullptr) {
return AUDIO_JAVA_ERROR;
}
@@ -1330,10 +1330,9 @@ static jint convertAudioPortFromNative(JNIEnv *env, ScopedLocalRef<jobject> *jAu
ScopedLocalRef<jobject> jPcmFloatProfileFromExtendedInteger(env, nullptr);
for (size_t i = 0; i < nAudioPort->num_audio_profiles; ++i) {
jobject jAudioProfile = nullptr;
jint jStatus = AUDIO_JAVA_SUCCESS;
jStatus = convertAudioProfileFromNative(env, &jAudioProfile, &nAudioPort->audio_profiles[i],
useInMask);
ScopedLocalRef<jobject> jAudioProfile(env);
jint jStatus = convertAudioProfileFromNative(env, &jAudioProfile,
&nAudioPort->audio_profiles[i], useInMask);
if (jStatus == AUDIO_JAVA_BAD_VALUE) {
// skipping Java layer unsupported audio formats
continue;
@@ -1341,7 +1340,7 @@ static jint convertAudioPortFromNative(JNIEnv *env, ScopedLocalRef<jobject> *jAu
if (jStatus != NO_ERROR) {
return AUDIO_JAVA_ERROR;
}
env->CallBooleanMethod(jAudioProfiles.get(), gArrayListMethods.add, jAudioProfile);
env->CallBooleanMethod(jAudioProfiles.get(), gArrayListMethods.add, jAudioProfile.get());
if (nAudioPort->audio_profiles[i].format == AUDIO_FORMAT_PCM_FLOAT) {
hasFloat = true;
@@ -1351,22 +1350,22 @@ static jint convertAudioPortFromNative(JNIEnv *env, ScopedLocalRef<jobject> *jAu
ScopedLocalRef<jintArray>
jSamplingRates(env,
static_cast<jintArray>(
env->GetObjectField(jAudioProfile,
env->GetObjectField(jAudioProfile.get(),
gAudioProfileFields
.mSamplingRates)));
ScopedLocalRef<jintArray>
jChannelMasks(env,
static_cast<jintArray>(
env->GetObjectField(jAudioProfile,
env->GetObjectField(jAudioProfile.get(),
gAudioProfileFields.mChannelMasks)));
ScopedLocalRef<jintArray>
jChannelIndexMasks(env,
static_cast<jintArray>(
env->GetObjectField(jAudioProfile,
env->GetObjectField(jAudioProfile.get(),
gAudioProfileFields
.mChannelIndexMasks)));
int encapsulationType =
env->GetIntField(jAudioProfile, gAudioProfileFields.mEncapsulationType);
env->GetIntField(jAudioProfile.get(), gAudioProfileFields.mEncapsulationType);
jPcmFloatProfileFromExtendedInteger.reset(
env->NewObject(gAudioProfileClass, gAudioProfileCstor,
@@ -1374,10 +1373,6 @@ static jint convertAudioPortFromNative(JNIEnv *env, ScopedLocalRef<jobject> *jAu
jSamplingRates.get(), jChannelMasks.get(),
jChannelIndexMasks.get(), encapsulationType));
}
if (jAudioProfile != nullptr) {
env->DeleteLocalRef(jAudioProfile);
}
}
if (!hasFloat && jPcmFloatProfileFromExtendedInteger.get() != nullptr) {
// R and earlier compatibility - add ENCODING_PCM_FLOAT to the end
@@ -1429,7 +1424,7 @@ static jint convertAudioPortFromNative(JNIEnv *env, ScopedLocalRef<jobject> *jAu
// gains
ScopedLocalRef<jobjectArray> jGains(env,
env->NewObjectArray(nAudioPort->num_gains, gAudioGainClass,
NULL));
nullptr));
if (jGains == nullptr) {
return AUDIO_JAVA_ERROR;
}
@@ -1481,13 +1476,13 @@ static jint convertAudioPortFromNative(JNIEnv *env, ScopedLocalRef<jobject> *jAu
nAudioPort->ext.device
.encapsulation_metadata_types));
ALOGV("convertAudioPortFromNative is a device %08x", nAudioPort->ext.device.type);
jstring jAddress = env->NewStringUTF(nAudioPort->ext.device.address);
jAudioPort->reset(
env->NewObject(gAudioDevicePortClass, gAudioDevicePortCstor, jHandle.get(),
jDeviceName.get(), jAudioProfiles.get(), jGains.get(),
nAudioPort->ext.device.type, jAddress, jEncapsulationModes.get(),
jEncapsulationMetadataTypes.get(), jAudioDescriptors.get()));
env->DeleteLocalRef(jAddress);
ScopedLocalRef<jstring> jAddress(env, env->NewStringUTF(nAudioPort->ext.device.address));
jAudioPort->reset(env->NewObject(gAudioDevicePortClass, gAudioDevicePortCstor,
jHandle.get(), jDeviceName.get(), jAudioProfiles.get(),
jGains.get(), nAudioPort->ext.device.type, jAddress.get(),
jEncapsulationModes.get(),
jEncapsulationMetadataTypes.get(),
jAudioDescriptors.get()));
} else if (nAudioPort->type == AUDIO_PORT_TYPE_MIX) {
ALOGV("convertAudioPortFromNative is a mix");
jAudioPort->reset(env->NewObject(gAudioMixPortClass, gAudioMixPortCstor, jHandle.get(),
@@ -1543,7 +1538,7 @@ android_media_AudioSystem_listAudioPorts(JNIEnv *env, jobject clazz,
}
status_t status;
unsigned int generation1;
unsigned int generation1 = 0;
unsigned int generation;
unsigned int numPorts;
std::vector<audio_port_v7> nPorts;
@@ -1577,23 +1572,13 @@ android_media_AudioSystem_listAudioPorts(JNIEnv *env, jobject clazz,
} while (generation1 != generation && status == NO_ERROR);
jStatus = nativeToJavaStatus(status);
if (jStatus != AUDIO_JAVA_SUCCESS) {
if (!setGeneration(env, jGeneration, generation1)) {
jStatus = AUDIO_JAVA_ERROR;
if (jStatus == AUDIO_JAVA_SUCCESS) {
for (size_t i = 0; i < numPorts; i++) {
ScopedLocalRef<jobject> jAudioPort(env, nullptr);
jStatus = convertAudioPortFromNative(env, &jAudioPort, &nPorts[i]);
if (jStatus != AUDIO_JAVA_SUCCESS) break;
env->CallBooleanMethod(jPorts, gArrayListMethods.add, jAudioPort.get());
}
return jStatus;
}
for (size_t i = 0; i < numPorts; i++) {
ScopedLocalRef<jobject> jAudioPort(env, nullptr);
jStatus = convertAudioPortFromNative(env, &jAudioPort, &nPorts[i]);
if (jStatus != AUDIO_JAVA_SUCCESS) {
if (!setGeneration(env, jGeneration, generation1)) {
jStatus = AUDIO_JAVA_ERROR;
}
return jStatus;
}
env->CallBooleanMethod(jPorts, gArrayListMethods.add, jAudioPort.get());
}
if (!setGeneration(env, jGeneration, generation1)) {
jStatus = AUDIO_JAVA_ERROR;
@@ -1629,7 +1614,7 @@ android_media_AudioSystem_createAudioPatch(JNIEnv *env, jobject clazz,
audio_patch_handle_t handle = static_cast<audio_patch_handle_t>(AUDIO_PATCH_HANDLE_NONE);
ScopedLocalRef<jobject> jPatch(env, env->GetObjectArrayElement(jPatches, 0));
ScopedLocalRef<jobject> jPatchHandle(env, nullptr);
if (jPatch != NULL) {
if (jPatch != nullptr) {
if (!env->IsInstanceOf(jPatch.get(), gAudioPatchClass)) {
return AUDIO_JAVA_BAD_VALUE;
}
@@ -1765,7 +1750,7 @@ android_media_AudioSystem_listAudioPatches(JNIEnv *env, jobject clazz,
nPatches.resize(numPatches);
status = AudioSystem::listAudioPatches(&numPatches, &nPatches[0], &generation);
status = AudioSystem::listAudioPatches(&numPatches, nPatches.data(), &generation);
ALOGV("listAudioPatches AudioSystem::listAudioPatches numPatches %d generation %d generation1 %d",
numPatches, generation, generation1);
@@ -1847,7 +1832,6 @@ android_media_AudioSystem_listAudioPatches(JNIEnv *env, jobject clazz,
jPatch.reset(env->NewObject(gAudioPatchClass, gAudioPatchCstor, patchHandle, jSources.get(),
jSinks.get()));
if (jPatch == nullptr) {
jStatus = AUDIO_JAVA_ERROR;
setGeneration(env, jGeneration, generation1);
return AUDIO_JAVA_ERROR;
}
@@ -2348,9 +2332,7 @@ android_media_AudioSystem_setSurroundFormatEnabled(JNIEnv *env, jobject thiz,
{
status_t status =
AudioSystem::setSurroundFormatEnabled(audioFormatToNative(audioFormat), enabled);
if (status != NO_ERROR) {
ALOGE_IF(status != NO_ERROR, "AudioSystem::setSurroundFormatEnabled error %d", status);
}
ALOGE_IF(status != NO_ERROR, "AudioSystem::setSurroundFormatEnabled error %d", status);
return nativeToJavaStatus(status);
}
@@ -2469,7 +2451,7 @@ android_media_AudioSystem_setAudioHalPids(JNIEnv *env, jobject clazz, jintArray
if (jPids == NULL) {
return AUDIO_JAVA_BAD_VALUE;
}
pid_t *nPidsArray = reinterpret_cast<pid_t *>(env->GetIntArrayElements(jPids, NULL));
pid_t *nPidsArray = reinterpret_cast<pid_t *>(env->GetIntArrayElements(jPids, nullptr));
std::vector<pid_t> nPids(nPidsArray, nPidsArray + env->GetArrayLength(jPids));
status_t status = AudioSystem::setAudioHalPids(nPids);
env->ReleaseIntArrayElements(jPids, nPidsArray, 0);
@@ -2800,7 +2782,7 @@ static jint android_media_AudioSystem_getDirectProfilesForAttributes(JNIEnv *env
}
for (const auto &audioProfile : audioProfiles) {
jobject jAudioProfile;
ScopedLocalRef<jobject> jAudioProfile(env);
jint jConvertProfileStatus = convertAudioProfileFromNative(
env, &jAudioProfile, &audioProfile, false);
if (jConvertProfileStatus == AUDIO_JAVA_BAD_VALUE) {
@@ -2810,8 +2792,7 @@ static jint android_media_AudioSystem_getDirectProfilesForAttributes(JNIEnv *env
if (jConvertProfileStatus != AUDIO_JAVA_SUCCESS) {
return jConvertProfileStatus;
}
env->CallBooleanMethod(jAudioProfilesList, gArrayListMethods.add, jAudioProfile);
env->DeleteLocalRef(jAudioProfile);
env->CallBooleanMethod(jAudioProfilesList, gArrayListMethods.add, jAudioProfile.get());
}
return jStatus;
}