diff options
author | Basil Gello <vasek.gello@gmail.com> | 2018-05-21 18:29:12 +0300 |
---|---|---|
committer | Simon Shields <simon@lineageos.org> | 2018-06-12 09:19:35 +0200 |
commit | 0568baff8e3ce5d6b0658c5f9f58293f02ace413 (patch) | |
tree | c0dc74d75ef7d2fa750ddf1ce41a7387da496b7c | |
parent | 435ef7755b6d6e7eedd4682604948d76afa93057 (diff) | |
download | android_hardware_samsung-0568baff8e3ce5d6b0658c5f9f58293f02ace413.tar.gz android_hardware_samsung-0568baff8e3ce5d6b0658c5f9f58293f02ace413.tar.bz2 android_hardware_samsung-0568baff8e3ce5d6b0658c5f9f58293f02ace413.zip |
audio: Re-worked sound pre- and post-processing
In order to activate proprietary sound pre- and post-processing,
the following parts of audio HAL were revised:
* Activated ENABLE_PREPROCESSING directive in Android.mk
* Removed unused variables and functions
* Re-written set_preprocessor_echo_delay() function
Change-Id: I868087f422764895df7d2bc6bbf4bbd76672b8e7
-rw-r--r-- | audio/Android.mk | 2 | ||||
-rw-r--r-- | audio/audio_hw.c | 79 | ||||
-rw-r--r-- | audio/compress_offload.c | 6 |
3 files changed, 24 insertions, 63 deletions
diff --git a/audio/Android.mk b/audio/Android.mk index 3d9b14a..68790b6 100644 --- a/audio/Android.mk +++ b/audio/Android.mk @@ -51,7 +51,7 @@ LOCAL_C_INCLUDES += \ $(call include-path-for, audio-effects) LOCAL_CFLAGS := -Werror -Wall -#LOCAL_CFLAGS += -DPREPROCESSING_ENABLED +LOCAL_CFLAGS += -DPREPROCESSING_ENABLED #LOCAL_CFLAGS += -DHW_AEC_LOOPBACK LOCAL_MODULE := audio.primary.$(TARGET_BOOTLOADER_BOARD_NAME) diff --git a/audio/audio_hw.c b/audio/audio_hw.c index e179ca1..b91674b 100644 --- a/audio/audio_hw.c +++ b/audio/audio_hw.c @@ -1159,46 +1159,6 @@ static ssize_t read_frames(struct stream_in *in, void *buffer, ssize_t frames); static int do_in_standby_l(struct stream_in *in); #ifdef PREPROCESSING_ENABLED -static void get_capture_reference_delay(struct stream_in *in, - size_t frames __unused, - struct echo_reference_buffer *buffer) -{ - ALOGVV("%s: enter:)", __func__); - - /* read frames available in kernel driver buffer */ - unsigned int kernel_frames; - struct timespec tstamp; - long buf_delay; - long kernel_delay; - long delay_ns; - struct pcm_device *ref_device; - long rsmp_delay = 0; - - ref_device = node_to_item(list_tail(&in->pcm_dev_list), - struct pcm_device, stream_list_node); - - if (pcm_get_htimestamp(ref_device->pcm, &kernel_frames, &tstamp) < 0) { - buffer->time_stamp.tv_sec = 0; - buffer->time_stamp.tv_nsec = 0; - buffer->delay_ns = 0; - ALOGW("read get_capture_reference_delay(): pcm_htimestamp error"); - return; - } - - /* adjust render time stamp with delay added by current driver buffer. - * Add the duration of current frame as we want the render time of the last - * sample being written. */ - - kernel_delay = (long)(((int64_t)kernel_frames * 1000000000) / ref_device->pcm_profile->config.rate); - - buffer->time_stamp = tstamp; - buffer->delay_ns = kernel_delay; - - ALOGVV("get_capture_reference_delay_time_stamp Secs: [%10ld], nSecs: [%9ld], kernel_frames: [%5d]," - " delay_ns: [%d] , frames:[%zd]", - buffer->time_stamp.tv_sec , buffer->time_stamp.tv_nsec, kernel_frames, buffer->delay_ns, frames); -} - static void get_capture_delay(struct stream_in *in, size_t frames __unused, struct echo_reference_buffer *buffer) @@ -1295,12 +1255,13 @@ static int set_preprocessor_param(effect_handle_t handle, effect_param_t *param) { uint32_t size = sizeof(int); - uint32_t psize = ((param->psize - 1) / sizeof(int) + 1) * sizeof(int) + - param->vsize; + uint32_t bufsize = sizeof(effect_param_t) + + ((param->psize - 1) / sizeof(int) + 1) * sizeof(int) + + param->vsize; int status = (*handle)->command(handle, EFFECT_CMD_SET_PARAM, - sizeof (effect_param_t) + psize, + bufsize, param, &size, ¶m->status); @@ -1313,19 +1274,27 @@ static int set_preprocessor_param(effect_handle_t handle, static int set_preprocessor_echo_delay(effect_handle_t handle, int32_t delay_us) { - struct { - effect_param_t param; - uint32_t data_0; - int32_t data_1; - } buf; - memset(&buf, 0, sizeof(buf)); + const uint32_t param_size = sizeof(uint32_t); + const uint32_t value_size = sizeof(uint32_t); + + const uint32_t param_padded_size = + ((param_size - 1) / sizeof(int) + 1) * sizeof(int); + + const uint32_t bufsize = sizeof(effect_param_t) + + param_padded_size + value_size; + + uint8_t buf[bufsize]; + memset(&buf, 0, bufsize); + + effect_param_t *effect_param = (effect_param_t *)&buf; + + effect_param->psize = param_size; + effect_param->vsize = value_size; - buf.param.psize = sizeof(uint32_t); - buf.param.vsize = sizeof(uint32_t); - buf.data_0 = AEC_PARAM_ECHO_DELAY; - buf.data_1 = delay_us; + *(uint32_t *)&buf[sizeof(effect_param_t)] = AEC_PARAM_ECHO_DELAY; + *(int32_t *)&buf[sizeof(effect_param_t) + param_padded_size] = delay_us; - return set_preprocessor_param(handle, &buf.param); + return set_preprocessor_param(handle, effect_param); } static void push_echo_reference(struct stream_in *in, size_t frames) @@ -1335,7 +1304,6 @@ static void push_echo_reference(struct stream_in *in, size_t frames) * in->ref_buf_frames is updated with frames available in in->ref_buf */ int32_t delay_us = update_echo_reference(in, frames)/1000; - int32_t size_in_bytes = 0; int i; audio_buffer_t buf; @@ -1477,7 +1445,6 @@ static int get_playback_delay(struct stream_out *out, { unsigned int kernel_frames; int status; - int primary_pcm = 0; struct pcm_device *pcm_device; pcm_device = node_to_item(list_head(&out->pcm_dev_list), diff --git a/audio/compress_offload.c b/audio/compress_offload.c index 5ce865e..fccc7db 100644 --- a/audio/compress_offload.c +++ b/audio/compress_offload.c @@ -291,12 +291,6 @@ ssize_t out_write_offload(struct audio_stream_out *stream, const void *buffer, out->offload_state = OFFLOAD_STATE_PLAYING; } pthread_mutex_unlock(&out->lock); -#ifdef PREPROCESSING_ENABLED - if (in) { - /* This mutex was left locked iff in != NULL */ - pthread_mutex_unlock(&adev->lock_inputs); - } -#endif return ret; } |