Merge "hal: Rename & move platform_parser.c"
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 09b9bea..1b008db 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -152,8 +152,55 @@
static unsigned int audio_device_ref_count;
static int set_voice_volume_l(struct audio_device *adev, float volume);
-static uint32_t get_offload_buffer_size();
-static int set_gapless_mode(struct audio_device *adev);
+
+/* Read offload buffer size from a property.
+ * If value is not power of 2 round it to
+ * power of 2.
+ */
+static uint32_t get_offload_buffer_size()
+{
+ char value[PROPERTY_VALUE_MAX] = {0};
+ uint32_t fragment_size = COMPRESS_OFFLOAD_FRAGMENT_SIZE;
+ if((property_get("audio.offload.buffer.size.kb", value, "")) &&
+ atoi(value)) {
+ fragment_size = atoi(value) * 1024;
+ //ring buffer size needs to be 4k aligned.
+ CHECK(!(fragment_size * COMPRESS_OFFLOAD_NUM_FRAGMENTS % 4096));
+ }
+ if(fragment_size < MIN_COMPRESS_OFFLOAD_FRAGMENT_SIZE)
+ fragment_size = MIN_COMPRESS_OFFLOAD_FRAGMENT_SIZE;
+ else if(fragment_size > MAX_COMPRESS_OFFLOAD_FRAGMENT_SIZE)
+ fragment_size = MAX_COMPRESS_OFFLOAD_FRAGMENT_SIZE;
+ ALOGVV("%s: fragment_size %d", __func__, fragment_size);
+ return fragment_size;
+}
+
+static int check_and_set_gapless_mode(struct audio_device *adev) {
+
+
+ char value[PROPERTY_VALUE_MAX] = {0};
+ bool gapless_enabled = false;
+ const char *mixer_ctl_name = "Compress Gapless Playback";
+ struct mixer_ctl *ctl;
+
+ ALOGV("%s:", __func__);
+ property_get("audio.offload.gapless.enabled", value, NULL);
+ gapless_enabled = atoi(value) || !strncmp("true", value, 4);
+
+ 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;
+ }
+
+ if (mixer_ctl_set_value(ctl, 0, gapless_enabled) < 0) {
+ ALOGE("%s: Could not set gapless mode %d",
+ __func__, gapless_enabled);
+ return -EINVAL;
+ }
+ return 0;
+}
static bool is_supported_format(audio_format_t format)
{
@@ -835,6 +882,7 @@
{
struct stream_out *out = (struct stream_out *) context;
struct listnode *item;
+ int ret = 0;
setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_AUDIO);
set_sched_policy(0, SP_FOREGROUND);
@@ -884,8 +932,14 @@
event = STREAM_CBK_EVENT_WRITE_READY;
break;
case OFFLOAD_CMD_PARTIAL_DRAIN:
- compress_next_track(out->compr);
- compress_partial_drain(out->compr);
+ ret = compress_next_track(out->compr);
+ if(ret == 0)
+ compress_partial_drain(out->compr);
+ else if(ret == -ETIMEDOUT)
+ compress_drain(out->compr);
+ else
+ ALOGE("%s: Next track returned error %d",__func__, ret);
+
send_callback = true;
event = STREAM_CBK_EVENT_DRAIN_READY;
break;
@@ -2114,7 +2168,7 @@
__func__, config->offload_info.version,
config->offload_info.bit_rate);
//Decide if we need to use gapless mode by default
- set_gapless_mode(adev);
+ check_and_set_gapless_mode(adev);
} else if (out->flags & AUDIO_OUTPUT_FLAG_INCALL_MUSIC) {
ret = voice_check_and_set_incall_music_usecase(adev, out);
@@ -2650,55 +2704,6 @@
return 0;
}
-/* Read offload buffer size from a property.
- * If value is not power of 2 round it to
- * power of 2.
- */
-static uint32_t get_offload_buffer_size()
-{
- char value[PROPERTY_VALUE_MAX] = {0};
- uint32_t fragment_size = COMPRESS_OFFLOAD_FRAGMENT_SIZE;
- if((property_get("audio.offload.buffer.size.kb", value, "")) &&
- atoi(value)) {
- fragment_size = atoi(value) * 1024;
- //ring buffer size needs to be 4k aligned.
- CHECK(!(fragment_size * COMPRESS_OFFLOAD_NUM_FRAGMENTS % 4096));
- }
- if(fragment_size < MIN_COMPRESS_OFFLOAD_FRAGMENT_SIZE)
- fragment_size = MIN_COMPRESS_OFFLOAD_FRAGMENT_SIZE;
- else if(fragment_size > MAX_COMPRESS_OFFLOAD_FRAGMENT_SIZE)
- fragment_size = MAX_COMPRESS_OFFLOAD_FRAGMENT_SIZE;
- ALOGVV("%s: fragment_size %d", __func__, fragment_size);
- return fragment_size;
-}
-
-static int set_gapless_mode(struct audio_device *adev) {
-
-
- char value[PROPERTY_VALUE_MAX] = {0};
- bool gapless_enabled = false;
- const char *mixer_ctl_name = "Compress Gapless Playback";
- struct mixer_ctl *ctl;
-
- ALOGV("%s:", __func__);
- property_get("audio.offload.gapless.enabled", value, NULL);
- gapless_enabled = atoi(value) || !strncmp("true", value, 4);
-
- 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;
- }
-
- if (mixer_ctl_set_value(ctl, 0, gapless_enabled) < 0) {
- ALOGE("%s: Could not set gapless mode %d",
- __func__, gapless_enabled);
- return -EINVAL;
- }
- return 0;
-
-}
static struct hw_module_methods_t hal_module_methods = {
.open = adev_open,
};
diff --git a/hal/msm8974/platform.h b/hal/msm8974/platform.h
index bb1f787..ca8469a 100644
--- a/hal/msm8974/platform.h
+++ b/hal/msm8974/platform.h
@@ -147,7 +147,7 @@
* the buffer size of an input/output stream
*/
#define DEEP_BUFFER_OUTPUT_PERIOD_SIZE 960
-#define DEEP_BUFFER_OUTPUT_PERIOD_COUNT 8
+#define DEEP_BUFFER_OUTPUT_PERIOD_COUNT 4
#define LOW_LATENCY_OUTPUT_PERIOD_SIZE 240
#define LOW_LATENCY_OUTPUT_PERIOD_COUNT 2
diff --git a/post_proc/bass_boost.c b/post_proc/bass_boost.c
index c64ba6b..c724b58 100644
--- a/post_proc/bass_boost.c
+++ b/post_proc/bass_boost.c
@@ -239,6 +239,11 @@
ALOGV("%s", __func__);
bass_ctxt->ctl = output->ctl;
ALOGV("output->ctl: %p", output->ctl);
+ if (offload_bassboost_get_enable_flag(&(bass_ctxt->offload_bass)))
+ if (bass_ctxt->ctl)
+ offload_bassboost_send_params(bass_ctxt->ctl, bass_ctxt->offload_bass,
+ OFFLOAD_SEND_BASSBOOST_ENABLE_FLAG |
+ OFFLOAD_SEND_BASSBOOST_STRENGTH);
return 0;
}
diff --git a/post_proc/equalizer.c b/post_proc/equalizer.c
index e31d2b9..7c7ced2 100644
--- a/post_proc/equalizer.c
+++ b/post_proc/equalizer.c
@@ -491,6 +491,11 @@
ALOGV("%s: %p", __func__, output->ctl);
eq_ctxt->ctl = output->ctl;
+ if (offload_eq_get_enable_flag(&(eq_ctxt->offload_eq)))
+ if (eq_ctxt->ctl)
+ offload_eq_send_params(eq_ctxt->ctl, eq_ctxt->offload_eq,
+ OFFLOAD_SEND_EQ_ENABLE_FLAG |
+ OFFLOAD_SEND_EQ_BANDS_LEVEL);
return 0;
}
diff --git a/post_proc/virtualizer.c b/post_proc/virtualizer.c
index 2f0ca6b..e9eb728 100644
--- a/post_proc/virtualizer.c
+++ b/post_proc/virtualizer.c
@@ -237,6 +237,11 @@
ALOGV("%s", __func__);
virt_ctxt->ctl = output->ctl;
+ if (offload_virtualizer_get_enable_flag(&(virt_ctxt->offload_virt)))
+ if (virt_ctxt->ctl)
+ offload_virtualizer_send_params(virt_ctxt->ctl, virt_ctxt->offload_virt,
+ OFFLOAD_SEND_VIRTUALIZER_ENABLE_FLAG |
+ OFFLOAD_SEND_VIRTUALIZER_STRENGTH);
return 0;
}