summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Kurtz <djkurtz@chromium.org>2018-10-09 18:24:28 -0600
committerchrome-bot <chrome-bot@chromium.org>2018-10-11 13:25:46 -0700
commit70075c989864443aa830fe37493dac4737827f95 (patch)
treed755bd714f0e647016950339b92f1dac764a3bb4
parent380919c441afa207b0df11bb80e8fd2991881b6a (diff)
downloadadhd-70075c989864443aa830fe37493dac4737827f95.tar.gz
Revert "CRAS: cras_alsa_io - Increase appl_ptr when underrun happens"
This reverts commit ac429fff80faaf1768332858f0e483379ea6f1aa. This CL is causing grunt audio to stutter on resume from S3 when playing an audio file from local disk. BUG=b:117302276 TEST=Deploy to grunt or careena TEST=Sign in to DUT, save an audio file to "My Files > Downloads" TEST=Start playing audio file TEST=Enter S3 (ie, powerd_dbus_suspend) => No stuttering after resume (confirm at least 30 seconds) Change-Id: I442ed3bfcb86ae8c46cf8a9cc3d2ebb0674adadf Reviewed-on: https://chromium-review.googlesource.com/1272064 Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com> Tested-by: Daniel Kurtz <djkurtz@chromium.org> Reviewed-by: Yu-Hsuan Hsu <yuhsuan@chromium.org>
-rw-r--r--cras/src/server/cras_alsa_io.c33
-rw-r--r--cras/src/tests/alsa_io_unittest.cc8
2 files changed, 12 insertions, 29 deletions
diff --git a/cras/src/server/cras_alsa_io.c b/cras/src/server/cras_alsa_io.c
index 3dafb50e..d9169f16 100644
--- a/cras/src/server/cras_alsa_io.c
+++ b/cras/src/server/cras_alsa_io.c
@@ -1734,31 +1734,16 @@ static int fill_whole_buffer_with_zeros(struct cras_iodev *iodev)
return 0;
}
-/*
- * Move appl_ptr to min_buffer_level + min_cb_level frames ahead of hw_ptr
- * when resuming from free run.
- */
-static int adjust_appl_ptr_for_leaving_free_run(struct cras_iodev *odev)
-{
- struct alsa_io *aio = (struct alsa_io *)odev;
- snd_pcm_uframes_t ahead;
-
- ahead = odev->min_buffer_level + odev->min_cb_level;
- return cras_alsa_resume_appl_ptr(aio->handle, ahead);
-}
-
-/*
- * Move appl_ptr to min_buffer_level + min_cb_level * 1.5 frames ahead of
- * hw_ptr when adjusting appl_ptr from underrun.
- */
-static int adjust_appl_ptr_for_underrun(struct cras_iodev *odev)
+static int adjust_appl_ptr(struct cras_iodev *odev)
{
struct alsa_io *aio = (struct alsa_io *)odev;
- snd_pcm_uframes_t ahead;
- ahead = odev->min_buffer_level + odev->min_cb_level +
- odev->min_cb_level / 2;
- return cras_alsa_resume_appl_ptr(aio->handle, ahead);
+ /* Move appl_ptr to min_buffer_level + min_cb_level frames ahead of
+ * hw_ptr when resuming from free run or adjusting appl_ptr from
+ * underrun. */
+ return cras_alsa_resume_appl_ptr(
+ aio->handle,
+ odev->min_buffer_level + odev->min_cb_level);
}
/* This function is for leaving no-stream state but still not in free run yet.
@@ -1816,7 +1801,7 @@ static int alsa_output_underrun(struct cras_iodev *odev)
if (rc)
return rc;
/* Adjust appl_ptr to leave underrun. */
- return adjust_appl_ptr_for_underrun(odev);
+ return adjust_appl_ptr(odev);
}
static int possibly_enter_free_run(struct cras_iodev *odev)
@@ -1874,7 +1859,7 @@ static int leave_free_run(struct cras_iodev *odev)
int rc;
if (aio->is_free_running)
- rc = adjust_appl_ptr_for_leaving_free_run(odev);
+ rc = adjust_appl_ptr(odev);
else
rc = adjust_appl_ptr_samples_remaining(odev);
if (rc) {
diff --git a/cras/src/tests/alsa_io_unittest.cc b/cras/src/tests/alsa_io_unittest.cc
index 26c3232f..9a6b7f62 100644
--- a/cras/src/tests/alsa_io_unittest.cc
+++ b/cras/src/tests/alsa_io_unittest.cc
@@ -2215,7 +2215,6 @@ TEST_F(AlsaFreeRunTestSuite, LeaveFreeRunInFreeRun) {
TEST_F(AlsaFreeRunTestSuite, OutputUnderrun) {
int rc;
int16_t *zeros;
- snd_pcm_uframes_t offset;
aio.num_underruns = 0;
@@ -2228,12 +2227,11 @@ TEST_F(AlsaFreeRunTestSuite, OutputUnderrun) {
zeros = (int16_t *)calloc(BUFFER_SIZE * 2, sizeof(*zeros));
EXPECT_EQ(0, memcmp(zeros, cras_alsa_mmap_begin_buffer, BUFFER_SIZE * 2 * 2));
- // appl_ptr should be moved to min_buffer_level + 1.5 * min_cb_level ahead of
+ // appl_ptr should be moved to min_buffer_level + min_cb_level ahead of
// hw_ptr.
- offset = aio.base.min_buffer_level + aio.base.min_cb_level +
- aio.base.min_cb_level / 2;
EXPECT_EQ(1, cras_alsa_resume_appl_ptr_called);
- EXPECT_EQ(offset, cras_alsa_resume_appl_ptr_ahead);
+ EXPECT_EQ(aio.base.min_buffer_level + aio.base.min_cb_level,
+ cras_alsa_resume_appl_ptr_ahead);
free(zeros);
}