summaryrefslogtreecommitdiffstats
path: root/audio_out.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio_out.c')
-rw-r--r--audio_out.c105
1 files changed, 52 insertions, 53 deletions
diff --git a/audio_out.c b/audio_out.c
index 8a8814c..ca605f4 100644
--- a/audio_out.c
+++ b/audio_out.c
@@ -52,7 +52,7 @@ int audio_out_pcm_open(struct tinyalsa_audio_stream_out *stream_out)
return -1;
memset(&pcm_config, 0, sizeof(pcm_config));
- pcm_config.channels = popcount(stream_out->mixer_props->channels);
+ pcm_config.channels = popcount(stream_out->mixer_props->channel_mask);
pcm_config.rate = stream_out->mixer_props->rate;
switch(stream_out->mixer_props->format) {
case AUDIO_FORMAT_PCM_16_BIT:
@@ -62,7 +62,7 @@ int audio_out_pcm_open(struct tinyalsa_audio_stream_out *stream_out)
pcm_config.format = PCM_FORMAT_S32_LE;
break;
default:
- LOGE("Invalid format: 0x%x", stream_out->mixer_props->format);
+ ALOGE("Invalid format: 0x%x", stream_out->mixer_props->format);
return -1;
}
pcm_config.period_size = stream_out->mixer_props->period_size;
@@ -72,7 +72,7 @@ int audio_out_pcm_open(struct tinyalsa_audio_stream_out *stream_out)
stream_out->mixer_props->device, PCM_OUT, &pcm_config);
if(pcm == NULL || !pcm_is_ready(pcm)) {
- LOGE("Unable to open pcm device: %s", pcm_get_error(pcm));
+ ALOGE("Unable to open pcm device: %s", pcm_get_error(pcm));
return -1;
}
@@ -126,12 +126,12 @@ int audio_out_resampler_open(struct tinyalsa_audio_stream_out *stream_out)
rc = create_resampler(stream_out->rate,
stream_out->mixer_props->rate,
- popcount(stream_out->channels),
+ popcount(stream_out->channel_mask),
RESAMPLER_QUALITY_DEFAULT,
NULL,
&stream_out->resampler);
if(rc < 0 || stream_out->resampler == NULL) {
- LOGE("Failed to create resampler");
+ ALOGE("Failed to create resampler");
return -1;
}
@@ -195,13 +195,13 @@ int audio_out_write_process(struct tinyalsa_audio_stream_out *stream_out, void *
goto error;
//FIXME: This is only for PCM 16
- if(popcount(stream_out->mixer_props->channels) < popcount(stream_out->channels)) {
+ if(popcount(stream_out->mixer_props->channel_mask) < popcount(stream_out->channel_mask)) {
frames_out_channels = frames_in;
- size_out_channels = frames_out_channels * popcount(stream_out->mixer_props->channels) * audio_bytes_per_sample(stream_out->mixer_props->format);
+ size_out_channels = frames_out_channels * popcount(stream_out->mixer_props->channel_mask) * audio_bytes_per_sample(stream_out->mixer_props->format);
buffer_out_channels = calloc(1, size_out_channels);
- int channels_count_in = popcount(stream_out->channels);
- int channels_count_out = popcount(stream_out->mixer_props->channels);
+ int channels_count_in = popcount(stream_out->channel_mask);
+ int channels_count_out = popcount(stream_out->mixer_props->channel_mask);
int ratio = channels_count_in / channels_count_out;
int16_t *byte_in = (int16_t *) buffer_in;
@@ -222,20 +222,20 @@ int audio_out_write_process(struct tinyalsa_audio_stream_out *stream_out, void *
frames_in = frames_out_channels;
size_in = size_out_channels;
buffer_in = buffer_out_channels;
- } else if(popcount(stream_out->channels) != popcount(stream_out->mixer_props->channels)) {
- LOGE("Asked for more channels than software can provide!");
+ } else if(popcount(stream_out->channel_mask) != popcount(stream_out->mixer_props->channel_mask)) {
+ ALOGE("Asked for more channels than software can provide!");
goto error;
}
if(buffer_in != NULL) {
if(stream_out->pcm == NULL || !pcm_is_ready(stream_out->pcm)) {
- LOGE("pcm device is not ready");
+ ALOGE("pcm device is not ready");
goto error;
}
rc = pcm_write(stream_out->pcm, buffer_in, size_in);
if(rc != 0) {
- LOGE("pcm write failed!");
+ ALOGE("pcm write failed!");
goto error;
}
}
@@ -272,7 +272,7 @@ static int audio_out_set_sample_rate(struct audio_stream *stream, uint32_t rate)
{
struct tinyalsa_audio_stream_out *stream_out;
- LOGD("%s(%p, %d)", __func__, stream, rate);
+ ALOGD("%s(%p, %d)", __func__, stream, rate);
if(stream == NULL)
return -1;
@@ -315,7 +315,7 @@ static size_t audio_out_get_buffer_size(const struct audio_stream *stream)
return size;
}
-static uint32_t audio_out_get_channels(const struct audio_stream *stream)
+static audio_channel_mask_t audio_out_get_channels(const struct audio_stream *stream)
{
struct tinyalsa_audio_stream_out *stream_out;
@@ -324,10 +324,10 @@ static uint32_t audio_out_get_channels(const struct audio_stream *stream)
stream_out = (struct tinyalsa_audio_stream_out *) stream;
- return stream_out->channels;
+ return stream_out->channel_mask;
}
-static int audio_out_get_format(const struct audio_stream *stream)
+static audio_format_t audio_out_get_format(const struct audio_stream *stream)
{
struct tinyalsa_audio_stream_out *stream_out;
@@ -339,11 +339,11 @@ static int audio_out_get_format(const struct audio_stream *stream)
return stream_out->format;
}
-static int audio_out_set_format(struct audio_stream *stream, int format)
+static int audio_out_set_format(struct audio_stream *stream, audio_format_t format)
{
struct tinyalsa_audio_stream_out *stream_out;
- LOGD("%s(%p, %d)", __func__, stream, format);
+ ALOGD("%s(%p, %d)", __func__, stream, format);
if(stream == NULL)
return -1;
@@ -369,7 +369,7 @@ static int audio_out_standby(struct audio_stream *stream)
struct tinyalsa_audio_stream_out *stream_out;
int rc;
- LOGD("%s(%p)", __func__, stream);
+ ALOGD("%s(%p)", __func__, stream);
if(stream == NULL)
return -1;
@@ -385,7 +385,7 @@ static int audio_out_standby(struct audio_stream *stream)
if(!stream_out->standby) {
rc = yamaha_mc1n2_audio_output_stop(stream_out->device->mc1n2_pdata);
if(rc < 0) {
- LOGE("Failed to set Yamaha-MC1N2-Audio route");
+ ALOGE("Failed to set Yamaha-MC1N2-Audio route");
}
}
#endif
@@ -399,7 +399,7 @@ static int audio_out_standby(struct audio_stream *stream)
static int audio_out_dump(const struct audio_stream *stream, int fd)
{
- LOGD("%s(%p, %d)", __func__, stream, fd);
+ ALOGD("%s(%p, %d)", __func__, stream, fd);
return 0;
}
@@ -412,7 +412,7 @@ static int audio_out_set_parameters(struct audio_stream *stream, const char *kvp
int value;
int rc;
- LOGD("%s(%p, %s)", __func__, stream, kvpairs);
+ ALOGD("%s(%p, %s)", __func__, stream, kvpairs);
if(stream == NULL || kvpairs == NULL)
return -1;
@@ -457,7 +457,7 @@ error_params:
static char *audio_out_get_parameters(const struct audio_stream *stream, const char *keys)
{
- LOGD("%s(%p, %s)", __func__, stream, keys);
+ ALOGD("%s(%p, %s)", __func__, stream, keys);
return strdup("");
}
@@ -467,8 +467,6 @@ static uint32_t audio_out_get_latency(const struct audio_stream_out *stream)
struct tinyalsa_audio_stream_out *stream_out;
uint32_t latency;
- LOGD("%s(%p)", __func__, stream);
-
if(stream == NULL)
return -1;
@@ -487,7 +485,7 @@ static int audio_out_set_volume(struct audio_stream_out *stream, float left,
struct tinyalsa_audio_stream_out *stream_out;
float volume;
- LOGD("%s(%p, %f, %f)", __func__, stream, left, right);
+ ALOGD("%s(%p, %f, %f)", __func__, stream, left, right);
if(stream == NULL)
return -1;
@@ -527,13 +525,13 @@ static ssize_t audio_out_write(struct audio_stream_out *stream,
#ifdef YAMAHA_MC1N2_AUDIO
rc = yamaha_mc1n2_audio_output_start(stream_out->device->mc1n2_pdata);
if(rc < 0) {
- LOGE("Failed to set Yamaha-MC1N2-Audio route");
+ ALOGE("Failed to set Yamaha-MC1N2-Audio route");
}
#endif
rc = audio_out_pcm_open(stream_out);
if(rc < 0) {
- LOGE("Unable to open pcm device");
+ ALOGE("Unable to open pcm device");
goto error;
}
@@ -542,7 +540,7 @@ static ssize_t audio_out_write(struct audio_stream_out *stream,
rc = audio_out_write_process(stream_out, (void *) buffer, (int) bytes);
if(rc < 0) {
- LOGE("Process and write failed!");
+ ALOGE("Process and write failed!");
goto error;
}
@@ -559,21 +557,21 @@ error:
static int audio_out_get_render_position(const struct audio_stream_out *stream,
uint32_t *dsp_frames)
{
- LOGD("%s(%p, %p)", __func__, stream, dsp_frames);
+ ALOGD("%s(%p, %p)", __func__, stream, dsp_frames);
return -EINVAL;
}
static int audio_out_add_audio_effect(const struct audio_stream *stream, effect_handle_t effect)
{
- LOGD("%s(%p, %p)", __func__, stream, effect);
+ ALOGD("%s(%p, %p)", __func__, stream, effect);
return 0;
}
static int audio_out_remove_audio_effect(const struct audio_stream *stream, effect_handle_t effect)
{
- LOGD("%s(%p, %p)", __func__, stream, effect);
+ ALOGD("%s(%p, %p)", __func__, stream, effect);
return 0;
}
@@ -588,7 +586,7 @@ void audio_hw_close_output_stream(struct audio_hw_device *dev,
struct tinyalsa_audio_stream_out *stream_out;
struct tinyalsa_audio_device *tinyalsa_audio_device;
- LOGD("%s(%p)", __func__, stream);
+ ALOGD("%s(%p)", __func__, stream);
stream_out = (struct tinyalsa_audio_stream_out *) stream;
@@ -617,7 +615,8 @@ void audio_hw_close_output_stream(struct audio_hw_device *dev,
}
int audio_hw_open_output_stream(struct audio_hw_device *dev,
- uint32_t devices, int *format, uint32_t *channels, uint32_t *sample_rate,
+ audio_io_handle_t handle, audio_devices_t devices,
+ audio_output_flags_t flags, struct audio_config *config,
struct audio_stream_out **stream_out)
{
struct tinyalsa_audio_device *tinyalsa_audio_device;
@@ -625,10 +624,10 @@ int audio_hw_open_output_stream(struct audio_hw_device *dev,
struct audio_stream_out *stream;
int rc;
- LOGD("%s(%p, %d, %p, %p, %p, %p)",
- __func__, dev, devices, format, channels, sample_rate, stream_out);
+ ALOGD("%s(%p, %d, %p, %p)",
+ __func__, dev, devices, config, stream_out);
- if(dev == NULL || format == NULL || channels == NULL || sample_rate == NULL || stream_out == NULL)
+ if(dev == NULL || config == NULL || stream_out == NULL)
return -EINVAL;
tinyalsa_audio_device = (struct tinyalsa_audio_device *) dev;
@@ -670,42 +669,42 @@ int audio_hw_open_output_stream(struct audio_hw_device *dev,
// Default values
if(tinyalsa_audio_stream_out->mixer_props->rate == 0)
tinyalsa_audio_stream_out->mixer_props->rate = 44100;
- if(tinyalsa_audio_stream_out->mixer_props->channels == 0)
- tinyalsa_audio_stream_out->mixer_props->channels = AUDIO_CHANNEL_OUT_STEREO;
+ if(tinyalsa_audio_stream_out->mixer_props->channel_mask == 0)
+ tinyalsa_audio_stream_out->mixer_props->channel_mask = AUDIO_CHANNEL_OUT_STEREO;
if(tinyalsa_audio_stream_out->mixer_props->format == 0)
tinyalsa_audio_stream_out->mixer_props->format = AUDIO_FORMAT_PCM_16_BIT;
//Default incoming data will always be 44100Hz, stereo, PCM 16
- if(*sample_rate == 0)
+ if(config->sample_rate == 0)
tinyalsa_audio_stream_out->rate = 44100;
else
- tinyalsa_audio_stream_out->rate = *sample_rate;
- if(*channels == 0)
- tinyalsa_audio_stream_out->channels = AUDIO_CHANNEL_OUT_STEREO;
+ tinyalsa_audio_stream_out->rate = config->sample_rate;
+ if(config->channel_mask == 0)
+ tinyalsa_audio_stream_out->channel_mask = AUDIO_CHANNEL_OUT_STEREO;
else
- tinyalsa_audio_stream_out->channels = *channels;
- if(*format == 0)
+ tinyalsa_audio_stream_out->channel_mask = config->channel_mask;
+ if(config->format == 0)
tinyalsa_audio_stream_out->format = AUDIO_FORMAT_PCM_16_BIT;
else
- tinyalsa_audio_stream_out->format = *format;
+ tinyalsa_audio_stream_out->format = config->format;
if(tinyalsa_audio_stream_out->rate != tinyalsa_audio_stream_out->mixer_props->rate) {
rc = audio_out_resampler_open(tinyalsa_audio_stream_out);
if(rc < 0) {
- LOGE("Unable to open resampler!");
+ ALOGE("Unable to open resampler!");
goto error_stream;
}
}
- *sample_rate = (uint32_t) tinyalsa_audio_stream_out->rate;
- *channels = (uint32_t) tinyalsa_audio_stream_out->channels;
- *format = (uint32_t) tinyalsa_audio_stream_out->format;
+ config->sample_rate = (uint32_t) tinyalsa_audio_stream_out->rate;
+ config->channel_mask = (uint32_t) tinyalsa_audio_stream_out->channel_mask;
+ config->format = (uint32_t) tinyalsa_audio_stream_out->format;
pthread_mutex_lock(&tinyalsa_audio_device->lock);
rc = tinyalsa_mixer_set_output_state(tinyalsa_audio_device->mixer, 1);
if(rc < 0) {
- LOGE("Unable to set output state");
+ ALOGE("Unable to set output state");
pthread_mutex_unlock(&tinyalsa_audio_device->lock);
goto error_stream;
}
@@ -718,7 +717,7 @@ int audio_hw_open_output_stream(struct audio_hw_device *dev,
rc = audio_out_pcm_open(tinyalsa_audio_stream_out);
if(rc < 0) {
- LOGE("Unable to open pcm device");
+ ALOGE("Unable to open pcm device");
pthread_mutex_unlock(&tinyalsa_audio_stream_out->lock);
goto error_stream;
}