diff options
author | Daniel Kurtz <djkurtz@chromium.org> | 2018-10-09 18:24:28 -0600 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-10-11 13:25:46 -0700 |
commit | 70075c989864443aa830fe37493dac4737827f95 (patch) | |
tree | d755bd714f0e647016950339b92f1dac764a3bb4 | |
parent | 380919c441afa207b0df11bb80e8fd2991881b6a (diff) | |
download | adhd-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.c | 33 | ||||
-rw-r--r-- | cras/src/tests/alsa_io_unittest.cc | 8 |
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); } |