summaryrefslogtreecommitdiff
path: root/audio/legacy/audio_hw.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/legacy/audio_hw.c')
-rw-r--r--audio/legacy/audio_hw.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/audio/legacy/audio_hw.c b/audio/legacy/audio_hw.c
index 12459e5..6912570 100644
--- a/audio/legacy/audio_hw.c
+++ b/audio/legacy/audio_hw.c
@@ -524,8 +524,12 @@ static int voice_stream_init(struct j6_voice_stream *stream,
return ret;
}
- stream->pcm_in = pcm_open(in_card, in_port, PCM_IN, &stream->in_config);
- stream->pcm_out = pcm_open(out_card, out_port, PCM_OUT, &stream->out_config);
+ stream->pcm_in = pcm_open(in_card, in_port,
+ PCM_IN | PCM_MONOTONIC,
+ &stream->in_config);
+ stream->pcm_out = pcm_open(out_card, out_port,
+ PCM_OUT | PCM_MONOTONIC,
+ &stream->out_config);
if (!pcm_is_ready(stream->pcm_in) || !pcm_is_ready(stream->pcm_out)) {
ALOGE("voice_stream_init() failed to open pcm %s devices", stream->name);
@@ -848,7 +852,9 @@ static ssize_t out_write(struct audio_stream_out *stream, const void* buffer,
select_output_device(adev);
ALOGI("out_write() open card %u port %u", adev->card, adev->out_port);
- out->pcm = pcm_open(adev->card, adev->out_port, PCM_OUT, &out->config);
+ out->pcm = pcm_open(adev->card, adev->out_port,
+ PCM_OUT | PCM_MONOTONIC,
+ &out->config);
if (!pcm_is_ready(out->pcm)) {
ALOGE("out_write() failed to open pcm out: %s", pcm_get_error(out->pcm));
pcm_close(out->pcm);
@@ -932,7 +938,7 @@ static int out_get_presentation_position(const struct audio_stream_out *stream,
signed_frames = out->written - pcm_get_buffer_size(out->pcm) + avail;
}
} else {
- clock_gettime(CLOCK_REALTIME, timestamp);
+ clock_gettime(CLOCK_MONOTONIC, timestamp);
signed_frames = out->written +
(time_diff(*timestamp, out->last) * out->config.rate) / 1000000;
}
@@ -1202,7 +1208,9 @@ static ssize_t in_read(struct audio_stream_in *stream, void* buffer,
select_input_device(adev);
ALOGI("in_read() open card %u port %u", adev->card, adev->in_port);
- in->pcm = pcm_open(adev->card, adev->in_port, PCM_IN, &in->config);
+ in->pcm = pcm_open(adev->card, adev->in_port,
+ PCM_IN | PCM_MONOTONIC,
+ &in->config);
if (!pcm_is_ready(in->pcm)) {
ALOGE("in_read() failed to open pcm in: %s", pcm_get_error(in->pcm));
pcm_close(in->pcm);