hal: Add support for AAC LATM format
Add support for AAC LATM format in hal layer
Change-Id: I1314fb8759a59845cd7cba879f829d6fe2a0f53c
diff --git a/hal/audio_extn/audio_extn.h b/hal/audio_extn/audio_extn.h
index 659592c..b9402d5 100644
--- a/hal/audio_extn/audio_extn.h
+++ b/hal/audio_extn/audio_extn.h
@@ -83,6 +83,16 @@
AUDIO_FORMAT_AAC_SUB_HE_V2)
#endif
+#ifndef AUDIO_FORMAT_AAC_LATM
+#define AUDIO_FORMAT_AAC_LATM 0x23000000UL
+#define AUDIO_FORMAT_AAC_LATM_LC (AUDIO_FORMAT_AAC_LATM |\
+ AUDIO_FORMAT_AAC_SUB_LC)
+#define AUDIO_FORMAT_AAC_LATM_HE_V1 (AUDIO_FORMAT_AAC_LATM |\
+ AUDIO_FORMAT_AAC_SUB_HE_V1)
+#define AUDIO_FORMAT_AAC_LATM_HE_V2 (AUDIO_FORMAT_AAC_LATM |\
+ AUDIO_FORMAT_AAC_SUB_HE_V2)
+#endif
+
#ifndef COMPRESS_METADATA_NEEDED
#define audio_extn_parse_compress_metadata(out, parms) (0)
#else
diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c
index b806393..69a7eec 100644
--- a/hal/audio_extn/utils.c
+++ b/hal/audio_extn/utils.c
@@ -147,6 +147,10 @@
STRING_TO_ENUM(AUDIO_FORMAT_AAC_ADTS_HE_V1),
STRING_TO_ENUM(AUDIO_FORMAT_AAC_ADTS_HE_V2),
STRING_TO_ENUM(AUDIO_FORMAT_DSD),
+ STRING_TO_ENUM(AUDIO_FORMAT_AAC_LATM),
+ STRING_TO_ENUM(AUDIO_FORMAT_AAC_LATM_LC),
+ STRING_TO_ENUM(AUDIO_FORMAT_AAC_LATM_HE_V1),
+ STRING_TO_ENUM(AUDIO_FORMAT_AAC_LATM_HE_V2),
#endif
};
@@ -1114,6 +1118,9 @@
case AUDIO_FORMAT_AAC_ADTS:
id = SND_AUDIOCODEC_AAC;
break;
+ case AUDIO_FORMAT_AAC_LATM:
+ id = SND_AUDIOCODEC_AAC;
+ break;
case AUDIO_FORMAT_PCM_OFFLOAD:
case AUDIO_FORMAT_PCM:
id = SND_AUDIOCODEC_PCM;
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 61e9b89..e60ce6e 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
* Not a Contribution.
*
* Copyright (C) 2013 The Android Open Source Project
@@ -503,6 +503,9 @@
format == AUDIO_FORMAT_AAC_ADTS_LC ||
format == AUDIO_FORMAT_AAC_ADTS_HE_V1 ||
format == AUDIO_FORMAT_AAC_ADTS_HE_V2 ||
+ format == AUDIO_FORMAT_AAC_LATM_LC ||
+ format == AUDIO_FORMAT_AAC_LATM_HE_V1 ||
+ format == AUDIO_FORMAT_AAC_LATM_HE_V2 ||
format == AUDIO_FORMAT_PCM_24_BIT_PACKED ||
format == AUDIO_FORMAT_PCM_8_24_BIT ||
format == AUDIO_FORMAT_PCM_FLOAT ||
@@ -3988,8 +3991,10 @@
if ((config->offload_info.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_AAC)
out->compr_config.codec->format = SND_AUDIOSTREAMFORMAT_RAW;
- if ((config->offload_info.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_AAC_ADTS)
+ else if ((config->offload_info.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_AAC_ADTS)
out->compr_config.codec->format = SND_AUDIOSTREAMFORMAT_MP4ADTS;
+ else if ((config->offload_info.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_AAC_LATM)
+ out->compr_config.codec->format = SND_AUDIOSTREAMFORMAT_MP4LATM;
if ((config->offload_info.format & AUDIO_FORMAT_MAIN_MASK) ==
AUDIO_FORMAT_PCM) {
diff --git a/qahw_api/test/qahw_playback_test.c b/qahw_api/test/qahw_playback_test.c
index 4590f87..8da62fb 100644
--- a/qahw_api/test/qahw_playback_test.c
+++ b/qahw_api/test/qahw_playback_test.c
@@ -96,6 +96,7 @@
FILE_VORBIS,
FILE_WMA,
FILE_AC3,
+ FILE_AAC_LATM,
FILE_EAC3,
FILE_EAC3_JOC,
FILE_DTS,
@@ -369,6 +370,7 @@
qahw_out_drain(out_handle, QAHW_DRAIN_ALL);
pthread_cond_wait(&drain_cond, &drain_lock);
fprintf(log_file, "Out of compress drain\n");
+ fprintf(stdout, "Playback completed sucessfully\n");
pthread_mutex_unlock(&drain_lock);
}
} else {
@@ -450,6 +452,20 @@
default:
break;
}
+ } else if (filetype == FILE_AAC_LATM) {
+ switch (format_type) {
+ case AAC_LC:
+ aac_format = AUDIO_FORMAT_AAC_LATM_LC;
+ break;
+ case AAC_HE_V1:
+ aac_format = AUDIO_FORMAT_AAC_LATM_HE_V1;
+ break;
+ case AAC_HE_V2:
+ aac_format = AUDIO_FORMAT_AAC_LATM_HE_V2;
+ break;
+ default:
+ break;
+ }
} else {
fprintf(log_file, "Invalid filetype provided %d\n", filetype);
fprintf(stderr, "Invalid filetype provided %d\n", filetype);
@@ -553,7 +569,7 @@
printf(" -d --device <decimal value> - see system/media/audio/include/system/audio.h for device values\n");
printf(" Optional Argument and Default value is 2, i.e Speaker\n\n");
printf(" -t --file-type <file type> - 1:WAV 2:MP3 3:AAC 4:AAC_ADTS 5:FLAC\n");
- printf(" 6:ALAC 7:VORBIS 8:WMA\n");
+ printf(" 6:ALAC 7:VORBIS 8:WMA 10:AAC_LATM \n");
printf(" Required for non WAV formats\n\n");
printf(" -a --aac-type <aac type> - Required for AAC streams\n");
printf(" 1: LC 2: HE_V1 3: HE_V2\n\n");
@@ -847,6 +863,7 @@
case FILE_AAC:
case FILE_AAC_ADTS:
+ case FILE_AAC_LATM:
if (!is_valid_aac_format_type(format_type)) {
fprintf(log_file, "Invalid format type for AAC %d\n", format_type);
goto EXIT;