Loading hal/Android.mk +11 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr ifeq ($(strip $(AUDIO_FEATURE_ENABLED_HDMI_EDID)),true) LOCAL_SRC_FILES += edid.c LOCAL_CFLAGS := -DHDMI_EDID_ENABLED endif ifeq ($(strip $(AUDIO_USE_LL_AS_PRIMARY_OUTPUT)),true) Loading @@ -68,6 +69,10 @@ ifeq ($(strip $(AUDIO_FEATURE_ENABLED_ANC_HEADSET)),true) LOCAL_CFLAGS += -DANC_HEADSET_ENABLED endif ifeq ($(strip $(AUDIO_FEATURE_ENABLED_VBAT_MONITOR)),true) LOCAL_CFLAGS += -DVBAT_MONITOR_ENABLED endif ifeq ($(strip $(AUDIO_FEATURE_ENABLED_FLUENCE)),true) LOCAL_CFLAGS += -DFLUENCE_ENABLED endif Loading Loading @@ -251,6 +256,12 @@ ifeq ($(strip $(AUDIO_FEATURE_ENABLED_LISTEN)),true) LOCAL_SRC_FILES += audio_extn/listen.c endif ifeq ($(strip $(AUDIO_FEATURE_ENABLED_EXT_HDMI)),true) LOCAL_CFLAGS += -DAUDIO_EXTERNAL_HDMI_ENABLED LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/mm-audio/audio-parsers LOCAL_SHARED_LIBRARIES += libaudioparsers endif ifeq ($(strip $(BOARD_SUPPORTS_SOUND_TRIGGER)),true) LOCAL_CFLAGS += -DSOUND_TRIGGER_ENABLED LOCAL_CFLAGS += -DSOUND_TRIGGER_PLATFORM_NAME=$(TARGET_BOARD_PLATFORM) Loading hal/audio_extn/audio_defs.h +2 −0 Original line number Diff line number Diff line Loading @@ -72,6 +72,8 @@ #define AUDIO_OFFLOAD_CODEC_APE_SAMPLE_RATE "music_offload_ape_sample_rate" #define AUDIO_OFFLOAD_CODEC_APE_SEEK_TABLE_PRESENT "music_offload_seek_table_present" #define AUDIO_OFFLOAD_CODEC_VORBIS_BITSTREAM_FMT "music_offload_vorbis_bitstream_fmt" /* Query handle fm parameter*/ #define AUDIO_PARAMETER_KEY_HANDLE_FM "handle_fm" Loading hal/audio_extn/audio_extn.c +69 −38 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ struct audio_extn_module { bool custom_stereo_enabled; uint32_t proxy_channel_num; bool hpx_enabled; bool vbat_enabled; }; static struct audio_extn_module aextnmod = { Loading @@ -70,6 +71,7 @@ static struct audio_extn_module aextnmod = { .custom_stereo_enabled = 0, .proxy_channel_num = 2, .hpx_enabled = 0, .vbat_enabled = 0, }; #define AUDIO_PARAMETER_KEY_ANC "anc_enabled" Loading Loading @@ -216,6 +218,27 @@ void audio_extn_check_and_set_dts_hpx_state(const struct audio_device *adev) } #endif #ifdef VBAT_MONITOR_ENABLED bool audio_extn_is_vbat_enabled(void) { ALOGD("%s: status: %d", __func__, aextnmod.vbat_enabled); return (aextnmod.vbat_enabled ? true: false); } bool audio_extn_can_use_vbat(void) { char prop_vbat_enabled[PROPERTY_VALUE_MAX] = "false"; property_get("persist.audio.vbat.enabled", prop_vbat_enabled, "0"); if (!strncmp("true", prop_vbat_enabled, 4)) { aextnmod.vbat_enabled = 1; } ALOGD("%s: vbat.enabled property is set to %s", __func__, prop_vbat_enabled); return (aextnmod.vbat_enabled ? true: false); } #endif #ifndef ANC_HEADSET_ENABLED #define audio_extn_set_anc_parameters(adev, parms) (0) #else Loading Loading @@ -682,25 +705,23 @@ int audio_extn_parse_compress_metadata(struct stream_out *out, if (out->format == AUDIO_FORMAT_FLAC) { ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_FLAC_MIN_BLK_SIZE, value, sizeof(value)); if (ret >= 0) { out->gapless_mdata.min_blk_size = out->compr_config.codec->options.flac_dec.min_blk_size = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_FLAC_MAX_BLK_SIZE, value, sizeof(value)); if (ret >= 0) { out->gapless_mdata.max_blk_size = out->compr_config.codec->options.flac_dec.max_blk_size = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_FLAC_MIN_FRAME_SIZE, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.flac_dec.min_frame_size = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_FLAC_MAX_FRAME_SIZE, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.flac_dec.max_frame_size = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ALOGV("FLAC metadata: min_blk_size %d, max_blk_size %d min_frame_size %d max_frame_size %d", out->compr_config.codec->options.flac_dec.min_blk_size, Loading @@ -713,63 +734,63 @@ int audio_extn_parse_compress_metadata(struct stream_out *out, ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_FRAME_LENGTH, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.frame_length = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_COMPATIBLE_VERSION, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.compatible_version = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_BIT_DEPTH, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.bit_depth = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_PB, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.pb = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_MB, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.mb = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_KB, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.kb = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_NUM_CHANNELS, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.num_channels = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_MAX_RUN, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.max_run = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_MAX_FRAME_BYTES, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.max_frame_bytes = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_AVG_BIT_RATE, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.avg_bit_rate = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_SAMPLING_RATE, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.sample_rate = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_CHANNEL_LAYOUT_TAG, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.channel_layout_tag = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ALOGV("ALAC CSD values: frameLength %d bitDepth %d numChannels %d" " maxFrameBytes %d, avgBitRate %d, sampleRate %d", Loading @@ -785,52 +806,52 @@ int audio_extn_parse_compress_metadata(struct stream_out *out, ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_COMPATIBLE_VERSION, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.compatible_version = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_COMPRESSION_LEVEL, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.compression_level = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_FORMAT_FLAGS, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.format_flags = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_BLOCKS_PER_FRAME, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.blocks_per_frame = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_FINAL_FRAME_BLOCKS, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.final_frame_blocks = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_TOTAL_FRAMES, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.total_frames = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_BITS_PER_SAMPLE, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.bits_per_sample = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_NUM_CHANNELS, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.num_channels = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_SAMPLE_RATE, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.sample_rate = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_SEEK_TABLE_PRESENT, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.seek_table_present = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ALOGV("APE CSD values: compatibleVersion %d compressionLevel %d" " formatFlags %d blocksPerFrame %d finalFrameBlocks %d" Loading @@ -849,49 +870,59 @@ int audio_extn_parse_compress_metadata(struct stream_out *out, } else if (out->format == AUDIO_FORMAT_VORBIS) { ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_VORBIS_BITSTREAM_FMT, value, sizeof(value)); if (ret >= 0) { // transcoded bitstream mode out->compr_config.codec->options.vorbis_dec.bit_stream_fmt = 1; out->send_new_metadata = 1; out->compr_config.codec->options.vorbis_dec.bit_stream_fmt = (atoi(value) > 0) ? 1 : 0; out->is_compr_metadata_avail = true; } } else 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); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_AVG_BIT_RATE, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.wma.avg_bit_rate = atoi(value); out->is_compr_metadata_avail = true; } 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); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } 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); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } 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); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } 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); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } 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); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } 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); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ALOGV("WMA params: fmt %x, balgn %x, sr %d, chmsk %x, encop %x, op1 %x, op2 %x", ALOGV("WMA params: fmt %x, bit rate %x, balgn %x, sr %d, chmsk %x" " encop %x, op1 %x, op2 %x", out->compr_config.codec->format, out->compr_config.codec->options.wma.avg_bit_rate, 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, Loading hal/audio_extn/audio_extn.h +15 −0 Original line number Diff line number Diff line Loading @@ -117,6 +117,14 @@ bool audio_extn_should_use_fb_anc(void); bool audio_extn_should_use_handset_anc(int in_channels); #endif #ifndef VBAT_MONITOR_ENABLED #define audio_extn_is_vbat_enabled() (0) #define audio_extn_can_use_vbat() (0) #else bool audio_extn_is_vbat_enabled(void); bool audio_extn_can_use_vbat(void); #endif #ifndef FLUENCE_ENABLED #define audio_extn_set_fluence_parameters(adev, parms) (0) #define audio_extn_get_fluence_parameters(adev, query, reply) (0) Loading Loading @@ -476,6 +484,7 @@ typedef enum { int b64decode(char *inp, int ilen, uint8_t* outp); int b64encode(uint8_t *inp, int ilen, char* outp); int read_line_from_file(const char *path, char *buf, size_t count); #ifndef KPI_OPTIMIZE_ENABLED #define audio_extn_perf_lock_init() (0) Loading @@ -486,4 +495,10 @@ int audio_extn_perf_lock_init(void); void audio_extn_perf_lock_acquire(void); void audio_extn_perf_lock_release(void); #endif /* KPI_OPTIMIZE_ENABLED */ #ifndef AUDIO_EXTERNAL_HDMI_ENABLED #define setChannelStatus(out, buffer, bytes) (0) #else void setChannelStatus(struct stream_out *out, char * buffer, size_t bytes); #endif #endif /* AUDIO_EXTN_H */ hal/audio_extn/fm.c +1 −1 Original line number Diff line number Diff line Loading @@ -251,7 +251,7 @@ void audio_extn_fm_set_parameters(struct audio_device *adev, * Currently, platform_get_wsa_mode will directly return * 1 when wsa is in analog mode. */ if (platform_get_wsa_mode(adev->platform) == 1) { if (platform_get_wsa_mode(adev) == 1) { fm_stop(adev); fm_start(adev); } else { Loading Loading
hal/Android.mk +11 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,7 @@ LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr ifeq ($(strip $(AUDIO_FEATURE_ENABLED_HDMI_EDID)),true) LOCAL_SRC_FILES += edid.c LOCAL_CFLAGS := -DHDMI_EDID_ENABLED endif ifeq ($(strip $(AUDIO_USE_LL_AS_PRIMARY_OUTPUT)),true) Loading @@ -68,6 +69,10 @@ ifeq ($(strip $(AUDIO_FEATURE_ENABLED_ANC_HEADSET)),true) LOCAL_CFLAGS += -DANC_HEADSET_ENABLED endif ifeq ($(strip $(AUDIO_FEATURE_ENABLED_VBAT_MONITOR)),true) LOCAL_CFLAGS += -DVBAT_MONITOR_ENABLED endif ifeq ($(strip $(AUDIO_FEATURE_ENABLED_FLUENCE)),true) LOCAL_CFLAGS += -DFLUENCE_ENABLED endif Loading Loading @@ -251,6 +256,12 @@ ifeq ($(strip $(AUDIO_FEATURE_ENABLED_LISTEN)),true) LOCAL_SRC_FILES += audio_extn/listen.c endif ifeq ($(strip $(AUDIO_FEATURE_ENABLED_EXT_HDMI)),true) LOCAL_CFLAGS += -DAUDIO_EXTERNAL_HDMI_ENABLED LOCAL_C_INCLUDES += $(TARGET_OUT_HEADERS)/mm-audio/audio-parsers LOCAL_SHARED_LIBRARIES += libaudioparsers endif ifeq ($(strip $(BOARD_SUPPORTS_SOUND_TRIGGER)),true) LOCAL_CFLAGS += -DSOUND_TRIGGER_ENABLED LOCAL_CFLAGS += -DSOUND_TRIGGER_PLATFORM_NAME=$(TARGET_BOARD_PLATFORM) Loading
hal/audio_extn/audio_defs.h +2 −0 Original line number Diff line number Diff line Loading @@ -72,6 +72,8 @@ #define AUDIO_OFFLOAD_CODEC_APE_SAMPLE_RATE "music_offload_ape_sample_rate" #define AUDIO_OFFLOAD_CODEC_APE_SEEK_TABLE_PRESENT "music_offload_seek_table_present" #define AUDIO_OFFLOAD_CODEC_VORBIS_BITSTREAM_FMT "music_offload_vorbis_bitstream_fmt" /* Query handle fm parameter*/ #define AUDIO_PARAMETER_KEY_HANDLE_FM "handle_fm" Loading
hal/audio_extn/audio_extn.c +69 −38 Original line number Diff line number Diff line Loading @@ -62,6 +62,7 @@ struct audio_extn_module { bool custom_stereo_enabled; uint32_t proxy_channel_num; bool hpx_enabled; bool vbat_enabled; }; static struct audio_extn_module aextnmod = { Loading @@ -70,6 +71,7 @@ static struct audio_extn_module aextnmod = { .custom_stereo_enabled = 0, .proxy_channel_num = 2, .hpx_enabled = 0, .vbat_enabled = 0, }; #define AUDIO_PARAMETER_KEY_ANC "anc_enabled" Loading Loading @@ -216,6 +218,27 @@ void audio_extn_check_and_set_dts_hpx_state(const struct audio_device *adev) } #endif #ifdef VBAT_MONITOR_ENABLED bool audio_extn_is_vbat_enabled(void) { ALOGD("%s: status: %d", __func__, aextnmod.vbat_enabled); return (aextnmod.vbat_enabled ? true: false); } bool audio_extn_can_use_vbat(void) { char prop_vbat_enabled[PROPERTY_VALUE_MAX] = "false"; property_get("persist.audio.vbat.enabled", prop_vbat_enabled, "0"); if (!strncmp("true", prop_vbat_enabled, 4)) { aextnmod.vbat_enabled = 1; } ALOGD("%s: vbat.enabled property is set to %s", __func__, prop_vbat_enabled); return (aextnmod.vbat_enabled ? true: false); } #endif #ifndef ANC_HEADSET_ENABLED #define audio_extn_set_anc_parameters(adev, parms) (0) #else Loading Loading @@ -682,25 +705,23 @@ int audio_extn_parse_compress_metadata(struct stream_out *out, if (out->format == AUDIO_FORMAT_FLAC) { ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_FLAC_MIN_BLK_SIZE, value, sizeof(value)); if (ret >= 0) { out->gapless_mdata.min_blk_size = out->compr_config.codec->options.flac_dec.min_blk_size = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_FLAC_MAX_BLK_SIZE, value, sizeof(value)); if (ret >= 0) { out->gapless_mdata.max_blk_size = out->compr_config.codec->options.flac_dec.max_blk_size = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_FLAC_MIN_FRAME_SIZE, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.flac_dec.min_frame_size = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_FLAC_MAX_FRAME_SIZE, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.flac_dec.max_frame_size = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ALOGV("FLAC metadata: min_blk_size %d, max_blk_size %d min_frame_size %d max_frame_size %d", out->compr_config.codec->options.flac_dec.min_blk_size, Loading @@ -713,63 +734,63 @@ int audio_extn_parse_compress_metadata(struct stream_out *out, ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_FRAME_LENGTH, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.frame_length = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_COMPATIBLE_VERSION, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.compatible_version = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_BIT_DEPTH, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.bit_depth = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_PB, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.pb = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_MB, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.mb = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_KB, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.kb = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_NUM_CHANNELS, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.num_channels = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_MAX_RUN, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.max_run = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_MAX_FRAME_BYTES, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.max_frame_bytes = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_AVG_BIT_RATE, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.avg_bit_rate = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_SAMPLING_RATE, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.sample_rate = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_ALAC_CHANNEL_LAYOUT_TAG, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.alac.channel_layout_tag = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ALOGV("ALAC CSD values: frameLength %d bitDepth %d numChannels %d" " maxFrameBytes %d, avgBitRate %d, sampleRate %d", Loading @@ -785,52 +806,52 @@ int audio_extn_parse_compress_metadata(struct stream_out *out, ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_COMPATIBLE_VERSION, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.compatible_version = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_COMPRESSION_LEVEL, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.compression_level = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_FORMAT_FLAGS, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.format_flags = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_BLOCKS_PER_FRAME, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.blocks_per_frame = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_FINAL_FRAME_BLOCKS, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.final_frame_blocks = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_TOTAL_FRAMES, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.total_frames = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_BITS_PER_SAMPLE, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.bits_per_sample = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_NUM_CHANNELS, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.num_channels = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_SAMPLE_RATE, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.sample_rate = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_APE_SEEK_TABLE_PRESENT, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.ape.seek_table_present = atoi(value); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ALOGV("APE CSD values: compatibleVersion %d compressionLevel %d" " formatFlags %d blocksPerFrame %d finalFrameBlocks %d" Loading @@ -849,49 +870,59 @@ int audio_extn_parse_compress_metadata(struct stream_out *out, } else if (out->format == AUDIO_FORMAT_VORBIS) { ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_VORBIS_BITSTREAM_FMT, value, sizeof(value)); if (ret >= 0) { // transcoded bitstream mode out->compr_config.codec->options.vorbis_dec.bit_stream_fmt = 1; out->send_new_metadata = 1; out->compr_config.codec->options.vorbis_dec.bit_stream_fmt = (atoi(value) > 0) ? 1 : 0; out->is_compr_metadata_avail = true; } } else 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); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ret = str_parms_get_str(parms, AUDIO_OFFLOAD_CODEC_AVG_BIT_RATE, value, sizeof(value)); if (ret >= 0) { out->compr_config.codec->options.wma.avg_bit_rate = atoi(value); out->is_compr_metadata_avail = true; } 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); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } 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); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } 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); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } 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); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } 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); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } 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); out->send_new_metadata = 1; out->is_compr_metadata_avail = true; } ALOGV("WMA params: fmt %x, balgn %x, sr %d, chmsk %x, encop %x, op1 %x, op2 %x", ALOGV("WMA params: fmt %x, bit rate %x, balgn %x, sr %d, chmsk %x" " encop %x, op1 %x, op2 %x", out->compr_config.codec->format, out->compr_config.codec->options.wma.avg_bit_rate, 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, Loading
hal/audio_extn/audio_extn.h +15 −0 Original line number Diff line number Diff line Loading @@ -117,6 +117,14 @@ bool audio_extn_should_use_fb_anc(void); bool audio_extn_should_use_handset_anc(int in_channels); #endif #ifndef VBAT_MONITOR_ENABLED #define audio_extn_is_vbat_enabled() (0) #define audio_extn_can_use_vbat() (0) #else bool audio_extn_is_vbat_enabled(void); bool audio_extn_can_use_vbat(void); #endif #ifndef FLUENCE_ENABLED #define audio_extn_set_fluence_parameters(adev, parms) (0) #define audio_extn_get_fluence_parameters(adev, query, reply) (0) Loading Loading @@ -476,6 +484,7 @@ typedef enum { int b64decode(char *inp, int ilen, uint8_t* outp); int b64encode(uint8_t *inp, int ilen, char* outp); int read_line_from_file(const char *path, char *buf, size_t count); #ifndef KPI_OPTIMIZE_ENABLED #define audio_extn_perf_lock_init() (0) Loading @@ -486,4 +495,10 @@ int audio_extn_perf_lock_init(void); void audio_extn_perf_lock_acquire(void); void audio_extn_perf_lock_release(void); #endif /* KPI_OPTIMIZE_ENABLED */ #ifndef AUDIO_EXTERNAL_HDMI_ENABLED #define setChannelStatus(out, buffer, bytes) (0) #else void setChannelStatus(struct stream_out *out, char * buffer, size_t bytes); #endif #endif /* AUDIO_EXTN_H */
hal/audio_extn/fm.c +1 −1 Original line number Diff line number Diff line Loading @@ -251,7 +251,7 @@ void audio_extn_fm_set_parameters(struct audio_device *adev, * Currently, platform_get_wsa_mode will directly return * 1 when wsa is in analog mode. */ if (platform_get_wsa_mode(adev->platform) == 1) { if (platform_get_wsa_mode(adev) == 1) { fm_stop(adev); fm_start(adev); } else { Loading