media-sound/pulseaudio-daemon: remove unused patches

Signed-off-by: Michael Mair-Keimberger <mmk@levelnine.at>
Signed-off-by: Conrad Kostecki <conikost@gentoo.org>
This commit is contained in:
Michael Mair-Keimberger
2024-03-09 10:41:27 +01:00
committed by Conrad Kostecki
parent 7e7cb3e8ab
commit 2356090f22
4 changed files with 0 additions and 594 deletions

View File

@@ -1,35 +0,0 @@
commit 86c5fbab5778685e19b5a4a9b8eb04ca90dff780
Author: Igor V. Kovalenko <igor.v.kovalenko@gmail.com>
Date: Sun Feb 5 19:49:10 2023 +0300
alsa-util: Add more standard sample rates.
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/776>
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index 9f35cb20f..fd30f18bd 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -1430,7 +1430,8 @@ unsigned int *pa_alsa_get_supported_rates(snd_pcm_t *pcm, unsigned int fallback_
32000, 44100, 48000,
64000, 88200, 96000,
128000, 176400, 192000,
- 384000 };
+ 352800, 384000,
+ 705600, 768000 };
bool supported[PA_ELEMENTSOF(all_rates)] = { false, };
snd_pcm_hw_params_t *hwparams;
unsigned int i, j, n, *rates = NULL;
diff --git a/src/pulse/sample.h b/src/pulse/sample.h
index 35346a865..65c0c5d6b 100644
--- a/src/pulse/sample.h
+++ b/src/pulse/sample.h
@@ -128,7 +128,7 @@ PA_C_DECL_BEGIN
#define PA_CHANNELS_MAX 32U
/** Maximum allowed sample rate */
-#define PA_RATE_MAX (48000U*8U)
+#define PA_RATE_MAX (48000U*16U)
/** Sample format */
typedef enum pa_sample_format {

View File

@@ -1,122 +0,0 @@
commit 300db779224625144d6279d230c2daa857c967d8
Author: Igor V. Kovalenko <igor.v.kovalenko@gmail.com>
Date: Thu Feb 9 13:28:29 2023 +0300
pstream: Pass frame size to keep split memblock parts aligned
`pa_pstream_send_memblock()` would split incoming memblock into parts not
exceeding maximum pool block size.
To make sure split parts of memblock are still frame-aligned add new `align` arg
to `pa_pstream_send_memblock`, find out required alignment from stream sample
format and pass it there. Bump default alignment to 256 which is good up to
32bit 64ch frames.
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/780>
diff --git a/src/modules/module-tunnel.c b/src/modules/module-tunnel.c
index 61f427bd3..ab094ba4e 100644
--- a/src/modules/module-tunnel.c
+++ b/src/modules/module-tunnel.c
@@ -676,7 +676,7 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
* IO thread context where the rest of the messages are
* dispatched. Yeah, ugly, but I am a lazy bastard. */
- pa_pstream_send_memblock(u->pstream, u->channel, 0, PA_SEEK_RELATIVE, chunk);
+ pa_pstream_send_memblock(u->pstream, u->channel, 0, PA_SEEK_RELATIVE, chunk, pa_frame_size(&u->sink->sample_spec));
u->receive_counter += chunk->length;
diff --git a/src/pulse/stream.c b/src/pulse/stream.c
index 0aa627396..3585b27e8 100644
--- a/src/pulse/stream.c
+++ b/src/pulse/stream.c
@@ -1535,7 +1535,7 @@ int pa_stream_write_ext_free(
s->write_memblock = NULL;
s->write_data = NULL;
- pa_pstream_send_memblock(s->context->pstream, s->channel, offset, seek, &chunk);
+ pa_pstream_send_memblock(s->context->pstream, s->channel, offset, seek, &chunk, pa_frame_size(&s->sample_spec));
pa_memblock_unref(chunk.memblock);
} else {
@@ -1569,7 +1569,7 @@ int pa_stream_write_ext_free(
pa_memblock_release(chunk.memblock);
}
- pa_pstream_send_memblock(s->context->pstream, s->channel, t_offset, t_seek, &chunk);
+ pa_pstream_send_memblock(s->context->pstream, s->channel, t_offset, t_seek, &chunk, pa_frame_size(&s->sample_spec));
t_offset = 0;
t_seek = PA_SEEK_RELATIVE;
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index 672182fbc..1342dee10 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -1260,7 +1260,7 @@ static void native_connection_send_memblock(pa_native_connection *c) {
if (schunk.length > r->buffer_attr.fragsize)
schunk.length = r->buffer_attr.fragsize;
- pa_pstream_send_memblock(c->pstream, r->index, 0, PA_SEEK_RELATIVE, &schunk);
+ pa_pstream_send_memblock(c->pstream, r->index, 0, PA_SEEK_RELATIVE, &schunk, pa_memblockq_get_base(r->memblockq));
pa_memblockq_drop(r->memblockq, schunk.length);
pa_memblock_unref(schunk.memblock);
@@ -2535,7 +2535,7 @@ static void setup_srbchannel(pa_native_connection *c, pa_mem_type_t shm_type) {
mc.memblock = srbt.memblock;
mc.index = 0;
mc.length = pa_memblock_get_length(srbt.memblock);
- pa_pstream_send_memblock(c->pstream, 0, 0, 0, &mc);
+ pa_pstream_send_memblock(c->pstream, 0, 0, 0, &mc, 0);
c->srbpending = srb;
return;
diff --git a/src/pulsecore/pstream.c b/src/pulsecore/pstream.c
index 7147b776a..ff62f464b 100644
--- a/src/pulsecore/pstream.c
+++ b/src/pulsecore/pstream.c
@@ -82,6 +82,10 @@ typedef uint32_t pa_pstream_descriptor[PA_PSTREAM_DESCRIPTOR_MAX];
*/
#define FRAME_SIZE_MAX_ALLOW (1024*1024*16)
+/* Default memblock alignment used with pa_pstream_send_memblock()
+ */
+#define DEFAULT_PSTREAM_MEMBLOCK_ALIGN (256)
+
PA_STATIC_FLIST_DECLARE(items, 0, pa_xfree);
struct item_info {
@@ -475,7 +479,7 @@ void pa_pstream_send_packet(pa_pstream*p, pa_packet *packet, pa_cmsg_ancil_data
p->mainloop->defer_enable(p->defer_event, 1);
}
-void pa_pstream_send_memblock(pa_pstream*p, uint32_t channel, int64_t offset, pa_seek_mode_t seek_mode, const pa_memchunk *chunk) {
+void pa_pstream_send_memblock(pa_pstream*p, uint32_t channel, int64_t offset, pa_seek_mode_t seek_mode, const pa_memchunk *chunk, size_t align) {
size_t length, idx;
size_t bsm;
@@ -492,6 +496,11 @@ void pa_pstream_send_memblock(pa_pstream*p, uint32_t channel, int64_t offset, pa
bsm = pa_mempool_block_size_max(p->mempool);
+ if (align == 0)
+ align = DEFAULT_PSTREAM_MEMBLOCK_ALIGN;
+
+ bsm = (bsm / align) * align;
+
while (length > 0) {
struct item_info *i;
size_t n;
diff --git a/src/pulsecore/pstream.h b/src/pulsecore/pstream.h
index 2bff270ad..88bdca4cc 100644
--- a/src/pulsecore/pstream.h
+++ b/src/pulsecore/pstream.h
@@ -51,7 +51,7 @@ void pa_pstream_unlink(pa_pstream *p);
int pa_pstream_attach_memfd_shmid(pa_pstream *p, unsigned shm_id, int memfd_fd);
void pa_pstream_send_packet(pa_pstream*p, pa_packet *packet, pa_cmsg_ancil_data *ancil_data);
-void pa_pstream_send_memblock(pa_pstream*p, uint32_t channel, int64_t offset, pa_seek_mode_t seek, const pa_memchunk *chunk);
+void pa_pstream_send_memblock(pa_pstream*p, uint32_t channel, int64_t offset, pa_seek_mode_t seek, const pa_memchunk *chunk, size_t align);
void pa_pstream_send_release(pa_pstream *p, uint32_t block_id);
void pa_pstream_send_revoke(pa_pstream *p, uint32_t block_id);

View File

@@ -1,55 +0,0 @@
commit 1cfa7378236b3cf9daf3be09d3227b92df69cc53
Author: Igor V. Kovalenko <igor.v.kovalenko@gmail.com>
Date: Wed Feb 8 03:24:59 2023 +0300
resampler: Fix oversized memblock pushed from resampler
The assumption that the format enum is ordered by size is not valid for quite
some time, since 24bit formats were appended to format enum later than 32bit
formats. This causes resampler to produce properly aligned memblock of size
larger than maximum mempool block size if input format is 24bit and output
format is 32bit.
Oversized block is getting split by `pa_pstream_send_memblock()` into parts of
size not exceeding maximum mempool block size. This usually works well but for
32ch 32bit 48000Hz stream the frame alignment is 128 bytes and maximum mempool
block size value is multiple of 64 but not 128 bytes, therefore resulting parts
are misaligned.
On receiving side this causes extra allocation of 128 byte chunk while `mcalign`
helper reassembles properly aligned frame out of second block of misaligned
size. While first and second properly aligned frames are retrieved successfully
from `mcalign` helper, third retrieved frame would end up with properly aligned
size but misaligned memblock index (in this example, that would be 64 bytes.)
Attempt to push a chunk with misaligned memblock index causes assertion failure
Assertion 'uchunk->index % bq->base == 0' failed at memblockq.c:289,
function pa_memblockq_push(). Aborting.
Fix oversized block issue by checking proper size of format instead of enum
value.
Fixes: a67c21f09 ("merge 'lennart' branch back into trunk.")
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/778>
diff --git a/src/pulsecore/resampler.c b/src/pulsecore/resampler.c
index b035f67ed..ba18c92c4 100644
--- a/src/pulsecore/resampler.c
+++ b/src/pulsecore/resampler.c
@@ -613,9 +613,13 @@ size_t pa_resampler_max_block_size(pa_resampler *r) {
* conversion */
max_ss.channels = (uint8_t) (PA_MAX(r->i_ss.channels, r->o_ss.channels));
- /* We silently assume that the format enum is ordered by size */
- max_ss.format = PA_MAX(r->i_ss.format, r->o_ss.format);
- max_ss.format = PA_MAX(max_ss.format, r->work_format);
+ max_ss.format = r->i_ss.format;
+
+ if (pa_sample_size_of_format(max_ss.format) < pa_sample_size_of_format(r->o_ss.format))
+ max_ss.format = r->o_ss.format;
+
+ if (pa_sample_size_of_format(max_ss.format) < pa_sample_size_of_format(r->work_format))
+ max_ss.format = r->work_format;
max_ss.rate = PA_MAX(r->i_ss.rate, r->o_ss.rate);

View File

@@ -1,382 +0,0 @@
commit aed52c507f345d0b5c4cd2b1d2c58dae2d904b53
Author: Igor V. Kovalenko <igor.v.kovalenko@gmail.com>
Date: Wed Feb 22 01:19:24 2023 +0300
alsa-util: Perform format and rate detection before setting HW params
Perform detection of supported sample format and rates just after device is
opened, before `snd_pcm_hw_params()` is called for the first time. This fixes a
problem where device restricts available sample rates after HW params are set
preventing sample rate detection (seen with UAC2 devices and kernel 6.1.9)
Bug: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/1414
Bug: https://github.com/alsa-project/alsa-lib/issues/119
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/782>
diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c
index 49c39687c..c272e392b 100644
--- a/src/modules/alsa/alsa-mixer.c
+++ b/src/modules/alsa/alsa-mixer.c
@@ -5074,7 +5074,7 @@ static snd_pcm_t* mapping_open_pcm(pa_alsa_mapping *m,
handle = pa_alsa_open_by_template(
m->device_strings, dev_id, NULL, &try_ss,
&try_map, mode, &try_period_size,
- &try_buffer_size, 0, NULL, NULL, exact_channels);
+ &try_buffer_size, 0, NULL, NULL, NULL, NULL, exact_channels);
if (handle && !exact_channels && m->channel_map.channels != try_map.channels) {
char buf[PA_CHANNEL_MAP_SNPRINT_MAX];
pa_log_debug("Channel map for mapping '%s' permanently changed to '%s'", m->name,
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index b249df680..ca22f195f 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -2527,7 +2527,9 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
&ss, &map,
SND_PCM_STREAM_PLAYBACK,
&period_frames, &buffer_frames, tsched_frames,
- &b, &d, mapping)))
+ &b, &d,
+ &u->supported_formats, &u->supported_rates,
+ mapping)))
goto fail;
} else if ((dev_id = pa_modargs_get_value(ma, "device_id", NULL))) {
@@ -2541,7 +2543,9 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
&ss, &map,
SND_PCM_STREAM_PLAYBACK,
&period_frames, &buffer_frames, tsched_frames,
- &b, &d, profile_set, &mapping)))
+ &b, &d,
+ &u->supported_formats, &u->supported_rates,
+ profile_set, &mapping)))
goto fail;
} else {
@@ -2552,7 +2556,9 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
&ss, &map,
SND_PCM_STREAM_PLAYBACK,
&period_frames, &buffer_frames, tsched_frames,
- &b, &d, false)))
+ &b, &d,
+ &u->supported_formats, &u->supported_rates,
+ false)))
goto fail;
}
@@ -2598,13 +2604,11 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
u->verified_sample_spec = ss;
- u->supported_formats = pa_alsa_get_supported_formats(u->pcm_handle, ss.format);
if (!u->supported_formats) {
pa_log_error("Failed to find any supported sample formats.");
goto fail;
}
- u->supported_rates = pa_alsa_get_supported_rates(u->pcm_handle, ss.rate);
if (!u->supported_rates) {
pa_log_error("Failed to find any supported sample rates.");
goto fail;
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index ef8b12c32..d88c47f1f 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -2218,7 +2218,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
&ss, &map,
SND_PCM_STREAM_CAPTURE,
&period_frames, &buffer_frames, tsched_frames,
- &b, &d, mapping)))
+ &b, &d, &u->supported_formats, &u->supported_rates, mapping)))
goto fail;
} else if ((dev_id = pa_modargs_get_value(ma, "device_id", NULL))) {
@@ -2232,7 +2232,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
&ss, &map,
SND_PCM_STREAM_CAPTURE,
&period_frames, &buffer_frames, tsched_frames,
- &b, &d, profile_set, &mapping)))
+ &b, &d, &u->supported_formats, &u->supported_rates, profile_set, &mapping)))
goto fail;
} else {
@@ -2243,7 +2243,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
&ss, &map,
SND_PCM_STREAM_CAPTURE,
&period_frames, &buffer_frames, tsched_frames,
- &b, &d, false)))
+ &b, &d, &u->supported_formats, &u->supported_rates, false)))
goto fail;
}
@@ -2279,13 +2279,11 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
u->verified_sample_spec = ss;
- u->supported_formats = pa_alsa_get_supported_formats(u->pcm_handle, ss.format);
if (!u->supported_formats) {
pa_log_error("Failed to find any supported sample formats.");
goto fail;
}
- u->supported_rates = pa_alsa_get_supported_rates(u->pcm_handle, ss.rate);
if (!u->supported_rates) {
pa_log_error("Failed to find any supported sample rates.");
goto fail;
diff --git a/src/modules/alsa/alsa-ucm.c b/src/modules/alsa/alsa-ucm.c
index e75756f53..744e7aae1 100644
--- a/src/modules/alsa/alsa-ucm.c
+++ b/src/modules/alsa/alsa-ucm.c
@@ -2026,7 +2026,7 @@ static snd_pcm_t* mapping_open_pcm(pa_alsa_ucm_config *ucm, pa_alsa_mapping *m,
try_buffer_size = ucm->core->default_n_fragments * try_period_size;
pcm = pa_alsa_open_by_device_string(m->device_strings[0], NULL, &try_ss,
- &try_map, mode, &try_period_size, &try_buffer_size, 0, NULL, NULL, exact_channels);
+ &try_map, mode, &try_period_size, &try_buffer_size, 0, NULL, NULL, NULL, NULL, exact_channels);
if (pcm) {
if (!exact_channels)
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index fd30f18bd..b631c870c 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -523,6 +523,8 @@ snd_pcm_t *pa_alsa_open_by_device_id_auto(
snd_pcm_uframes_t tsched_size,
bool *use_mmap,
bool *use_tsched,
+ pa_sample_format_t **query_supported_formats,
+ unsigned int **query_supported_rates,
pa_alsa_profile_set *ps,
pa_alsa_mapping **mapping) {
@@ -561,6 +563,8 @@ snd_pcm_t *pa_alsa_open_by_device_id_auto(
tsched_size,
use_mmap,
use_tsched,
+ query_supported_formats,
+ query_supported_rates,
m);
if (pcm_handle) {
@@ -588,6 +592,8 @@ snd_pcm_t *pa_alsa_open_by_device_id_auto(
tsched_size,
use_mmap,
use_tsched,
+ query_supported_formats,
+ query_supported_rates,
m);
if (pcm_handle) {
@@ -612,6 +618,8 @@ snd_pcm_t *pa_alsa_open_by_device_id_auto(
tsched_size,
use_mmap,
use_tsched,
+ query_supported_formats,
+ query_supported_rates,
false);
pa_xfree(d);
@@ -632,6 +640,8 @@ snd_pcm_t *pa_alsa_open_by_device_id_mapping(
snd_pcm_uframes_t tsched_size,
bool *use_mmap,
bool *use_tsched,
+ pa_sample_format_t **query_supported_formats,
+ unsigned int **query_supported_rates,
pa_alsa_mapping *m) {
snd_pcm_t *pcm_handle;
@@ -661,6 +671,8 @@ snd_pcm_t *pa_alsa_open_by_device_id_mapping(
tsched_size,
use_mmap,
use_tsched,
+ query_supported_formats,
+ query_supported_rates,
pa_channel_map_valid(&m->channel_map) /* Query the channel count if we don't know what we want */);
if (!pcm_handle)
@@ -684,6 +696,8 @@ snd_pcm_t *pa_alsa_open_by_device_string(
snd_pcm_uframes_t tsched_size,
bool *use_mmap,
bool *use_tsched,
+ pa_sample_format_t **query_supported_formats,
+ unsigned int **query_supported_rates,
bool require_exact_channel_number) {
int err;
@@ -711,6 +725,12 @@ snd_pcm_t *pa_alsa_open_by_device_string(
pa_log_debug("Managed to open %s", d);
+ if (query_supported_formats)
+ *query_supported_formats = pa_alsa_get_supported_formats(pcm_handle, ss->format);
+
+ if (query_supported_rates)
+ *query_supported_rates = pa_alsa_get_supported_rates(pcm_handle, ss->rate);
+
if ((err = pa_alsa_set_hw_params(
pcm_handle,
ss,
@@ -784,6 +804,8 @@ snd_pcm_t *pa_alsa_open_by_template(
snd_pcm_uframes_t tsched_size,
bool *use_mmap,
bool *use_tsched,
+ pa_sample_format_t **query_supported_formats,
+ unsigned int **query_supported_rates,
bool require_exact_channel_number) {
snd_pcm_t *pcm_handle;
@@ -805,6 +827,8 @@ snd_pcm_t *pa_alsa_open_by_template(
tsched_size,
use_mmap,
use_tsched,
+ query_supported_formats,
+ query_supported_rates,
require_exact_channel_number);
pa_xfree(d);
diff --git a/src/modules/alsa/alsa-util.h b/src/modules/alsa/alsa-util.h
index 2eed3eac3..c65801104 100644
--- a/src/modules/alsa/alsa-util.h
+++ b/src/modules/alsa/alsa-util.h
@@ -67,6 +67,8 @@ snd_pcm_t *pa_alsa_open_by_device_id_auto(
snd_pcm_uframes_t tsched_size,
bool *use_mmap, /* modified at return */
bool *use_tsched, /* modified at return */
+ pa_sample_format_t **query_supported_formats, /* modified at return */
+ unsigned int **query_supported_rates, /* modified at return */
pa_alsa_profile_set *ps,
pa_alsa_mapping **mapping); /* modified at return */
@@ -82,6 +84,8 @@ snd_pcm_t *pa_alsa_open_by_device_id_mapping(
snd_pcm_uframes_t tsched_size,
bool *use_mmap, /* modified at return */
bool *use_tsched, /* modified at return */
+ pa_sample_format_t **query_supported_formats, /* modified at return */
+ unsigned int **query_supported_rates, /* modified at return */
pa_alsa_mapping *mapping);
/* Opens the explicit ALSA device */
@@ -96,6 +100,8 @@ snd_pcm_t *pa_alsa_open_by_device_string(
snd_pcm_uframes_t tsched_size,
bool *use_mmap, /* modified at return */
bool *use_tsched, /* modified at return */
+ pa_sample_format_t **query_supported_formats, /* modified at return */
+ unsigned int **query_supported_rates, /* modified at return */
bool require_exact_channel_number);
/* Opens the explicit ALSA device with a fallback list */
@@ -111,6 +117,8 @@ snd_pcm_t *pa_alsa_open_by_template(
snd_pcm_uframes_t tsched_size,
bool *use_mmap, /* modified at return */
bool *use_tsched, /* modified at return */
+ pa_sample_format_t **query_supported_formats, /* modified at return */
+ unsigned int **query_supported_rates, /* modified at return */
bool require_exact_channel_number);
void pa_alsa_dump(pa_log_level_t level, snd_pcm_t *pcm);
commit 5ab2b9cb0e32190c3ea12b0f4cb7533d7340bbf1
Author: Igor V. Kovalenko <igor.v.kovalenko@gmail.com>
Date: Wed Feb 22 01:50:22 2023 +0300
alsa-util: Fix pa_alsa_get_supported_formats fallback.
Looks like original intention was to scan over sample formats supported by PA,
but code does the scan by list of alsa formats. Reverse the map and adjust
fallback case which now can use the same map.
Part-of: <https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/merge_requests/782>
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index b631c870c..d3c092f52 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -1502,35 +1502,35 @@ unsigned int *pa_alsa_get_supported_rates(snd_pcm_t *pcm, unsigned int fallback_
}
pa_sample_format_t *pa_alsa_get_supported_formats(snd_pcm_t *pcm, pa_sample_format_t fallback_format) {
- static const snd_pcm_format_t format_trans_to_pa[] = {
- [SND_PCM_FORMAT_U8] = PA_SAMPLE_U8,
- [SND_PCM_FORMAT_A_LAW] = PA_SAMPLE_ALAW,
- [SND_PCM_FORMAT_MU_LAW] = PA_SAMPLE_ULAW,
- [SND_PCM_FORMAT_S16_LE] = PA_SAMPLE_S16LE,
- [SND_PCM_FORMAT_S16_BE] = PA_SAMPLE_S16BE,
- [SND_PCM_FORMAT_FLOAT_LE] = PA_SAMPLE_FLOAT32LE,
- [SND_PCM_FORMAT_FLOAT_BE] = PA_SAMPLE_FLOAT32BE,
- [SND_PCM_FORMAT_S32_LE] = PA_SAMPLE_S32LE,
- [SND_PCM_FORMAT_S32_BE] = PA_SAMPLE_S32BE,
- [SND_PCM_FORMAT_S24_3LE] = PA_SAMPLE_S24LE,
- [SND_PCM_FORMAT_S24_3BE] = PA_SAMPLE_S24BE,
- [SND_PCM_FORMAT_S24_LE] = PA_SAMPLE_S24_32LE,
- [SND_PCM_FORMAT_S24_BE] = PA_SAMPLE_S24_32BE,
+ static const snd_pcm_format_t format_trans_to_pcm[] = {
+ [PA_SAMPLE_U8] = SND_PCM_FORMAT_U8,
+ [PA_SAMPLE_ALAW] = SND_PCM_FORMAT_A_LAW,
+ [PA_SAMPLE_ULAW] = SND_PCM_FORMAT_MU_LAW,
+ [PA_SAMPLE_S16LE] = SND_PCM_FORMAT_S16_LE,
+ [PA_SAMPLE_S16BE] = SND_PCM_FORMAT_S16_BE,
+ [PA_SAMPLE_FLOAT32LE] = SND_PCM_FORMAT_FLOAT_LE,
+ [PA_SAMPLE_FLOAT32BE] = SND_PCM_FORMAT_FLOAT_BE,
+ [PA_SAMPLE_S32LE] = SND_PCM_FORMAT_S32_LE,
+ [PA_SAMPLE_S32BE] = SND_PCM_FORMAT_S32_BE,
+ [PA_SAMPLE_S24LE] = SND_PCM_FORMAT_S24_3LE,
+ [PA_SAMPLE_S24BE] = SND_PCM_FORMAT_S24_3BE,
+ [PA_SAMPLE_S24_32LE] = SND_PCM_FORMAT_S24_LE,
+ [PA_SAMPLE_S24_32BE] = SND_PCM_FORMAT_S24_BE,
};
- static const snd_pcm_format_t all_formats[] = {
- SND_PCM_FORMAT_U8,
- SND_PCM_FORMAT_A_LAW,
- SND_PCM_FORMAT_MU_LAW,
- SND_PCM_FORMAT_S16_LE,
- SND_PCM_FORMAT_S16_BE,
- SND_PCM_FORMAT_FLOAT_LE,
- SND_PCM_FORMAT_FLOAT_BE,
- SND_PCM_FORMAT_S32_LE,
- SND_PCM_FORMAT_S32_BE,
- SND_PCM_FORMAT_S24_3LE,
- SND_PCM_FORMAT_S24_3BE,
- SND_PCM_FORMAT_S24_LE,
- SND_PCM_FORMAT_S24_BE,
+ static const pa_sample_format_t all_formats[] = {
+ PA_SAMPLE_U8,
+ PA_SAMPLE_ALAW,
+ PA_SAMPLE_ULAW,
+ PA_SAMPLE_S16LE,
+ PA_SAMPLE_S16BE,
+ PA_SAMPLE_FLOAT32LE,
+ PA_SAMPLE_FLOAT32BE,
+ PA_SAMPLE_S32LE,
+ PA_SAMPLE_S32BE,
+ PA_SAMPLE_S24LE,
+ PA_SAMPLE_S24BE,
+ PA_SAMPLE_S24_32LE,
+ PA_SAMPLE_S24_32BE,
};
bool supported[PA_ELEMENTSOF(all_formats)] = {
false,
@@ -1548,7 +1548,7 @@ pa_sample_format_t *pa_alsa_get_supported_formats(snd_pcm_t *pcm, pa_sample_form
}
for (i = 0, n = 0; i < PA_ELEMENTSOF(all_formats); i++) {
- if (snd_pcm_hw_params_test_format(pcm, hwparams, all_formats[i]) == 0) {
+ if (snd_pcm_hw_params_test_format(pcm, hwparams, format_trans_to_pcm[all_formats[i]]) == 0) {
supported[i] = true;
n++;
}
@@ -1559,7 +1559,7 @@ pa_sample_format_t *pa_alsa_get_supported_formats(snd_pcm_t *pcm, pa_sample_form
for (i = 0, j = 0; i < PA_ELEMENTSOF(all_formats); i++) {
if (supported[i])
- formats[j++] = format_trans_to_pa[all_formats[i]];
+ formats[j++] = all_formats[i];
}
formats[j] = PA_SAMPLE_MAX;
@@ -1567,7 +1567,7 @@ pa_sample_format_t *pa_alsa_get_supported_formats(snd_pcm_t *pcm, pa_sample_form
formats = pa_xnew(pa_sample_format_t, 2);
formats[0] = fallback_format;
- if ((ret = snd_pcm_hw_params_set_format(pcm, hwparams, format_trans_to_pa[formats[0]])) < 0) {
+ if ((ret = snd_pcm_hw_params_set_format(pcm, hwparams, format_trans_to_pcm[formats[0]])) < 0) {
pa_log_debug("snd_pcm_hw_params_set_format() failed: %s", pa_alsa_strerror(ret));
pa_xfree(formats);
return NULL;