summaryrefslogtreecommitdiffstats
path: root/audio
diff options
context:
space:
mode:
authorChristopher N. Hesse <raymanfx@gmail.com>2017-01-30 18:57:20 +0100
committerChristopher N. Hesse <raymanfx@gmail.com>2017-01-30 21:49:42 +0000
commit8414bd240acae0315d0eef767e2a33293aa5032c (patch)
tree1461be628ea346bedc0428c177483732958e6752 /audio
parentd23c6b5fcd3be188269574ecb722fa7830fb66d9 (diff)
downloadhardware_samsung-8414bd240acae0315d0eef767e2a33293aa5032c.tar.gz
hardware_samsung-8414bd240acae0315d0eef767e2a33293aa5032c.tar.bz2
hardware_samsung-8414bd240acae0315d0eef767e2a33293aa5032c.zip
audio: Allow targets to override the deep buffer device
Change-Id: I539403661e40e5be7eb5cc130a4b8ad8331d2a4a
Diffstat (limited to 'audio')
-rw-r--r--audio/audio_hw.c45
-rw-r--r--audio/include/samsung_audio.h1
2 files changed, 31 insertions, 15 deletions
diff --git a/audio/audio_hw.c b/audio/audio_hw.c
index fc91929..5aaaeb2 100644
--- a/audio/audio_hw.c
+++ b/audio/audio_hw.c
@@ -72,6 +72,24 @@ static struct pcm_device_profile pcm_device_playback = {
AUDIO_DEVICE_OUT_SPEAKER,
};
+static struct pcm_device_profile pcm_device_deep_buffer = {
+ .config = {
+ .channels = PLAYBACK_DEFAULT_CHANNEL_COUNT,
+ .rate = DEEP_BUFFER_OUTPUT_SAMPLING_RATE,
+ .period_size = DEEP_BUFFER_OUTPUT_PERIOD_SIZE,
+ .period_count = DEEP_BUFFER_OUTPUT_PERIOD_COUNT,
+ .format = PCM_FORMAT_S16_LE,
+ .start_threshold = DEEP_BUFFER_OUTPUT_PERIOD_SIZE / 4,
+ .stop_threshold = INT_MAX,
+ .avail_min = DEEP_BUFFER_OUTPUT_PERIOD_SIZE / 4,
+ },
+ .card = SOUND_CARD,
+ .id = SOUND_DEEP_BUFFER_DEVICE,
+ .type = PCM_PLAYBACK,
+ .devices = AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|
+ AUDIO_DEVICE_OUT_SPEAKER,
+};
+
static struct pcm_device_profile pcm_device_capture = {
.config = {
.channels = CAPTURE_DEFAULT_CHANNEL_COUNT,
@@ -215,17 +233,6 @@ static const char * const use_case_table[AUDIO_USECASE_MAX] = {
static unsigned int audio_device_ref_count;
-static struct pcm_config pcm_config_deep_buffer = {
- .channels = 2,
- .rate = DEEP_BUFFER_OUTPUT_SAMPLING_RATE,
- .period_size = DEEP_BUFFER_OUTPUT_PERIOD_SIZE,
- .period_count = DEEP_BUFFER_OUTPUT_PERIOD_COUNT,
- .format = PCM_FORMAT_S16_LE,
- .start_threshold = DEEP_BUFFER_OUTPUT_PERIOD_SIZE / 4,
- .stop_threshold = INT_MAX,
- .avail_min = DEEP_BUFFER_OUTPUT_PERIOD_SIZE / 4,
-};
-
struct string_to_enum {
const char *name;
uint32_t value;
@@ -2191,13 +2198,21 @@ static int out_open_pcm_devices(struct stream_out *out)
struct pcm_device *pcm_device;
struct listnode *node;
int ret = 0;
+ int pcm_device_card;
+ int pcm_device_id;
list_for_each(node, &out->pcm_dev_list) {
pcm_device = node_to_item(node, struct pcm_device, stream_list_node);
+ pcm_device_card = pcm_device->pcm_profile->card;
+ pcm_device_id = pcm_device->pcm_profile->id;
+
+ if (out->flags & AUDIO_OUTPUT_FLAG_DEEP_BUFFER)
+ pcm_device_id = pcm_device_deep_buffer.id;
+
ALOGV("%s: Opening PCM device card_id(%d) device_id(%d)",
- __func__, pcm_device->pcm_profile->card, pcm_device->pcm_profile->id);
+ __func__, pcm_device_card, pcm_device_id);
- pcm_device->pcm = pcm_open(pcm_device->pcm_profile->card, pcm_device->pcm_profile->id,
+ pcm_device->pcm = pcm_open(pcm_device_card, pcm_device_id,
PCM_OUT | PCM_MONOTONIC, &pcm_device->pcm_profile->config);
if (pcm_device->pcm && !pcm_is_ready(pcm_device->pcm)) {
@@ -2213,7 +2228,7 @@ static int out_open_pcm_devices(struct stream_out *out)
if (out->sample_rate != pcm_device->pcm_profile->config.rate) {
ALOGV("%s: create_resampler(), pcm_device_card(%d), pcm_device_id(%d), \
out_rate(%d), device_rate(%d)",__func__,
- pcm_device->pcm_profile->card, pcm_device->pcm_profile->id,
+ pcm_device_card, pcm_device_id,
out->sample_rate, pcm_device->pcm_profile->config.rate);
ret = create_resampler(out->sample_rate,
pcm_device->pcm_profile->config.rate,
@@ -3586,7 +3601,7 @@ static int adev_open_output_stream(struct audio_hw_device *dev,
config->offload_info.bit_rate);
} else if (out->flags & (AUDIO_OUTPUT_FLAG_DEEP_BUFFER)) {
out->usecase = USECASE_AUDIO_PLAYBACK_DEEP_BUFFER;
- out->config = pcm_config_deep_buffer;
+ out->config = pcm_device_deep_buffer.config;
out->sample_rate = out->config.rate;
ALOGV("%s: use AUDIO_PLAYBACK_DEEP_BUFFER",__func__);
} else {
diff --git a/audio/include/samsung_audio.h b/audio/include/samsung_audio.h
index 89b3a41..6aaf4df 100644
--- a/audio/include/samsung_audio.h
+++ b/audio/include/samsung_audio.h
@@ -31,6 +31,7 @@
#define SOUND_CARD 0
/* Playback */
+#define SOUND_DEEP_BUFFER_DEVICE 3
#define SOUND_PLAYBACK_DEVICE 4
#define SOUND_PLAYBACK_SCO_DEVICE 2