- Backport upstream fixes / enhancements: mostly small fixes spotted by coccinelle and oethers, the fixes for proper rewind support, a new DSD format support, hwdep definitions sync, and addition of PAZ00 UCM configs. 0022-pcm-fix-snd_pcm_mmap_hw_avail-near-the-boundary.patch 0023-pcm-fix-return-value-of-snd_pcm_share_slave_avail.patch 0024-pcm-add-new-32-bit-DSD-sample-format.patch 0025-dmix-actually-rewind-when-running-or-being-drained.patch 0026-pcm-express-the-rewind-size-limitation-logic-better.patch 0027-pcm-handle-negative-values-from-snd_pcm_mmap_hw_avai.patch 0028-pcm-rate-use-the-snd_pcm_mmap_hw_avail-function.patch 0029-pcm-null-use-the-snd_pcm_mmap_avail-function.patch 0030-rate-handle-negative-values-from-snd_pcm_mmap_playba.patch 0031-dsnoop-rewindable-and-forwardable-logic-was-swapped.patch 0033-pcm-file-don-t-recurse-in-the-rewindable-and-forward.patch 0034-pcm-route-Fix-the-bad-condition-always-false.patch 0035-pcm-rate-hw_avail-must-not-be-negative-before-starti.patch 0036-hwdep-add-missing-declaration-for-snd_hwdep_poll_des.patch 0037-mixer-fixed-double-free.patch 0038-pcm_file-fixed-missing-free.patch 0039-sbase-fixed-missing-free.patch 0040-rawmidi-close-handle-h.patch 0041-pcm_share-fixing-missing-mutex-unlock.patch 0042-simple_abst-null-check-for-lib.patch 0043-socket-missing-socket-close.patch 0044-pcm_hooks-null-check-for-h.patch 0045-conf-return-negative-value-in-case-of-error.patch 0046-control-return-negative-value-in-case-of-error.patch 0047-pcm-return-negative-value-in-case-of-error.patch 0048-mixer-Fix-missing-hctl-handle-free-in-snd_mixer_atta.patch OBS-URL: https://build.opensuse.org/request/show/257835 OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/alsa?expand=0&rev=170
113 lines
4.0 KiB
Diff
113 lines
4.0 KiB
Diff
From 9a43dc15b2979ed6d8850b033b594fbef829c991 Mon Sep 17 00:00:00 2001
|
|
From: "Alexander E. Patrakov" <patrakov@gmail.com>
|
|
Date: Sun, 14 Sep 2014 00:30:14 +0600
|
|
Subject: [PATCH] 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>
|
|
---
|
|
src/pcm/pcm_dmix.c | 4 +---
|
|
src/pcm/pcm_dshare.c | 6 ++----
|
|
src/pcm/pcm_dsnoop.c | 6 ++----
|
|
src/pcm/pcm_plugin.c | 4 ++--
|
|
4 files changed, 7 insertions(+), 13 deletions(-)
|
|
|
|
diff --git a/src/pcm/pcm_dmix.c b/src/pcm/pcm_dmix.c
|
|
index 73cbe3f8d0b2..ffde12a1a46c 100644
|
|
--- a/src/pcm/pcm_dmix.c
|
|
+++ b/src/pcm/pcm_dmix.c
|
|
@@ -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);
|
|
diff --git a/src/pcm/pcm_dshare.c b/src/pcm/pcm_dshare.c
|
|
index b985172825e7..f1a1a1d75229 100644
|
|
--- a/src/pcm/pcm_dshare.c
|
|
+++ b/src/pcm/pcm_dshare.c
|
|
@@ -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);
|
|
diff --git a/src/pcm/pcm_dsnoop.c b/src/pcm/pcm_dsnoop.c
|
|
index 0f9c9df481bc..e56e4022becf 100644
|
|
--- a/src/pcm/pcm_dsnoop.c
|
|
+++ b/src/pcm/pcm_dsnoop.c
|
|
@@ -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)
|
|
diff --git a/src/pcm/pcm_plugin.c b/src/pcm/pcm_plugin.c
|
|
index 4ddf10c1989e..a607ccfe27de 100644
|
|
--- a/src/pcm/pcm_plugin.c
|
|
+++ b/src/pcm/pcm_plugin.c
|
|
@@ -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)
|
|
--
|
|
2.1.2
|
|
|