diff options
author | Naresh Tanniru <ntanniru@codeaurora.org> | 2016-01-27 17:26:41 +0530 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-02-03 06:11:25 -0800 |
commit | 34a303cb347196c1ae7dc2c6c20a4c4152dadb90 (patch) | |
tree | 99aa0955f8c94fa37e2d2685c62e0e8ebcbe69e5 | |
parent | cab935a6146f44e54c64d7e38a0c59c3f3a914e8 (diff) | |
download | android_hardware_qcom_audio-34a303cb347196c1ae7dc2c6c20a4c4152dadb90.tar.gz android_hardware_qcom_audio-34a303cb347196c1ae7dc2c6c20a4c4152dadb90.tar.bz2 android_hardware_qcom_audio-34a303cb347196c1ae7dc2c6c20a4c4152dadb90.zip |
hal: Remove alac, ape from hardware decoder list
- Alac, ape playback is not working during voice call
- DSP only decoders are not supported during voice call
due to MIPS limitation
- Remove alac, ape codecs from DSP only decoder list
as software OMX decoders are available
CRs-Fixed: 967679
Change-Id: I6df10e0033ebbe46f339fb934ca6c2df3622c901
-rw-r--r-- | hal/msm8916/platform.c | 30 | ||||
-rw-r--r-- | hal/msm8974/platform.c | 31 |
2 files changed, 57 insertions, 4 deletions
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c index 82aa6969..48394514 100644 --- a/hal/msm8916/platform.c +++ b/hal/msm8916/platform.c @@ -137,6 +137,7 @@ #define EVENT_EXTERNAL_SPK_2 "qc_ext_spk_2" #define EVENT_EXTERNAL_MIC "qc_ext_mic" #define MAX_CAL_NAME 20 +#define MAX_MIME_TYPE_LENGTH 30 char cal_name_info[WCD9XXX_MAX_CAL][MAX_CAL_NAME] = { [WCD9XXX_ANC_CAL] = "anc_cal", @@ -148,7 +149,7 @@ char cal_name_info[WCD9XXX_MAX_CAL][MAX_CAL_NAME] = { #define AUDIO_PARAMETER_IS_HW_DECODER_SESSION_AVAILABLE "is_hw_dec_session_available" -char * dsp_only_decoders_mime[] = { +char dsp_only_decoders_mime[][MAX_MIME_TYPE_LENGTH] = { "audio/x-ms-wma" /* wma*/ , "audio/x-ms-wma-lossless" /* wma lossless */ , "audio/x-ms-wma-pro" /* wma prop */ , @@ -1266,7 +1267,11 @@ void close_csd_client(struct csd_data *csd) static void set_platform_defaults() { - int32_t dev; + int32_t dev, count = 0; + char dsp_decoder_property[PROPERTY_VALUE_MAX]; + const char *MEDIA_MIMETYPE_AUDIO_ALAC = "audio/alac"; + const char *MEDIA_MIMETYPE_AUDIO_APE = "audio/x-ape"; + for (dev = 0; dev < SND_DEVICE_MAX; dev++) { backend_table[dev] = NULL; } @@ -1295,6 +1300,27 @@ static void set_platform_defaults() backend_table[SND_DEVICE_OUT_TRANSMISSION_FM] = strdup("transmission-fm"); backend_table[SND_DEVICE_OUT_HEADPHONES_44_1] = strdup("headphones-44.1"); backend_table[SND_DEVICE_OUT_VOICE_SPEAKER_VBAT] = strdup("vbat-voice-speaker"); + + /*remove ALAC & APE from DSP decoder list based on software decoder availability*/ + for (count = 0; count < sizeof(dsp_only_decoders_mime)/sizeof(dsp_only_decoders_mime[0]); + count++) { + + if (!strncmp(MEDIA_MIMETYPE_AUDIO_ALAC, dsp_only_decoders_mime[count], + strlen(dsp_only_decoders_mime[count]))) { + + if(property_get_bool("use.qti.sw.alac.decoder", false)) { + ALOGD("Alac software decoder is available...removing alac from DSP decoder list"); + strncpy(dsp_only_decoders_mime[count],"none",5); + } + } else if (!strncmp(MEDIA_MIMETYPE_AUDIO_APE, dsp_only_decoders_mime[count], + strlen(dsp_only_decoders_mime[count]))) { + + if(property_get_bool("use.qti.sw.ape.decoder", false)) { + ALOGD("APE software decoder is available...removing ape from DSP decoder list"); + strncpy(dsp_only_decoders_mime[count],"none",5); + } + } + } } void get_cvd_version(char *cvd_version, struct audio_device *adev) diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c index 545df30b..e0915478 100644 --- a/hal/msm8974/platform.c +++ b/hal/msm8974/platform.c @@ -128,6 +128,7 @@ #define EVENT_EXTERNAL_SPK_2 "qc_ext_spk_2" #define EVENT_EXTERNAL_MIC "qc_ext_mic" #define MAX_CAL_NAME 20 +#define MAX_MIME_TYPE_LENGTH 30 char cal_name_info[WCD9XXX_MAX_CAL][MAX_CAL_NAME] = { [WCD9XXX_ANC_CAL] = "anc_cal", @@ -137,7 +138,7 @@ char cal_name_info[WCD9XXX_MAX_CAL][MAX_CAL_NAME] = { #define AUDIO_PARAMETER_IS_HW_DECODER_SESSION_ALLOWED "is_hw_dec_session_allowed" -char * dsp_only_decoders_mime[] = { +char dsp_only_decoders_mime[][MAX_MIME_TYPE_LENGTH] = { "audio/x-ms-wma" /* wma*/ , "audio/x-ms-wma-lossless" /* wma lossless */ , "audio/x-ms-wma-pro" /* wma prop */ , @@ -1028,7 +1029,11 @@ static bool platform_is_i2s_ext_modem(const char *snd_card_name, static void set_platform_defaults() { - int32_t dev; + int32_t dev, count = 0; + char dsp_decoder_property[PROPERTY_VALUE_MAX]; + const char *MEDIA_MIMETYPE_AUDIO_ALAC = "audio/alac"; + const char *MEDIA_MIMETYPE_AUDIO_APE = "audio/x-ape"; + for (dev = 0; dev < SND_DEVICE_MAX; dev++) { backend_table[dev] = NULL; } @@ -1059,6 +1064,28 @@ static void set_platform_defaults() backend_table[SND_DEVICE_OUT_HEADPHONES] = strdup("headphones"); backend_table[SND_DEVICE_OUT_HEADPHONES_44_1] = strdup("headphones-44.1"); backend_table[SND_DEVICE_OUT_VOICE_SPEAKER_VBAT] = strdup("voice-speaker-vbat"); + + + /*remove ALAC & APE from DSP decoder list based on software decoder availability*/ + for (count = 0; count < sizeof(dsp_only_decoders_mime)/sizeof(dsp_only_decoders_mime[0]); + count++) { + + if (!strncmp(MEDIA_MIMETYPE_AUDIO_ALAC, dsp_only_decoders_mime[count], + strlen(dsp_only_decoders_mime[count]))) { + + if(property_get_bool("use.qti.sw.alac.decoder", false)) { + ALOGD("Alac software decoder is available...removing alac from DSP decoder list"); + strncpy(dsp_only_decoders_mime[count],"none",5); + } + } else if (!strncmp(MEDIA_MIMETYPE_AUDIO_APE, dsp_only_decoders_mime[count], + strlen(dsp_only_decoders_mime[count]))) { + + if(property_get_bool("use.qti.sw.ape.decoder", false)) { + ALOGD("APE software decoder is available...removing ape from DSP decoder list"); + strncpy(dsp_only_decoders_mime[count],"none",5); + } + } + } } void get_cvd_version(char *cvd_version, struct audio_device *adev) |