mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-04 13:29:59 -05:00
Rework handling of the PA_SINK_LATENCY/PA_SOURCE_LATENCY flags
This commit is contained in:
parent
fb4c111d18
commit
2ff20ceccb
2 changed files with 11 additions and 3 deletions
|
|
@ -240,7 +240,7 @@ pa_sink* pa_sink_new(
|
||||||
pa_proplist_setf(source_data.proplist, PA_PROP_DEVICE_DESCRIPTION, "Monitor of %s", dn ? dn : s->name);
|
pa_proplist_setf(source_data.proplist, PA_PROP_DEVICE_DESCRIPTION, "Monitor of %s", dn ? dn : s->name);
|
||||||
pa_proplist_sets(source_data.proplist, PA_PROP_DEVICE_CLASS, "monitor");
|
pa_proplist_sets(source_data.proplist, PA_PROP_DEVICE_CLASS, "monitor");
|
||||||
|
|
||||||
s->monitor_source = pa_source_new(core, &source_data, 0);
|
s->monitor_source = pa_source_new(core, &source_data, PA_SOURCE_LATENCY);
|
||||||
|
|
||||||
pa_source_new_data_done(&source_data);
|
pa_source_new_data_done(&source_data);
|
||||||
|
|
||||||
|
|
@ -836,6 +836,9 @@ pa_usec_t pa_sink_get_latency(pa_sink *s) {
|
||||||
if (!PA_SINK_IS_OPENED(s->state))
|
if (!PA_SINK_IS_OPENED(s->state))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (!(s->flags & PA_SINK_LATENCY))
|
||||||
|
return 0;
|
||||||
|
|
||||||
pa_assert_se(pa_asyncmsgq_send(s->asyncmsgq, PA_MSGOBJECT(s), PA_SINK_MESSAGE_GET_LATENCY, &usec, 0, NULL) == 0);
|
pa_assert_se(pa_asyncmsgq_send(s->asyncmsgq, PA_MSGOBJECT(s), PA_SINK_MESSAGE_GET_LATENCY, &usec, 0, NULL) == 0);
|
||||||
|
|
||||||
return usec;
|
return usec;
|
||||||
|
|
@ -1162,7 +1165,8 @@ int pa_sink_process_msg(pa_msgobject *o, int code, void *userdata, int64_t offse
|
||||||
size_t sink_nbytes, total_nbytes;
|
size_t sink_nbytes, total_nbytes;
|
||||||
|
|
||||||
/* Get the latency of the sink */
|
/* Get the latency of the sink */
|
||||||
if (PA_MSGOBJECT(s)->process_msg(PA_MSGOBJECT(s), PA_SINK_MESSAGE_GET_LATENCY, &usec, 0, NULL) < 0)
|
if (!(s->flags & PA_SINK_LATENCY) ||
|
||||||
|
PA_MSGOBJECT(s)->process_msg(PA_MSGOBJECT(s), PA_SINK_MESSAGE_GET_LATENCY, &usec, 0, NULL) < 0)
|
||||||
usec = 0;
|
usec = 0;
|
||||||
|
|
||||||
sink_nbytes = pa_usec_to_bytes(usec, &s->sample_spec);
|
sink_nbytes = pa_usec_to_bytes(usec, &s->sample_spec);
|
||||||
|
|
@ -1221,7 +1225,8 @@ int pa_sink_process_msg(pa_msgobject *o, int code, void *userdata, int64_t offse
|
||||||
size_t nbytes;
|
size_t nbytes;
|
||||||
|
|
||||||
/* Get the latency of the sink */
|
/* Get the latency of the sink */
|
||||||
if (PA_MSGOBJECT(s)->process_msg(PA_MSGOBJECT(s), PA_SINK_MESSAGE_GET_LATENCY, &usec, 0, NULL) < 0)
|
if (!(s->flags & PA_SINK_LATENCY) ||
|
||||||
|
PA_MSGOBJECT(s)->process_msg(PA_MSGOBJECT(s), PA_SINK_MESSAGE_GET_LATENCY, &usec, 0, NULL) < 0)
|
||||||
usec = 0;
|
usec = 0;
|
||||||
|
|
||||||
nbytes = pa_usec_to_bytes(usec, &s->sample_spec);
|
nbytes = pa_usec_to_bytes(usec, &s->sample_spec);
|
||||||
|
|
|
||||||
|
|
@ -501,6 +501,9 @@ pa_usec_t pa_source_get_latency(pa_source *s) {
|
||||||
if (!PA_SOURCE_IS_OPENED(s->state))
|
if (!PA_SOURCE_IS_OPENED(s->state))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
if (!(s->flags & PA_SOURCE_LATENCY))
|
||||||
|
return 0;
|
||||||
|
|
||||||
pa_assert_se(pa_asyncmsgq_send(s->asyncmsgq, PA_MSGOBJECT(s), PA_SOURCE_MESSAGE_GET_LATENCY, &usec, 0, NULL) == 0);
|
pa_assert_se(pa_asyncmsgq_send(s->asyncmsgq, PA_MSGOBJECT(s), PA_SOURCE_MESSAGE_GET_LATENCY, &usec, 0, NULL) == 0);
|
||||||
|
|
||||||
return usec;
|
return usec;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue