From 991e3928d4c408d02cb9deefa9082b0caededa65 Mon Sep 17 00:00:00 2001 From: Dmitry Sharshakov Date: Sun, 11 Jun 2023 17:28:39 +0300 Subject: [PATCH] rtp-stream: do not set false ptime values --- src/modules/module-rtp-sap.c | 1 + src/modules/module-rtp/stream.c | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/modules/module-rtp-sap.c b/src/modules/module-rtp-sap.c index 9e432b500..b24b13bdc 100644 --- a/src/modules/module-rtp-sap.c +++ b/src/modules/module-rtp-sap.c @@ -899,6 +899,7 @@ static struct session *session_new(struct impl *impl, struct sdp_info *info) pw_properties_setf(props, "rtp.destination.ip", "%s", dst_addr); pw_properties_setf(props, "rtp.destination.port", "%u", info->dst_port); pw_properties_setf(props, "rtp.payload", "%u", info->payload); + pw_properties_setf(props, "rtp.ptime", "%f", info->ptime); pw_properties_setf(props, "rtp.media", "%s", info->media_type); pw_properties_setf(props, "rtp.mime", "%s", info->mime_type); pw_properties_setf(props, "rtp.rate", "%u", info->rate); diff --git a/src/modules/module-rtp/stream.c b/src/modules/module-rtp/stream.c index 8332f995e..9081c0418 100644 --- a/src/modules/module-rtp/stream.c +++ b/src/modules/module-rtp/stream.c @@ -389,9 +389,20 @@ struct rtp_stream *rtp_stream_new(struct pw_core *core, min_samples = min_ptime * impl->rate / 1000; max_samples = max_ptime * impl->rate / 1000; - impl->psamples = impl->mtu / impl->stride; - impl->psamples = SPA_CLAMP(impl->psamples, min_samples, max_samples); + float ptime = 0; + if ((str = pw_properties_get(props, "rtp.ptime")) != NULL) + if (!spa_atof(str, &ptime)) + ptime = 0.0; + if (ptime) { + impl->psamples = ptime * impl->rate / 1000; + } else { + impl->psamples = impl->mtu / impl->stride; + impl->psamples = SPA_CLAMP(impl->psamples, min_samples, max_samples); + if (direction == PW_DIRECTION_OUTPUT) + pw_properties_setf(props, "rtp.ptime", "%f", + impl->psamples * 1000.0 / impl->rate); + } latency_msec = pw_properties_get_uint32(props, "sess.latency.msec", DEFAULT_SESS_LATENCY); impl->target_buffer = msec_to_samples(impl, latency_msec); @@ -407,8 +418,6 @@ struct rtp_stream *rtp_stream_new(struct pw_core *core, } pw_properties_setf(props, "net.mtu", "%u", impl->mtu); - pw_properties_setf(props, "rtp.ptime", "%f", - impl->psamples * 1000.0 / impl->rate); pw_properties_setf(props, "rtp.media", "%s", impl->format_info->media_type); pw_properties_setf(props, "rtp.mime", "%s", impl->format_info->mime); pw_properties_setf(props, "rtp.payload", "%u", impl->payload);