summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrint E. Kriebel <bekit@cyngn.com>2014-11-03 18:12:15 -0800
committerBrint E. Kriebel <bekit@cyngn.com>2014-11-03 18:12:15 -0800
commit548b33e40eb031af1a209d90a0d372b856aed9e6 (patch)
tree3bdbc123bdc5ccaefd4f0b8851046a9dde05fda7
parentfa562a1b38ee204644e8f214f1db0cc41eedbbd0 (diff)
parent68d0fd75a73c04bee94560b13bca5b325b3ef87d (diff)
downloadhardware_qcom_audio-stable/cm-11.0-XNF8Y.tar.gz
hardware_qcom_audio-stable/cm-11.0-XNF8Y.tar.bz2
hardware_qcom_audio-stable/cm-11.0-XNF8Y.zip
-rw-r--r--Android.mk2
-rw-r--r--hal/Android.mk16
-rw-r--r--hal/audio_hw.c57
3 files changed, 73 insertions, 2 deletions
diff --git a/Android.mk b/Android.mk
index e76bbc34..bf19dc2f 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,4 +1,4 @@
-ifeq ($(TARGET_QCOM_AUDIO_VARIANT),)
+ifeq ($(call my-dir),$(call project-path-for,qcom-audio))
ifneq ($(filter msm8960 msm8226 msm8x26 msm8974 msm8x74,$(TARGET_BOARD_PLATFORM)),)
diff --git a/hal/Android.mk b/hal/Android.mk
index b7acf4c0..9d1fec90 100644
--- a/hal/Android.mk
+++ b/hal/Android.mk
@@ -43,6 +43,22 @@ ifneq ($(strip $(PRODUCT_BRAND)),google)
LOCAL_CFLAGS += -DDISABLE_TMUS_AUDIO
endif
+ifneq ($(filter msm8974 msm8226,$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(strip $(AUDIO_FEATURE_DISABLED_WMA_OFFLOAD_DISABLED)),true)
+ LOCAL_CFLAGS += -DWMA_OFFLOAD_ENABLED
+ LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
+ LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+endif
+endif
+
+ifneq ($(filter msm8974 msm8226,$(TARGET_BOARD_PLATFORM)),)
+ifneq ($(strip $(AUDIO_FEATURE_DISABLED_MP2_OFFLOAD)),true)
+ LOCAL_CFLAGS += -DMP2_OFFLOAD_ENABLED
+ LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
+ LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+endif
+endif
+
ifeq ($(strip $(AUDIO_FEATURE_ENABLED_FLAC_OFFLOAD)),true)
LOCAL_CFLAGS += -DFLAC_OFFLOAD_ENABLED
endif
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index f338cc3e..ef5e6ad4 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -169,6 +169,9 @@ static bool is_supported_format(audio_format_t format)
{
if (format == AUDIO_FORMAT_MP3 ||
format == AUDIO_FORMAT_AAC ||
+ format == AUDIO_FORMAT_WMA ||
+ format == AUDIO_FORMAT_WMA_PRO ||
+ format == AUDIO_FORMAT_MP2 ||
#ifdef FLAC_OFFLOAD_ENABLED
format == AUDIO_FORMAT_FLAC ||
#endif
@@ -190,6 +193,19 @@ static int get_snd_codec_id(audio_format_t format)
case AUDIO_FORMAT_AAC:
id = SND_AUDIOCODEC_AAC;
break;
+#ifdef WMA_OFFLOAD_ENABLED
+ case AUDIO_FORMAT_WMA:
+ id = SND_AUDIOCODEC_WMA;
+ break;
+ case AUDIO_FORMAT_WMA_PRO:
+ id = SND_AUDIOCODEC_WMA_PRO;
+ break;
+#endif
+#ifdef MP2_OFFLOAD_ENABLED
+ case AUDIO_FORMAT_MP2:
+ id = SND_AUDIOCODEC_MP2;
+ break;
+#endif
case AUDIO_FORMAT_PCM_16_BIT_OFFLOAD:
case AUDIO_FORMAT_PCM_24_BIT_OFFLOAD:
id = SND_AUDIOCODEC_PCM;
@@ -1395,6 +1411,45 @@ static int parse_compress_metadata(struct stream_out *out, struct str_parms *par
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;
}
@@ -1475,7 +1530,7 @@ static int out_set_parameters(struct audio_stream *stream, const char *kvpairs)
if (out->usecase == USECASE_AUDIO_PLAYBACK_OFFLOAD) {
pthread_mutex_lock(&out->lock);
- parse_compress_metadata(out, parms);
+ ret = parse_compress_metadata(out, parms);
pthread_mutex_unlock(&out->lock);
}