mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-31 22:25:33 -04:00
sink, source: Add API to update sample spec
This is useful to have visibility into when the whole sample spec changes at runtime (during reconfiguration, for example).
This commit is contained in:
parent
628c0c0b74
commit
b550fa5628
5 changed files with 49 additions and 2 deletions
|
|
@ -178,8 +178,9 @@ static void sink_update_requested_latency_cb(pa_sink *s) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sink_reconfigure_cb(pa_sink *s, pa_sample_spec *spec, pa_channel_map *map, bool passthrough) {
|
static int sink_reconfigure_cb(pa_sink *s, pa_sample_spec *spec, pa_channel_map *map, bool passthrough) {
|
||||||
/* We don't need to do anything */
|
pa_sink_assert_ref(s);
|
||||||
s->sample_spec = *spec;
|
|
||||||
|
pa_sink_set_sample_spec(s, spec);
|
||||||
|
|
||||||
if (map)
|
if (map)
|
||||||
pa_sink_set_channel_map(s, map);
|
pa_sink_set_channel_map(s, map);
|
||||||
|
|
|
||||||
|
|
@ -4046,6 +4046,28 @@ done:
|
||||||
return out_formats;
|
return out_formats;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Called from the main thread */
|
||||||
|
void pa_sink_set_sample_spec(pa_sink *s, pa_sample_spec *spec) {
|
||||||
|
pa_sample_spec old_spec;
|
||||||
|
char spec_str[PA_SAMPLE_SPEC_SNPRINT_MAX], old_spec_str[PA_SAMPLE_SPEC_SNPRINT_MAX];
|
||||||
|
|
||||||
|
pa_assert(s);
|
||||||
|
pa_assert(pa_sample_spec_valid(spec));
|
||||||
|
|
||||||
|
old_spec = s->sample_spec;
|
||||||
|
if (pa_sample_spec_equal(&old_spec, spec))
|
||||||
|
return;
|
||||||
|
|
||||||
|
pa_sample_spec_snprint(spec_str, sizeof(spec_str), spec);
|
||||||
|
pa_sample_spec_snprint(old_spec_str, sizeof(old_spec_str), &old_spec);
|
||||||
|
|
||||||
|
pa_log_info("%s: spec: %s -> %s", s->name, old_spec_str, spec_str);
|
||||||
|
|
||||||
|
s->sample_spec = *spec;
|
||||||
|
|
||||||
|
pa_subscription_post(s->core, PA_SUBSCRIPTION_EVENT_SINK | PA_SUBSCRIPTION_EVENT_CHANGE, s->index);
|
||||||
|
}
|
||||||
|
|
||||||
/* Called from the main thread */
|
/* Called from the main thread */
|
||||||
void pa_sink_set_sample_format(pa_sink *s, pa_sample_format_t format) {
|
void pa_sink_set_sample_format(pa_sink *s, pa_sample_format_t format) {
|
||||||
pa_sample_format_t old_format;
|
pa_sample_format_t old_format;
|
||||||
|
|
|
||||||
|
|
@ -527,6 +527,7 @@ bool pa_sink_set_formats(pa_sink *s, pa_idxset *formats);
|
||||||
bool pa_sink_check_format(pa_sink *s, pa_format_info *f);
|
bool 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);
|
||||||
|
|
||||||
|
void pa_sink_set_sample_spec(pa_sink *s, pa_sample_spec *spec);
|
||||||
void pa_sink_set_sample_format(pa_sink *s, pa_sample_format_t format);
|
void pa_sink_set_sample_format(pa_sink *s, pa_sample_format_t format);
|
||||||
void pa_sink_set_sample_rate(pa_sink *s, uint32_t rate);
|
void pa_sink_set_sample_rate(pa_sink *s, uint32_t rate);
|
||||||
void pa_sink_set_channels(pa_sink *s, uint8_t channels);
|
void pa_sink_set_channels(pa_sink *s, uint8_t channels);
|
||||||
|
|
|
||||||
|
|
@ -3040,6 +3040,28 @@ done:
|
||||||
return out_formats;
|
return out_formats;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Called from the main thread */
|
||||||
|
void pa_source_set_sample_spec(pa_source *s, pa_sample_spec *spec) {
|
||||||
|
pa_sample_spec old_spec;
|
||||||
|
char spec_str[PA_SAMPLE_SPEC_SNPRINT_MAX], old_spec_str[PA_SAMPLE_SPEC_SNPRINT_MAX];
|
||||||
|
|
||||||
|
pa_assert(s);
|
||||||
|
pa_assert(pa_sample_spec_valid(spec));
|
||||||
|
|
||||||
|
old_spec = s->sample_spec;
|
||||||
|
if (pa_sample_spec_equal(&old_spec, spec))
|
||||||
|
return;
|
||||||
|
|
||||||
|
pa_sample_spec_snprint(spec_str, sizeof(spec_str), spec);
|
||||||
|
pa_sample_spec_snprint(old_spec_str, sizeof(old_spec_str), &old_spec);
|
||||||
|
|
||||||
|
pa_log_info("%s: spec: %s -> %s", s->name, old_spec_str, spec_str);
|
||||||
|
|
||||||
|
s->sample_spec = *spec;
|
||||||
|
|
||||||
|
pa_subscription_post(s->core, PA_SUBSCRIPTION_EVENT_SOURCE | PA_SUBSCRIPTION_EVENT_CHANGE, s->index);
|
||||||
|
}
|
||||||
|
|
||||||
/* Called from the main thread */
|
/* Called from the main thread */
|
||||||
void pa_source_set_sample_format(pa_source *s, pa_sample_format_t format) {
|
void pa_source_set_sample_format(pa_source *s, pa_sample_format_t format) {
|
||||||
pa_sample_format_t old_format;
|
pa_sample_format_t old_format;
|
||||||
|
|
|
||||||
|
|
@ -448,6 +448,7 @@ pa_idxset* pa_source_get_formats(pa_source *s);
|
||||||
bool pa_source_check_format(pa_source *s, pa_format_info *f);
|
bool pa_source_check_format(pa_source *s, pa_format_info *f);
|
||||||
pa_idxset* pa_source_check_formats(pa_source *s, pa_idxset *in_formats);
|
pa_idxset* pa_source_check_formats(pa_source *s, pa_idxset *in_formats);
|
||||||
|
|
||||||
|
void pa_source_set_sample_spec(pa_source *s, pa_sample_spec *spec);
|
||||||
void pa_source_set_sample_format(pa_source *s, pa_sample_format_t format);
|
void pa_source_set_sample_format(pa_source *s, pa_sample_format_t format);
|
||||||
void pa_source_set_sample_rate(pa_source *s, uint32_t rate);
|
void pa_source_set_sample_rate(pa_source *s, uint32_t rate);
|
||||||
void pa_source_set_channels(pa_source *s, uint8_t channels);
|
void pa_source_set_channels(pa_source *s, uint8_t channels);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue