From 4afe15ccb0b7947e134a0ececb17660a1d4648cf Mon Sep 17 00:00:00 2001 From: Andy Hung Date: Thu, 6 May 2021 22:40:13 -0700 Subject: [PATCH] AudioFormat: Retrieve sample rate capability from framework Allows a device to specify a higher sample rate (e.g. 384kHz) and have it acknowledged by CTS. Test: AudioTrackTest#testGetMinBufferSizeTooHighSR Bug: 135474352 Bug: 187062102 Change-Id: I2a44590970b437c1090c615961432afce974f2ba --- core/jni/android_media_AudioSystem.cpp | 11 +++++++++++ media/java/android/media/AudioFormat.java | 4 ++-- media/java/android/media/AudioSystem.java | 12 ++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp index 1cb8e9e65340e..1a7f6e8863ffd 100644 --- a/core/jni/android_media_AudioSystem.cpp +++ b/core/jni/android_media_AudioSystem.cpp @@ -2277,6 +2277,15 @@ static jint android_media_AudioSystem_getMaxChannelCount(JNIEnv *env, jobject th return FCC_8; } +static jint android_media_AudioSystem_getMaxSampleRate(JNIEnv *env, jobject thiz) { + // see frameworks/av/services/audiopolicy/common/include/policy.h + return 192000; // SAMPLE_RATE_HZ_MAX (for API) +} + +static jint android_media_AudioSystem_getMinSampleRate(JNIEnv *env, jobject thiz) { + return 4000; // SAMPLE_RATE_HZ_MIN (for API) +} + static jint android_media_AudioSystem_setAssistantUid(JNIEnv *env, jobject thiz, jint uid) { @@ -2674,6 +2683,8 @@ static const JNINativeMethod gEventHandlerMethods[] = { static const JNINativeMethod gFrameworkCapabilities[] = { {"native_getMaxChannelCount", "()I", (void *)android_media_AudioSystem_getMaxChannelCount}, + {"native_getMaxSampleRate", "()I", (void *)android_media_AudioSystem_getMaxSampleRate}, + {"native_getMinSampleRate", "()I", (void *)android_media_AudioSystem_getMinSampleRate}, }; int register_android_media_AudioSystem(JNIEnv *env) diff --git a/media/java/android/media/AudioFormat.java b/media/java/android/media/AudioFormat.java index bd2524f4b4b1e..5885c7dd8b501 100644 --- a/media/java/android/media/AudioFormat.java +++ b/media/java/android/media/AudioFormat.java @@ -518,13 +518,13 @@ public final class AudioFormat implements Parcelable { * @hide */ // never unhide - public static final int SAMPLE_RATE_HZ_MIN = 4000; + public static final int SAMPLE_RATE_HZ_MIN = AudioSystem.SAMPLE_RATE_HZ_MIN; /** Maximum value for sample rate, * assuming AudioTrack and AudioRecord share the same limitations. * @hide */ // never unhide - public static final int SAMPLE_RATE_HZ_MAX = 192000; + public static final int SAMPLE_RATE_HZ_MAX = AudioSystem.SAMPLE_RATE_HZ_MAX; /** Sample rate will be a route-dependent value. * For AudioTrack, it is usually the sink sample rate, * and for AudioRecord it is usually the source sample rate. diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java index 81f99859b387a..2d9bdafa1f45b 100644 --- a/media/java/android/media/AudioSystem.java +++ b/media/java/android/media/AudioSystem.java @@ -115,6 +115,18 @@ public class AudioSystem public static final int OUT_CHANNEL_COUNT_MAX = native_getMaxChannelCount(); private static native int native_getMaxChannelCount(); + /** Maximum value for sample rate, used by AudioFormat. + * @hide + */ + public static final int SAMPLE_RATE_HZ_MAX = native_getMaxSampleRate(); + private static native int native_getMaxSampleRate(); + + /** Minimum value for sample rate, used by AudioFormat. + * @hide + */ + public static final int SAMPLE_RATE_HZ_MIN = native_getMinSampleRate(); + private static native int native_getMinSampleRate(); + // Expose only the getter method publicly so we can change it in the future private static final int NUM_STREAM_TYPES = 12;