From 3ae06329dc5509ae4355c9248b76640d6b2e747c Mon Sep 17 00:00:00 2001 From: Kevin Rocard Date: Thu, 19 Dec 2019 12:18:57 +0000 Subject: [PATCH] Add OPUS encoding to the framework Audio offload support was added to AudioTrack in Q, but only a few encoding were exposed (MP3 & AAC). This patch adds only Opus support. For R we probably want to expose all format that the framework supports. Bug: 146540917 Test: AudioTrackOffloadTest AudioFormatTest Change-Id: I2ca57d45081668f76f8d9e153f66d1fd41209685 Signed-off-by: Kevin Rocard --- api/current.txt | 1 + core/jni/android_media_AudioFormat.h | 5 +++++ media/java/android/media/AudioFormat.java | 12 +++++++++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/api/current.txt b/api/current.txt index 5d1564656274a..43f6bfc9e81f9 100644 --- a/api/current.txt +++ b/api/current.txt @@ -23283,6 +23283,7 @@ package android.media { field public static final int ENCODING_IEC61937 = 13; // 0xd field public static final int ENCODING_INVALID = 0; // 0x0 field public static final int ENCODING_MP3 = 9; // 0x9 + field public static final int ENCODING_OPUS = 20; // 0x14 field public static final int ENCODING_PCM_16BIT = 2; // 0x2 field public static final int ENCODING_PCM_8BIT = 3; // 0x3 field public static final int ENCODING_PCM_FLOAT = 4; // 0x4 diff --git a/core/jni/android_media_AudioFormat.h b/core/jni/android_media_AudioFormat.h index 99b5f8592e5df..a3c455bfc111d 100644 --- a/core/jni/android_media_AudioFormat.h +++ b/core/jni/android_media_AudioFormat.h @@ -38,6 +38,7 @@ #define ENCODING_AC4 17 #define ENCODING_E_AC3_JOC 18 #define ENCODING_DOLBY_MAT 19 +#define ENCODING_OPUS 20 #define ENCODING_INVALID 0 #define ENCODING_DEFAULT 1 @@ -88,6 +89,8 @@ static inline audio_format_t audioFormatToNative(int audioFormat) return AUDIO_FORMAT_DEFAULT; case ENCODING_DOLBY_MAT: return AUDIO_FORMAT_MAT; + case ENCODING_OPUS: + return AUDIO_FORMAT_OPUS; default: return AUDIO_FORMAT_INVALID; } @@ -142,6 +145,8 @@ static inline int audioFormatFromNative(audio_format_t nativeFormat) case AUDIO_FORMAT_MAT_2_0: case AUDIO_FORMAT_MAT_2_1: return ENCODING_DOLBY_MAT; + case AUDIO_FORMAT_OPUS: + return ENCODING_OPUS; case AUDIO_FORMAT_DEFAULT: return ENCODING_DEFAULT; default: diff --git a/media/java/android/media/AudioFormat.java b/media/java/android/media/AudioFormat.java index f0787e93dc8bd..e55585ada6eb6 100644 --- a/media/java/android/media/AudioFormat.java +++ b/media/java/android/media/AudioFormat.java @@ -281,6 +281,8 @@ public final class AudioFormat implements Parcelable { * metadata (object audio) over HDMI (e.g. Dolby Atmos content). **/ public static final int ENCODING_DOLBY_MAT = 19; + /** Audio data format: OPUS compressed. */ + public static final int ENCODING_OPUS = 20; /** @hide */ public static String toLogFriendlyEncoding(int enc) { @@ -323,6 +325,8 @@ public final class AudioFormat implements Parcelable { return "ENCODING_E_AC3_JOC"; case ENCODING_DOLBY_MAT: return "ENCODING_DOLBY_MAT"; + case ENCODING_OPUS: + return "ENCODING_OPUS"; default : return "invalid encoding " + enc; } @@ -548,6 +552,7 @@ public final class AudioFormat implements Parcelable { case ENCODING_AC4: case ENCODING_E_AC3_JOC: case ENCODING_DOLBY_MAT: + case ENCODING_OPUS: return true; default: return false; @@ -576,6 +581,7 @@ public final class AudioFormat implements Parcelable { case ENCODING_AC4: case ENCODING_E_AC3_JOC: case ENCODING_DOLBY_MAT: + case ENCODING_OPUS: return true; default: return false; @@ -607,6 +613,7 @@ public final class AudioFormat implements Parcelable { case ENCODING_AC4: case ENCODING_E_AC3_JOC: case ENCODING_DOLBY_MAT: + case ENCODING_OPUS: return false; case ENCODING_INVALID: default: @@ -638,6 +645,7 @@ public final class AudioFormat implements Parcelable { case ENCODING_AC4: case ENCODING_E_AC3_JOC: case ENCODING_DOLBY_MAT: + case ENCODING_OPUS: return false; case ENCODING_INVALID: default: @@ -917,6 +925,7 @@ public final class AudioFormat implements Parcelable { case ENCODING_AC4: case ENCODING_E_AC3_JOC: case ENCODING_DOLBY_MAT: + case ENCODING_OPUS: mEncoding = encoding; break; case ENCODING_INVALID: @@ -1136,7 +1145,8 @@ public final class AudioFormat implements Parcelable { ENCODING_AAC_XHE, ENCODING_AC4, ENCODING_E_AC3_JOC, - ENCODING_DOLBY_MAT } + ENCODING_DOLBY_MAT, + ENCODING_OPUS } ) @Retention(RetentionPolicy.SOURCE) public @interface Encoding {}