audio: Add support for offloading MPEG2 and WMA
Change-Id: I75afa455537cc8aaecd5d5a36ffda9e62785c723
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index a4138f1..a17d77e 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -252,12 +252,16 @@
{
if (format == AUDIO_FORMAT_MP3 ||
#ifdef EXTN_OFFLOAD_ENABLED
+ format == AUDIO_FORMAT_PCM_OFFLOAD ||
format == AUDIO_FORMAT_PCM_16_BIT_OFFLOAD ||
format == AUDIO_FORMAT_PCM_24_BIT_OFFLOAD ||
#endif
#ifdef FLAC_OFFLOAD_ENABLED
format == AUDIO_FORMAT_FLAC ||
#endif
+ format == AUDIO_FORMAT_WMA ||
+ format == AUDIO_FORMAT_WMA_PRO ||
+ format == AUDIO_FORMAT_MP2 ||
format == AUDIO_FORMAT_AAC_LC ||
format == AUDIO_FORMAT_AAC_HE_V1 ||
format == AUDIO_FORMAT_AAC_HE_V2 ){
@@ -279,6 +283,8 @@
break;
#ifdef EXTN_OFFLOAD_ENABLED
case AUDIO_FORMAT_PCM_OFFLOAD:
+ case AUDIO_FORMAT_PCM_16_BIT_OFFLOAD:
+ case AUDIO_FORMAT_PCM_24_BIT_OFFLOAD:
id = SND_AUDIOCODEC_PCM;
break;
#endif
@@ -287,6 +293,15 @@
id = SND_AUDIOCODEC_FLAC;
break;
#endif
+ case AUDIO_FORMAT_WMA:
+ id = SND_AUDIOCODEC_WMA;
+ break;
+ case AUDIO_FORMAT_WMA_PRO:
+ id = SND_AUDIOCODEC_WMA_PRO;
+ break;
+ case AUDIO_FORMAT_MP2:
+ id = SND_AUDIOCODEC_MP2;
+ break;
default:
ALOGE("%s: Unsupported audio format :%x", __func__, format);
}
@@ -1636,6 +1651,45 @@
ALOGV("%s new encoder delay %u and padding %u", __func__,
out->gapless_mdata.encoder_delay, out->gapless_mdata.encoder_padding);
+ if(out->format == AUDIO_FORMAT_WMA || out->format == AUDIO_FORMAT_WMA_PRO) {
+ ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_WMA_FORMAT_TAG, value, sizeof(value));
+ if (ret >= 0) {
+ out->compr_config.codec->format = atoi(value);
+ }
+ ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_WMA_BLOCK_ALIGN, value, sizeof(value));
+ if (ret >= 0) {
+ out->compr_config.codec->options.wma.super_block_align = atoi(value);
+ }
+ ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_WMA_BIT_PER_SAMPLE, value, sizeof(value));
+ if (ret >= 0) {
+ out->compr_config.codec->options.wma.bits_per_sample = atoi(value);
+ }
+ ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_WMA_CHANNEL_MASK, value, sizeof(value));
+ if (ret >= 0) {
+ out->compr_config.codec->options.wma.channelmask = atoi(value);
+ }
+ ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_WMA_ENCODE_OPTION, value, sizeof(value));
+ if (ret >= 0) {
+ out->compr_config.codec->options.wma.encodeopt = atoi(value);
+ }
+ ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_WMA_ENCODE_OPTION1, value, sizeof(value));
+ if (ret >= 0) {
+ out->compr_config.codec->options.wma.encodeopt1 = atoi(value);
+ }
+ ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_WMA_ENCODE_OPTION2, value, sizeof(value));
+ if (ret >= 0) {
+ out->compr_config.codec->options.wma.encodeopt2 = atoi(value);
+ }
+ ALOGV("WMA params: fmt %x, balgn %x, sr %d, chmsk %x, encop %x, op1 %x, op2 %x",
+ out->compr_config.codec->format,
+ out->compr_config.codec->options.wma.super_block_align,
+ out->compr_config.codec->options.wma.bits_per_sample,
+ out->compr_config.codec->options.wma.channelmask,
+ out->compr_config.codec->options.wma.encodeopt,
+ out->compr_config.codec->options.wma.encodeopt1,
+ out->compr_config.codec->options.wma.encodeopt2);
+ }
+
return 0;
}
@@ -1730,7 +1784,7 @@
}
if (is_offload_usecase(out->usecase)) {
pthread_mutex_lock(&out->lock);
- parse_compress_metadata(out, parms);
+ ret = parse_compress_metadata(out, parms);
pthread_mutex_unlock(&out->lock);
}