mirror of
https://gitlab.freedesktop.org/pipewire/pipewire
synced 2024-07-21 10:16:14 +00:00
pulse-server: use the fixed rate for graph rate
We need to use the format rate for calculating the buffer size and latency but the fixated rate for the graph rate. See #3317
This commit is contained in:
parent
91ac3acf3d
commit
f612ffe8e4
|
@ -1564,7 +1564,7 @@ static int do_create_playback_stream(struct client *client, uint32_t command, ui
|
|||
int res;
|
||||
struct sample_spec ss, fix_ss;
|
||||
struct channel_map map, fix_map;
|
||||
uint32_t sink_index, syncid, rate = 0;
|
||||
uint32_t sink_index, syncid, ss_rate = 0, rate = 0;
|
||||
const char *sink_name;
|
||||
struct buffer_attr attr = { 0 };
|
||||
bool corked = false,
|
||||
|
@ -1712,7 +1712,7 @@ static int do_create_playback_stream(struct client *client, uint32_t command, ui
|
|||
n_params++;
|
||||
n_valid_formats++;
|
||||
if (r > rate)
|
||||
rate = r;
|
||||
ss_rate = rate = r;
|
||||
} else {
|
||||
log_format_info(impl, SPA_LOG_LEVEL_WARN, &format);
|
||||
}
|
||||
|
@ -1724,9 +1724,9 @@ static int do_create_playback_stream(struct client *client, uint32_t command, ui
|
|||
struct sample_spec sfix = ss;
|
||||
struct channel_map mfix = map;
|
||||
|
||||
rate = ss.rate;
|
||||
|
||||
ss_rate = ss.rate;
|
||||
sample_spec_fix(&sfix, &mfix, &fix_ss, &fix_map, &props->dict);
|
||||
rate = sfix.rate;
|
||||
|
||||
if (n_params < MAX_FORMATS &&
|
||||
(params[n_params] = format_build_param(&b,
|
||||
|
@ -1763,7 +1763,7 @@ static int do_create_playback_stream(struct client *client, uint32_t command, ui
|
|||
|
||||
if (rate != 0) {
|
||||
struct spa_fraction lat;
|
||||
fix_playback_buffer_attr(stream, &attr, rate, &lat);
|
||||
fix_playback_buffer_attr(stream, &attr, ss_rate, &lat);
|
||||
pw_properties_setf(props, PW_KEY_NODE_RATE, "1/%u", rate);
|
||||
pw_properties_setf(props, PW_KEY_NODE_LATENCY, "%u/%u",
|
||||
lat.num, lat.denom);
|
||||
|
@ -1860,7 +1860,7 @@ static int do_create_record_stream(struct client *client, uint32_t command, uint
|
|||
struct pw_properties *props = NULL;
|
||||
uint8_t n_formats = 0;
|
||||
struct stream *stream = NULL;
|
||||
uint32_t n_params = 0, n_valid_formats = 0, flags, id, rate = 0;
|
||||
uint32_t n_params = 0, n_valid_formats = 0, flags, id, ss_rate = 0, rate = 0;
|
||||
const struct spa_pod *params[MAX_FORMATS];
|
||||
uint8_t buffer[4096];
|
||||
struct spa_pod_builder b = SPA_POD_BUILDER_INIT(buffer, sizeof(buffer));
|
||||
|
@ -1966,7 +1966,7 @@ static int do_create_record_stream(struct client *client, uint32_t command, uint
|
|||
n_params++;
|
||||
n_valid_formats++;
|
||||
if (r > rate)
|
||||
rate = r;
|
||||
ss_rate = rate = r;
|
||||
} else {
|
||||
log_format_info(impl, SPA_LOG_LEVEL_WARN, &format);
|
||||
}
|
||||
|
@ -1989,9 +1989,9 @@ static int do_create_record_stream(struct client *client, uint32_t command, uint
|
|||
struct sample_spec sfix = ss;
|
||||
struct channel_map mfix = map;
|
||||
|
||||
rate = ss.rate;
|
||||
|
||||
ss_rate = ss.rate;
|
||||
sample_spec_fix(&sfix, &mfix, &fix_ss, &fix_map, &props->dict);
|
||||
rate = sfix.rate;
|
||||
|
||||
if (n_params < MAX_FORMATS &&
|
||||
(params[n_params] = format_build_param(&b,
|
||||
|
@ -2028,7 +2028,7 @@ static int do_create_record_stream(struct client *client, uint32_t command, uint
|
|||
|
||||
if (rate != 0) {
|
||||
struct spa_fraction lat;
|
||||
fix_record_buffer_attr(stream, &attr, rate, &lat);
|
||||
fix_record_buffer_attr(stream, &attr, ss_rate, &lat);
|
||||
pw_properties_setf(props, PW_KEY_NODE_RATE, "1/%u", rate);
|
||||
pw_properties_setf(props, PW_KEY_NODE_LATENCY, "%u/%u",
|
||||
lat.num, lat.denom);
|
||||
|
|
Loading…
Reference in a new issue