Merge "audio: Use auto-generated MicrophoneInfoFw class"
diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp
index 8012e0c..5f8721e 100644
--- a/core/jni/android_media_AudioRecord.cpp
+++ b/core/jni/android_media_AudioRecord.cpp
@@ -18,29 +18,25 @@
#define LOG_TAG "AudioRecord-JNI"
-#include <inttypes.h>
-#include <jni.h>
-#include <nativehelper/JNIHelp.h>
-#include "core_jni_helpers.h"
-
-#include <utils/Log.h>
-#include <media/AudioRecord.h>
-#include <media/MicrophoneInfo.h>
-#include <vector>
-
#include <android/content/AttributionSourceState.h>
#include <android_os_Parcel.h>
-
+#include <inttypes.h>
+#include <jni.h>
+#include <media/AudioRecord.h>
+#include <nativehelper/JNIHelp.h>
#include <nativehelper/ScopedUtfChars.h>
+#include <utils/Log.h>
+
+#include <vector>
#include "android_media_AudioAttributes.h"
-#include "android_media_AudioFormat.h"
#include "android_media_AudioErrors.h"
+#include "android_media_AudioFormat.h"
#include "android_media_DeviceCallback.h"
#include "android_media_JNIUtils.h"
#include "android_media_MediaMetricsJNI.h"
#include "android_media_MicrophoneInfo.h"
-
+#include "core_jni_helpers.h"
// ----------------------------------------------------------------------------
@@ -721,7 +717,7 @@
}
jint jStatus = AUDIO_JAVA_SUCCESS;
- std::vector<media::MicrophoneInfo> activeMicrophones;
+ std::vector<media::MicrophoneInfoFw> activeMicrophones;
status_t status = lpRecorder->getActiveMicrophones(&activeMicrophones);
if (status != NO_ERROR) {
ALOGE_IF(status != NO_ERROR, "AudioRecord::getActiveMicrophones error %d", status);
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index 47057a4..cdb0580 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -27,7 +27,6 @@
#include <media/AudioContainers.h>
#include <media/AudioPolicy.h>
#include <media/AudioSystem.h>
-#include <media/MicrophoneInfo.h>
#include <nativehelper/JNIHelp.h>
#include <nativehelper/ScopedLocalRef.h>
#include <system/audio.h>
@@ -2325,7 +2324,7 @@
}
jint jStatus;
- std::vector<media::MicrophoneInfo> microphones;
+ std::vector<media::MicrophoneInfoFw> microphones;
status_t status = AudioSystem::getMicrophones(µphones);
if (status != NO_ERROR) {
ALOGE("AudioSystem::getMicrophones error %d", status);
diff --git a/core/jni/android_media_MicrophoneInfo.cpp b/core/jni/android_media_MicrophoneInfo.cpp
index b70190f..65e30d8 100644
--- a/core/jni/android_media_MicrophoneInfo.cpp
+++ b/core/jni/android_media_MicrophoneInfo.cpp
@@ -15,6 +15,9 @@
*/
#include "android_media_MicrophoneInfo.h"
+
+#include <media/AidlConversion.h>
+
#include "android_media_AudioErrors.h"
#include "core_jni_helpers.h"
@@ -46,8 +49,17 @@
namespace android {
jint convertMicrophoneInfoFromNative(JNIEnv *env, jobject *jMicrophoneInfo,
- const media::MicrophoneInfo *microphoneInfo)
-{
+ const media::MicrophoneInfoFw *microphoneInfo) {
+ // The Java object uses the same enum values as the C enum values, which are
+ // generated from HIDL. Thus, we can use the legacy structure as the source for
+ // creating the Java object. Once we start removing legacy types, we can add
+ // direct converters between Java and AIDL, this will eliminate the need
+ // to have JNI code like this one.
+ auto conv = aidl2legacy_MicrophoneInfoFw_audio_microphone_characteristic_t(*microphoneInfo);
+ if (!conv.ok()) {
+ return nativeToJavaStatus(conv.error());
+ }
+
jint jStatus = (jint)AUDIO_JAVA_SUCCESS;
jstring jDeviceId = NULL;
jstring jAddress = NULL;
@@ -56,36 +68,23 @@
jobject jFrequencyResponses = NULL;
jobject jChannelMappings = NULL;
- jDeviceId = env->NewStringUTF(microphoneInfo->getDeviceId().c_str());
- jAddress = env->NewStringUTF(microphoneInfo->getAddress().c_str());
- if (microphoneInfo->getGeometricLocation().size() != 3 ||
- microphoneInfo->getOrientation().size() != 3) {
- jStatus = nativeToJavaStatus(BAD_VALUE);
- goto exit;
- }
- jGeometricLocation = env->NewObject(gMicrophoneInfoCoordinateClass,
- gMicrophoneInfoCoordinateCstor,
- microphoneInfo->getGeometricLocation()[0],
- microphoneInfo->getGeometricLocation()[1],
- microphoneInfo->getGeometricLocation()[2]);
- jOrientation = env->NewObject(gMicrophoneInfoCoordinateClass,
- gMicrophoneInfoCoordinateCstor,
- microphoneInfo->getOrientation()[0],
- microphoneInfo->getOrientation()[1],
- microphoneInfo->getOrientation()[2]);
+ const auto &micInfo = conv.value();
+ jDeviceId = env->NewStringUTF(micInfo.device_id);
+ jAddress = env->NewStringUTF(micInfo.address);
+ jGeometricLocation =
+ env->NewObject(gMicrophoneInfoCoordinateClass, gMicrophoneInfoCoordinateCstor,
+ micInfo.geometric_location.x, micInfo.geometric_location.y,
+ micInfo.geometric_location.z);
+ jOrientation =
+ env->NewObject(gMicrophoneInfoCoordinateClass, gMicrophoneInfoCoordinateCstor,
+ micInfo.orientation.x, micInfo.orientation.y, micInfo.orientation.z);
// Create a list of Pair for frequency response.
- if (microphoneInfo->getFrequencyResponses().size() != 2 ||
- microphoneInfo->getFrequencyResponses()[0].size() !=
- microphoneInfo->getFrequencyResponses()[1].size()) {
- jStatus = nativeToJavaStatus(BAD_VALUE);
- goto exit;
- }
jFrequencyResponses = env->NewObject(gArrayListClass, gArrayListCstor);
- for (size_t i = 0; i < microphoneInfo->getFrequencyResponses()[0].size(); i++) {
- jobject jFrequency = env->NewObject(gFloatClass, gFloatCstor,
- microphoneInfo->getFrequencyResponses()[0][i]);
- jobject jResponse = env->NewObject(gFloatClass, gFloatCstor,
- microphoneInfo->getFrequencyResponses()[1][i]);
+ for (size_t i = 0; i < micInfo.num_frequency_responses; i++) {
+ jobject jFrequency =
+ env->NewObject(gFloatClass, gFloatCstor, micInfo.frequency_responses[0][i]);
+ jobject jResponse =
+ env->NewObject(gFloatClass, gFloatCstor, micInfo.frequency_responses[1][i]);
jobject jFrequencyResponse = env->NewObject(gPairClass, gPairCstor, jFrequency, jResponse);
env->CallBooleanMethod(jFrequencyResponses, gArrayListMethods.add, jFrequencyResponse);
env->DeleteLocalRef(jFrequency);
@@ -93,13 +92,9 @@
env->DeleteLocalRef(jFrequencyResponse);
}
// Create a list of Pair for channel mapping.
- if (microphoneInfo->getChannelMapping().size() != AUDIO_CHANNEL_COUNT_MAX) {
- jStatus = nativeToJavaStatus(BAD_VALUE);
- goto exit;
- }
- jChannelMappings = env->NewObject(gArrayListClass, gArrayListCstor);
- for (size_t i = 0; i < microphoneInfo->getChannelMapping().size(); i++) {
- int channelMappingType = microphoneInfo->getChannelMapping()[i];
+ const auto &channelMapping = micInfo.channel_mapping;
+ for (size_t i = 0; i < std::size(channelMapping); i++) {
+ int channelMappingType = channelMapping[i];
if (channelMappingType != AUDIO_MICROPHONE_CHANNEL_MAPPING_UNUSED) {
jobject jChannelIndex = env->NewObject(gIntegerClass, gIntegerCstor, i);
jobject jChannelMappingType = env->NewObject(gIntegerClass, gIntegerCstor,
@@ -113,18 +108,11 @@
}
}
*jMicrophoneInfo = env->NewObject(gMicrophoneInfoClass, gMicrophoneInfoCstor, jDeviceId,
- microphoneInfo->getType(), jAddress,
- microphoneInfo->getDeviceLocation(),
- microphoneInfo->getDeviceGroup(),
- microphoneInfo->getIndexInTheGroup(),
- jGeometricLocation, jOrientation,
- jFrequencyResponses, jChannelMappings,
- microphoneInfo->getSensitivity(),
- microphoneInfo->getMaxSpl(),
- microphoneInfo->getMinSpl(),
- microphoneInfo->getDirectionality());
+ micInfo.device, jAddress, micInfo.location, micInfo.group,
+ micInfo.index_in_the_group, jGeometricLocation, jOrientation,
+ jFrequencyResponses, jChannelMappings, micInfo.sensitivity,
+ micInfo.max_spl, micInfo.min_spl, micInfo.directionality);
-exit:
if (jDeviceId != NULL) {
env->DeleteLocalRef(jDeviceId);
}
@@ -145,7 +133,6 @@
}
return jStatus;
}
-
}
int register_android_media_MicrophoneInfo(JNIEnv *env)
diff --git a/core/jni/android_media_MicrophoneInfo.h b/core/jni/android_media_MicrophoneInfo.h
index 241b6d0..dc531c6 100644
--- a/core/jni/android_media_MicrophoneInfo.h
+++ b/core/jni/android_media_MicrophoneInfo.h
@@ -17,8 +17,8 @@
#ifndef ANDROID_MEDIA_MICROPHONEINFO_H
#define ANDROID_MEDIA_MICROPHONEINFO_H
+#include <android/media/MicrophoneInfoFw.h>
#include <system/audio.h>
-#include <media/MicrophoneInfo.h>
#include "jni.h"
@@ -27,7 +27,7 @@
// Conversion from C++ MicrophoneInfo object to Java MicrophoneInfo object
extern jint convertMicrophoneInfoFromNative(JNIEnv *env, jobject *jMicrophoneInfo,
- const media::MicrophoneInfo *microphoneInfo);
+ const media::MicrophoneInfoFw *microphoneInfo);
} // namespace android
-#endif
\ No newline at end of file
+#endif
diff --git a/media/jni/android_media_MediaRecorder.cpp b/media/jni/android_media_MediaRecorder.cpp
index 7ef0f77..9a6d5d7 100644
--- a/media/jni/android_media_MediaRecorder.cpp
+++ b/media/jni/android_media_MediaRecorder.cpp
@@ -30,7 +30,6 @@
#include <camera/Camera.h>
#include <media/mediarecorder.h>
#include <media/MediaMetricsItem.h>
-#include <media/MicrophoneInfo.h>
#include <media/stagefright/PersistentSurface.h>
#include <utils/threads.h>
@@ -774,7 +773,7 @@
}
jint jStatus = AUDIO_JAVA_SUCCESS;
- std::vector<media::MicrophoneInfo> activeMicrophones;
+ std::vector<media::MicrophoneInfoFw> activeMicrophones;
status_t status = mr->getActiveMicrophones(&activeMicrophones);
if (status != NO_ERROR) {
ALOGE_IF(status != NO_ERROR, "MediaRecorder::getActiveMicrophones error %d", status);