Loading hal/Android.mk +5 −0 Original line number Diff line number Diff line Loading @@ -87,6 +87,11 @@ ifneq ($(strip $(AUDIO_FEATURE_DISABLED_COMPRESS_CAPTURE)),true) LOCAL_SRC_FILES += audio_extn/compress_capture.c endif ifneq ($(strip $(AUDIO_FEATURE_DISABLED_DS1_DOLBY_DDP)),true) LOCAL_CFLAGS += -DDS1_DOLBY_DDP_ENABLED LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include endif LOCAL_SHARED_LIBRARIES := \ liblog \ libcutils \ Loading hal/audio_extn/audio_extn.c +56 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,8 @@ #include "audio_hw.h" #include "audio_extn.h" #include "sound/compress_params.h" #define MAX_SLEEP_RETRY 100 #define WIFI_INIT_WAIT_SLEEP 50 Loading Loading @@ -256,3 +258,57 @@ int32_t audio_extn_read_xml(struct audio_device *adev, uint32_t mixer_card, return 0; } #endif /* AUXPCM_BT_ENABLED */ #ifdef DS1_DOLBY_DDP_ENABLED bool audio_extn_dolby_is_supported_format(audio_format_t format) { if (format == AUDIO_FORMAT_AC3 || format == AUDIO_FORMAT_EAC3) return true; else return false; } int audio_extn_dolby_get_snd_codec_id(audio_format_t format) { int id = 0; switch (format) { case AUDIO_FORMAT_AC3: id = SND_AUDIOCODEC_AC3; break; case AUDIO_FORMAT_EAC3: id = SND_AUDIOCODEC_EAC3; break; default: ALOGE("%s: Unsupported audio format :%x", __func__, format); } return id; } int audio_extn_dolby_set_DMID(struct audio_device *adev) { struct mixer_ctl *ctl; const char *mixer_ctl_name = "DS1 Security"; char c_dmid[128] = {0}; int i_dmid, ret; property_get("dmid",c_dmid,"0"); i_dmid = atoi(c_dmid); ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name); if (!ctl) { ALOGE("%s: Could not get ctl for mixer cmd - %s", __func__, mixer_ctl_name); return -EINVAL; } ALOGV("%s Dolby device manufacturer id is:%d",__func__,i_dmid); ret = mixer_ctl_set_value(ctl, 0, i_dmid); return ret; } #endif /* DS1_DOLBY_DDP_ENABLED */ hal/audio_extn/audio_extn.h +10 −0 Original line number Diff line number Diff line Loading @@ -157,4 +157,14 @@ size_t audio_extn_compr_cap_read(struct stream_in *in, void audio_extn_compr_cap_deinit(); #endif #ifndef DS1_DOLBY_DDP_ENABLED #define audio_extn_dolby_is_supported_format(format) (0) #define audio_extn_dolby_get_snd_codec_id(format) (0) #define audio_extn_dolby_set_DMID(adev) (0) #else bool audio_extn_dolby_is_supported_format(audio_format_t format); int audio_extn_dolby_get_snd_codec_id(audio_format_t format); int audio_extn_dolby_set_DMID(struct audio_device *adev); #endif #endif /* AUDIO_EXTN_H */ hal/audio_hw.c +18 −3 Original line number Diff line number Diff line Loading @@ -165,7 +165,7 @@ static int get_snd_codec_id(audio_format_t format) id = SND_AUDIOCODEC_AAC; break; default: ALOGE("%s: Unsupported audio format", __func__); ALOGE("%s: Unsupported audio format :%x", __func__, format); } return id; Loading Loading @@ -2022,7 +2022,8 @@ static int adev_open_output_stream(struct audio_hw_device *dev, ret = -EINVAL; goto error_open; } if (!is_supported_format(config->offload_info.format)) { if (!is_supported_format(config->offload_info.format) && !audio_extn_dolby_is_supported_format(config->offload_info.format)) { ALOGE("%s: Unsupported audio format", __func__); ret = -EINVAL; goto error_open; Loading @@ -2045,6 +2046,10 @@ static int adev_open_output_stream(struct audio_hw_device *dev, out->stream.drain = out_drain; out->stream.flush = out_flush; if (audio_extn_dolby_is_supported_format(config->offload_info.format)) out->compr_config.codec->id = audio_extn_dolby_get_snd_codec_id(config->offload_info.format); else out->compr_config.codec->id = get_snd_codec_id(config->offload_info.format); out->compr_config.fragment_size = COMPRESS_OFFLOAD_FRAGMENT_SIZE; Loading @@ -2065,6 +2070,16 @@ static int adev_open_output_stream(struct audio_hw_device *dev, ALOGV("%s: offloaded output offload_info version %04x bit rate %d", __func__, config->offload_info.version, config->offload_info.bit_rate); if (audio_extn_dolby_is_supported_format(out->format)) { ret = audio_extn_dolby_set_DMID(adev); if (ret != 0) { ALOGE("%s: Dolby DMID cannot be set error:%d", __func__, ret); goto error_open; } } } else if (out->flags & AUDIO_OUTPUT_FLAG_INCALL_MUSIC) { ret = voice_check_and_set_incall_music_usecase(adev, out); if (ret != 0) { Loading Loading
hal/Android.mk +5 −0 Original line number Diff line number Diff line Loading @@ -87,6 +87,11 @@ ifneq ($(strip $(AUDIO_FEATURE_DISABLED_COMPRESS_CAPTURE)),true) LOCAL_SRC_FILES += audio_extn/compress_capture.c endif ifneq ($(strip $(AUDIO_FEATURE_DISABLED_DS1_DOLBY_DDP)),true) LOCAL_CFLAGS += -DDS1_DOLBY_DDP_ENABLED LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include endif LOCAL_SHARED_LIBRARIES := \ liblog \ libcutils \ Loading
hal/audio_extn/audio_extn.c +56 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,8 @@ #include "audio_hw.h" #include "audio_extn.h" #include "sound/compress_params.h" #define MAX_SLEEP_RETRY 100 #define WIFI_INIT_WAIT_SLEEP 50 Loading Loading @@ -256,3 +258,57 @@ int32_t audio_extn_read_xml(struct audio_device *adev, uint32_t mixer_card, return 0; } #endif /* AUXPCM_BT_ENABLED */ #ifdef DS1_DOLBY_DDP_ENABLED bool audio_extn_dolby_is_supported_format(audio_format_t format) { if (format == AUDIO_FORMAT_AC3 || format == AUDIO_FORMAT_EAC3) return true; else return false; } int audio_extn_dolby_get_snd_codec_id(audio_format_t format) { int id = 0; switch (format) { case AUDIO_FORMAT_AC3: id = SND_AUDIOCODEC_AC3; break; case AUDIO_FORMAT_EAC3: id = SND_AUDIOCODEC_EAC3; break; default: ALOGE("%s: Unsupported audio format :%x", __func__, format); } return id; } int audio_extn_dolby_set_DMID(struct audio_device *adev) { struct mixer_ctl *ctl; const char *mixer_ctl_name = "DS1 Security"; char c_dmid[128] = {0}; int i_dmid, ret; property_get("dmid",c_dmid,"0"); i_dmid = atoi(c_dmid); ctl = mixer_get_ctl_by_name(adev->mixer, mixer_ctl_name); if (!ctl) { ALOGE("%s: Could not get ctl for mixer cmd - %s", __func__, mixer_ctl_name); return -EINVAL; } ALOGV("%s Dolby device manufacturer id is:%d",__func__,i_dmid); ret = mixer_ctl_set_value(ctl, 0, i_dmid); return ret; } #endif /* DS1_DOLBY_DDP_ENABLED */
hal/audio_extn/audio_extn.h +10 −0 Original line number Diff line number Diff line Loading @@ -157,4 +157,14 @@ size_t audio_extn_compr_cap_read(struct stream_in *in, void audio_extn_compr_cap_deinit(); #endif #ifndef DS1_DOLBY_DDP_ENABLED #define audio_extn_dolby_is_supported_format(format) (0) #define audio_extn_dolby_get_snd_codec_id(format) (0) #define audio_extn_dolby_set_DMID(adev) (0) #else bool audio_extn_dolby_is_supported_format(audio_format_t format); int audio_extn_dolby_get_snd_codec_id(audio_format_t format); int audio_extn_dolby_set_DMID(struct audio_device *adev); #endif #endif /* AUDIO_EXTN_H */
hal/audio_hw.c +18 −3 Original line number Diff line number Diff line Loading @@ -165,7 +165,7 @@ static int get_snd_codec_id(audio_format_t format) id = SND_AUDIOCODEC_AAC; break; default: ALOGE("%s: Unsupported audio format", __func__); ALOGE("%s: Unsupported audio format :%x", __func__, format); } return id; Loading Loading @@ -2022,7 +2022,8 @@ static int adev_open_output_stream(struct audio_hw_device *dev, ret = -EINVAL; goto error_open; } if (!is_supported_format(config->offload_info.format)) { if (!is_supported_format(config->offload_info.format) && !audio_extn_dolby_is_supported_format(config->offload_info.format)) { ALOGE("%s: Unsupported audio format", __func__); ret = -EINVAL; goto error_open; Loading @@ -2045,6 +2046,10 @@ static int adev_open_output_stream(struct audio_hw_device *dev, out->stream.drain = out_drain; out->stream.flush = out_flush; if (audio_extn_dolby_is_supported_format(config->offload_info.format)) out->compr_config.codec->id = audio_extn_dolby_get_snd_codec_id(config->offload_info.format); else out->compr_config.codec->id = get_snd_codec_id(config->offload_info.format); out->compr_config.fragment_size = COMPRESS_OFFLOAD_FRAGMENT_SIZE; Loading @@ -2065,6 +2070,16 @@ static int adev_open_output_stream(struct audio_hw_device *dev, ALOGV("%s: offloaded output offload_info version %04x bit rate %d", __func__, config->offload_info.version, config->offload_info.bit_rate); if (audio_extn_dolby_is_supported_format(out->format)) { ret = audio_extn_dolby_set_DMID(adev); if (ret != 0) { ALOGE("%s: Dolby DMID cannot be set error:%d", __func__, ret); goto error_open; } } } else if (out->flags & AUDIO_OUTPUT_FLAG_INCALL_MUSIC) { ret = voice_check_and_set_incall_music_usecase(adev, out); if (ret != 0) { Loading