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