mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-04 13:29:59 -05:00
sink: Add a set_formats() API
This adds API to let external sources specify what formats a sink supports. Sinks must opt-in to allow this, and can perform some validation if required.
This commit is contained in:
parent
b430407f47
commit
485d4dd542
2 changed files with 23 additions and 0 deletions
|
|
@ -180,6 +180,7 @@ static void reset_callbacks(pa_sink *s) {
|
||||||
s->update_requested_latency = NULL;
|
s->update_requested_latency = NULL;
|
||||||
s->set_port = NULL;
|
s->set_port = NULL;
|
||||||
s->get_formats = NULL;
|
s->get_formats = NULL;
|
||||||
|
s->set_formats = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Called from main context */
|
/* Called from main context */
|
||||||
|
|
@ -3428,6 +3429,21 @@ pa_idxset* pa_sink_get_formats(pa_sink *s) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Called from the main thread */
|
||||||
|
/* Allows an external source to set what formats a sink supports if the sink
|
||||||
|
* permits this. The function makes a copy of the formats on success. */
|
||||||
|
pa_bool_t pa_sink_set_formats(pa_sink *s, pa_idxset *formats) {
|
||||||
|
pa_assert(s);
|
||||||
|
pa_assert(formats);
|
||||||
|
|
||||||
|
if (s->set_formats)
|
||||||
|
/* Sink supports setting formats -- let's give it a shot */
|
||||||
|
return s->set_formats(s, formats);
|
||||||
|
else
|
||||||
|
/* Sink doesn't support setting this -- bail out */
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Called from the main thread */
|
/* Called from the main thread */
|
||||||
/* Checks if the sink can accept this format */
|
/* Checks if the sink can accept this format */
|
||||||
pa_bool_t pa_sink_check_format(pa_sink *s, pa_format_info *f)
|
pa_bool_t pa_sink_check_format(pa_sink *s, pa_format_info *f)
|
||||||
|
|
|
||||||
|
|
@ -223,6 +223,12 @@ struct pa_sink {
|
||||||
* in descending order of preference. */
|
* in descending order of preference. */
|
||||||
pa_idxset* (*get_formats)(pa_sink *s); /* ditto */
|
pa_idxset* (*get_formats)(pa_sink *s); /* ditto */
|
||||||
|
|
||||||
|
/* Called to set the list of formats supported by the sink. Can be
|
||||||
|
* NULL if the sink does not support this. Returns TRUE on success,
|
||||||
|
* FALSE otherwise (for example when an unsupportable format is
|
||||||
|
* set). Makes a copy of the formats passed in. */
|
||||||
|
pa_bool_t (*set_formats)(pa_sink *s, pa_idxset *formats); /* ditto */
|
||||||
|
|
||||||
/* Contains copies of the above data so that the real-time worker
|
/* Contains copies of the above data so that the real-time worker
|
||||||
* thread can work without access locking */
|
* thread can work without access locking */
|
||||||
struct {
|
struct {
|
||||||
|
|
@ -434,6 +440,7 @@ void pa_sink_move_all_finish(pa_sink *s, pa_queue *q, pa_bool_t save);
|
||||||
void pa_sink_move_all_fail(pa_queue *q);
|
void pa_sink_move_all_fail(pa_queue *q);
|
||||||
|
|
||||||
pa_idxset* pa_sink_get_formats(pa_sink *s);
|
pa_idxset* pa_sink_get_formats(pa_sink *s);
|
||||||
|
pa_bool_t pa_sink_set_formats(pa_sink *s, pa_idxset *formats);
|
||||||
pa_bool_t pa_sink_check_format(pa_sink *s, pa_format_info *f);
|
pa_bool_t pa_sink_check_format(pa_sink *s, pa_format_info *f);
|
||||||
pa_idxset* pa_sink_check_formats(pa_sink *s, pa_idxset *in_formats);
|
pa_idxset* pa_sink_check_formats(pa_sink *s, pa_idxset *in_formats);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue