From b634e1b6d6bda56128c354b1803b04b537e3799d Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Fri, 1 Aug 2014 14:44:46 -0700 Subject: [PATCH] AudioSystem: add API to query audio HW sync source Add a method to query from the audio HAL the HW sync source used for a given audio session. Add an AudioAttributes flag to request an output with HW sync source. Bug: 16132368. Change-Id: Ic31b2924b98f242c3aa0d58688879f05ea02d6f7 --- core/jni/android_media_AudioSystem.cpp | 8 ++++++++ media/java/android/media/AudioAttributes.java | 10 ++++++++-- media/java/android/media/AudioSystem.java | 5 +++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp index f9da127b56007..33bb90bcdb708 100644 --- a/core/jni/android_media_AudioSystem.cpp +++ b/core/jni/android_media_AudioSystem.cpp @@ -1293,6 +1293,12 @@ android_media_AudioSystem_eventHandlerFinalize(JNIEnv *env, jobject thiz) AudioSystem::setAudioPortCallback(callback); } +static jint +android_media_AudioSystem_getAudioHwSyncForSession(JNIEnv *env, jobject thiz, jint sessionId) +{ + return (jint)AudioSystem::getAudioHwSyncForSession((audio_session_t)sessionId); +} + // ---------------------------------------------------------------------------- static JNINativeMethod gMethods[] = { @@ -1332,6 +1338,8 @@ static JNINativeMethod gMethods[] = { (void *)android_media_AudioSystem_listAudioPatches}, {"setAudioPortConfig", "(Landroid/media/AudioPortConfig;)I", (void *)android_media_AudioSystem_setAudioPortConfig}, + {"getAudioHwSyncForSession", "(I)I", + (void *)android_media_AudioSystem_getAudioHwSyncForSession}, }; diff --git a/media/java/android/media/AudioAttributes.java b/media/java/android/media/AudioAttributes.java index 46fc66b922df1..ce9a74264a599 100644 --- a/media/java/android/media/AudioAttributes.java +++ b/media/java/android/media/AudioAttributes.java @@ -152,6 +152,12 @@ public final class AudioAttributes implements Parcelable { */ public final static int FLAG_SCO = 0x1 << 2; + /** + * @hide + * CANDIDATE FOR PUBLIC API + * Flag requesting the use of an output stream supporting hardware A/V synchronization. + */ + public final static int FLAG_HW_AV_SYNC = 0x1 << 4; private int mUsage = USAGE_UNKNOWN; private int mContentType = CONTENT_TYPE_UNKNOWN; @@ -196,7 +202,7 @@ public final class AudioAttributes implements Parcelable { */ public int getFlags() { // only return the flags that are public - return (mFlags & (FLAG_AUDIBILITY_ENFORCED)); + return (mFlags & (FLAG_AUDIBILITY_ENFORCED | FLAG_HW_AV_SYNC)); } /** @@ -340,7 +346,7 @@ public final class AudioAttributes implements Parcelable { */ public Builder setFlags(int flags) { flags &= (AudioAttributes.FLAG_AUDIBILITY_ENFORCED | AudioAttributes.FLAG_SCO - | AudioAttributes.FLAG_SECURE); + | AudioAttributes.FLAG_SECURE | AudioAttributes.FLAG_HW_AV_SYNC); mFlags |= flags; return this; } diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java index 8e2ca95380715..e11aab1df4851 100644 --- a/media/java/android/media/AudioSystem.java +++ b/media/java/android/media/AudioSystem.java @@ -487,5 +487,10 @@ public class AudioSystem public static native int releaseAudioPatch(AudioPatch patch); public static native int listAudioPatches(ArrayList patches, int[] generation); public static native int setAudioPortConfig(AudioPortConfig config); + + // must be kept in sync with value in include/system/audio.h + public static final int AUDIO_HW_SYNC_INVALID = 0; + + public static native int getAudioHwSyncForSession(int sessionId); }