summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Hung <hunga@google.com>2016-07-28 17:45:54 (GMT)
committergitbuildkicker <android-build@google.com>2016-07-29 03:14:34 (GMT)
commitb1f51a346bebb47bd723ad7ca69b9cedc1337f71 (patch)
treed5dd98cc0725981604b37ebf068c6053323d0919
parent939fd540855c48a930b20cd99642715d15376a9c (diff)
downloadandroid-system-bt-b1f51a346bebb47bd723ad7ca69b9cedc1337f71.tar.gz
android-system-bt-b1f51a346bebb47bd723ad7ca69b9cedc1337f71.tar.xz
audio_a2dp_hw: Always update frame counter in out_write
Required now that we always return success. Bug: 30025777 Change-Id: I7db51321672c128039545cc0fb604c615f169bc3
-rw-r--r--audio_a2dp_hw/audio_a2dp_hw.c27
1 files changed, 12 insertions, 15 deletions
diff --git a/audio_a2dp_hw/audio_a2dp_hw.c b/audio_a2dp_hw/audio_a2dp_hw.c
index 20c7335..fdd05e4 100644
--- a/audio_a2dp_hw/audio_a2dp_hw.c
+++ b/audio_a2dp_hw/audio_a2dp_hw.c
@@ -586,8 +586,7 @@ static ssize_t out_write(struct audio_stream_out *stream, const void* buffer,
size_t bytes)
{
struct a2dp_stream_out *out = (struct a2dp_stream_out *)stream;
- int sent;
- int us_delay;
+ int sent = -1;
DEBUG("write %zu bytes (fd %d)", bytes, out->common.audio_fd);
@@ -595,7 +594,7 @@ static ssize_t out_write(struct audio_stream_out *stream, const void* buffer,
if (out->common.state == AUDIO_A2DP_STATE_SUSPENDED ||
out->common.state == AUDIO_A2DP_STATE_STOPPING) {
DEBUG("stream suspended or closing");
- goto error;
+ goto finish;
}
/* only allow autostarting if we are in stopped or standby */
@@ -604,13 +603,13 @@ static ssize_t out_write(struct audio_stream_out *stream, const void* buffer,
{
if (start_audio_datapath(&out->common) < 0)
{
- goto error;
+ goto finish;
}
}
else if (out->common.state != AUDIO_A2DP_STATE_STARTED)
{
ERROR("stream not in stopped or standby");
- goto error;
+ goto finish;
}
pthread_mutex_unlock(&out->common.lock);
@@ -626,26 +625,24 @@ static ssize_t out_write(struct audio_stream_out *stream, const void* buffer,
} else {
ERROR("write failed : stream suspended, avoid resetting state");
}
- goto error;
+ goto finish;
}
+finish: ;
const size_t frames = bytes / audio_stream_out_frame_size(stream);
out->frames_rendered += frames;
out->frames_presented += frames;
pthread_mutex_unlock(&out->common.lock);
- return bytes;
-
-error:
- pthread_mutex_unlock(&out->common.lock);
- us_delay = calc_audiotime(out->common.cfg, bytes);
- DEBUG("emulate a2dp write delay (%d us)", us_delay);
-
- usleep(us_delay);
+ // If send didn't work out, sleep to emulate write delay.
+ if (sent == -1) {
+ const int us_delay = calc_audiotime(out->common.cfg, bytes);
+ DEBUG("emulate a2dp write delay (%d us)", us_delay);
+ usleep(us_delay);
+ }
return bytes;
}
-
static uint32_t out_get_sample_rate(const struct audio_stream *stream)
{
struct a2dp_stream_out *out = (struct a2dp_stream_out *)stream;