mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-31 22:25:35 -04:00
pcm: express the rewind size limitation logic better
There are a few places where the argument of the .rewind or .forward callback is checked against the same value as returned by .rewindable or .forwardable. Express this "don't rewind more than rewindable" logic explicitly, so that the future fixes to the rewindable size can go to one function instead of two. While at it, take advantage of the fact that snd_pcm_mmap_avail() cannot return negative values (except due to integer overflow, which is AFAICS impossible given the current boundary choice). Signed-off-by: Alexander E. Patrakov <patrakov@gmail.com> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
9a56a673a6
commit
9a43dc15b2
4 changed files with 7 additions and 13 deletions
|
|
@ -751,9 +751,7 @@ static snd_pcm_sframes_t snd_pcm_dmix_forward(snd_pcm_t *pcm, snd_pcm_uframes_t
|
|||
{
|
||||
snd_pcm_sframes_t avail;
|
||||
|
||||
avail = snd_pcm_mmap_playback_avail(pcm);
|
||||
if (avail < 0)
|
||||
return 0;
|
||||
avail = snd_pcm_dmix_forwardable(pcm);
|
||||
if (frames > (snd_pcm_uframes_t)avail)
|
||||
frames = avail;
|
||||
snd_pcm_mmap_appl_forward(pcm, frames);
|
||||
|
|
|
|||
|
|
@ -419,7 +419,7 @@ static snd_pcm_sframes_t snd_pcm_dshare_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t
|
|||
{
|
||||
snd_pcm_sframes_t avail;
|
||||
|
||||
avail = snd_pcm_mmap_playback_hw_avail(pcm);
|
||||
avail = snd_pcm_dshare_rewindable(pcm);
|
||||
if (avail < 0)
|
||||
return 0;
|
||||
if (frames > (snd_pcm_uframes_t)avail)
|
||||
|
|
@ -437,9 +437,7 @@ static snd_pcm_sframes_t snd_pcm_dshare_forward(snd_pcm_t *pcm, snd_pcm_uframes_
|
|||
{
|
||||
snd_pcm_sframes_t avail;
|
||||
|
||||
avail = snd_pcm_mmap_playback_avail(pcm);
|
||||
if (avail < 0)
|
||||
return 0;
|
||||
avail = snd_pcm_dshare_forwardable(pcm);
|
||||
if (frames > (snd_pcm_uframes_t)avail)
|
||||
frames = avail;
|
||||
snd_pcm_mmap_appl_forward(pcm, frames);
|
||||
|
|
|
|||
|
|
@ -342,9 +342,7 @@ static snd_pcm_sframes_t snd_pcm_dsnoop_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t
|
|||
{
|
||||
snd_pcm_sframes_t avail;
|
||||
|
||||
avail = snd_pcm_mmap_capture_avail(pcm);
|
||||
if (avail < 0)
|
||||
return 0;
|
||||
avail = snd_pcm_dsnoop_rewindable(pcm);
|
||||
if (frames > (snd_pcm_uframes_t)avail)
|
||||
frames = avail;
|
||||
snd_pcm_mmap_appl_backward(pcm, frames);
|
||||
|
|
@ -360,7 +358,7 @@ static snd_pcm_sframes_t snd_pcm_dsnoop_forward(snd_pcm_t *pcm, snd_pcm_uframes_
|
|||
{
|
||||
snd_pcm_sframes_t avail;
|
||||
|
||||
avail = snd_pcm_mmap_capture_hw_avail(pcm);
|
||||
avail = snd_pcm_dsnoop_forwardable(pcm);
|
||||
if (avail < 0)
|
||||
return 0;
|
||||
if (frames > (snd_pcm_uframes_t)avail)
|
||||
|
|
|
|||
|
|
@ -204,7 +204,7 @@ static snd_pcm_sframes_t snd_pcm_plugin_rewindable(snd_pcm_t *pcm)
|
|||
snd_pcm_sframes_t snd_pcm_plugin_rewind(snd_pcm_t *pcm, snd_pcm_uframes_t frames)
|
||||
{
|
||||
snd_pcm_plugin_t *plugin = pcm->private_data;
|
||||
snd_pcm_sframes_t n = snd_pcm_mmap_hw_avail(pcm);
|
||||
snd_pcm_sframes_t n = snd_pcm_plugin_rewindable(pcm);
|
||||
snd_pcm_sframes_t sframes;
|
||||
|
||||
if ((snd_pcm_uframes_t)n < frames)
|
||||
|
|
@ -232,7 +232,7 @@ static snd_pcm_sframes_t snd_pcm_plugin_forwardable(snd_pcm_t *pcm)
|
|||
snd_pcm_sframes_t snd_pcm_plugin_forward(snd_pcm_t *pcm, snd_pcm_uframes_t frames)
|
||||
{
|
||||
snd_pcm_plugin_t *plugin = pcm->private_data;
|
||||
snd_pcm_sframes_t n = snd_pcm_mmap_avail(pcm);
|
||||
snd_pcm_sframes_t n = snd_pcm_plugin_forwardable(pcm);
|
||||
snd_pcm_sframes_t sframes;
|
||||
|
||||
if ((snd_pcm_uframes_t)n < frames)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue