From 43f4b276a56e6fb5a3c9637c0e3a6865657e3be7 Mon Sep 17 00:00:00 2001 From: Phil Burk Date: Wed, 27 Jan 2016 15:35:20 -0800 Subject: [PATCH] AudioFormat: implement ENCODING_IEC61937 Allows applications to wrap compressed audio in a PCM stream and pass through directly to HDMI output. Bug: 24541671 Bug: 20891646 Bug: 26373761 Signed-off-by: Phil Burk Change-Id: If29e10b0665758330eca085bfeaac19fefc373b3 --- core/jni/android_media_AudioFormat.h | 5 +++++ core/jni/android_media_AudioTrack.cpp | 4 ++-- media/java/android/media/AudioTrack.java | 4 ++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/core/jni/android_media_AudioFormat.h b/core/jni/android_media_AudioFormat.h index bb13c35ced1fb..6513304463820 100644 --- a/core/jni/android_media_AudioFormat.h +++ b/core/jni/android_media_AudioFormat.h @@ -31,6 +31,7 @@ #define ENCODING_AAC_LC 10 #define ENCODING_AAC_HE_V1 11 #define ENCODING_AAC_HE_V2 12 +#define ENCODING_IEC61937 13 #define ENCODING_INVALID 0 #define ENCODING_DEFAULT 1 @@ -64,6 +65,8 @@ static inline audio_format_t audioFormatToNative(int audioFormat) return AUDIO_FORMAT_AAC_HE_V1; case ENCODING_AAC_HE_V2: return AUDIO_FORMAT_AAC_HE_V2; + case ENCODING_IEC61937: + return AUDIO_FORMAT_IEC61937; case ENCODING_DEFAULT: return AUDIO_FORMAT_DEFAULT; default: @@ -103,6 +106,8 @@ static inline int audioFormatFromNative(audio_format_t nativeFormat) return ENCODING_AAC_HE_V1; case AUDIO_FORMAT_AAC_HE_V2: return ENCODING_AAC_HE_V2; + case AUDIO_FORMAT_IEC61937: + return ENCODING_IEC61937; case AUDIO_FORMAT_DEFAULT: return ENCODING_DEFAULT; default: diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp index 61f185e10f4c5..1ab95042a1867 100644 --- a/core/jni/android_media_AudioTrack.cpp +++ b/core/jni/android_media_AudioTrack.cpp @@ -246,7 +246,7 @@ android_media_AudioTrack_setup(JNIEnv *env, jobject thiz, jobject weak_this, // compute the frame count size_t frameCount; - if (audio_is_linear_pcm(format)) { + if (audio_has_proportional_frames(format)) { const size_t bytesPerSample = audio_bytes_per_sample(format); frameCount = buffSizeInBytes / (channelCount * bytesPerSample); } else { @@ -1008,7 +1008,7 @@ static jint android_media_AudioTrack_get_min_buff_size(JNIEnv *env, jobject thi return -1; } const audio_format_t format = audioFormatToNative(audioFormat); - if (audio_is_linear_pcm(format)) { + if (audio_has_proportional_frames(format)) { const size_t bytesPerSample = audio_bytes_per_sample(format); return frameCount * channelCount * bytesPerSample; } else { diff --git a/media/java/android/media/AudioTrack.java b/media/java/android/media/AudioTrack.java index bdf6d9f19558f..e0fa592f4e679 100644 --- a/media/java/android/media/AudioTrack.java +++ b/media/java/android/media/AudioTrack.java @@ -885,10 +885,10 @@ public class AudioTrack implements AudioRouting // postcondition: // mNativeBufferSizeInBytes is valid (multiple of frame size, positive) private void audioBuffSizeCheck(int audioBufferSize) { - // NB: this section is only valid with PCM data. + // NB: this section is only valid with PCM or IEC61937 data. // To update when supporting compressed formats int frameSizeInBytes; - if (AudioFormat.isEncodingLinearPcm(mAudioFormat)) { + if (AudioFormat.isEncodingLinearFrames(mAudioFormat)) { frameSizeInBytes = mChannelCount * AudioFormat.getBytesPerSample(mAudioFormat); } else { frameSizeInBytes = 1;