From a801d6dd6309fac5a8e1161de08a65b2587228d9 Mon Sep 17 00:00:00 2001 From: Sangchul Lee Date: Mon, 28 Mar 2022 21:25:50 +0900 Subject: [PATCH] webrtcstats: Unify 'packets-lost' data type to int64 Previously, 'packets-lost' member of RTCReceivedRtpStreamStats had a value of G_TYPE_INT from rtpsource or a value of G_TYPE_UINT64 from rtpjitterbuffer. Because of the negative value of estimated amount of packets lost in rtpsource as well as the description in https://www.w3.org/TR/webrtc-stats/#dom-rtcreceivedrtpstreamstats it is fixed to set this value with G_TYPE_INT64. Part-of: --- .../gst-plugins-bad/ext/webrtc/gstwebrtcbin.c | 2 +- .../gst-plugins-bad/ext/webrtc/gstwebrtcstats.c | 9 ++++++--- .../gst-plugins-bad/tests/check/elements/webrtcbin.c | 12 ++++++------ 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcbin.c b/subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcbin.c index 0584e08a14..c847c09e35 100644 --- a/subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcbin.c +++ b/subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcbin.c @@ -8316,7 +8316,7 @@ gst_webrtc_bin_class_init (GstWebRTCBinClass * klass) * RTCReceivedStreamStats supported fields (https://w3c.github.io/webrtc-stats/#receivedrtpstats-dict*) * * "packets-received" G_TYPE_UINT64 number of packets received (only for local inbound) - * "packets-lost" G_TYPE_UINT64 number of packets lost + * "packets-lost" G_TYPE_INT64 number of packets lost * "packets-discarded" G_TYPE_UINT64 number of packets discarded * "packets-repaired" G_TYPE_UINT64 number of packets repaired * "jitter" G_TYPE_DOUBLE packet jitter measured in seconds diff --git a/subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcstats.c b/subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcstats.c index 4931a42f17..10074b9547 100644 --- a/subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcstats.c +++ b/subprojects/gst-plugins-bad/ext/webrtc/gstwebrtcstats.c @@ -142,7 +142,7 @@ _get_stats_from_remote_rtp_source_stats (GstWebRTCBin * webrtc, /* RTCReceivedRtpStreamStats */ if (gst_structure_get_int (source_stats, "rb-packetslost", &lost)) - gst_structure_set (r_in, "packets-lost", G_TYPE_INT, lost, NULL); + gst_structure_set (r_in, "packets-lost", G_TYPE_INT64, (gint64) lost, NULL); if (clock_rate && gst_structure_get_uint (source_stats, "rb-jitter", &jitter)) gst_structure_set (r_in, "jitter", G_TYPE_DOUBLE, @@ -359,8 +359,11 @@ _get_stats_from_rtp_source_stats (GstWebRTCBin * webrtc, if (gst_structure_get_uint64 (source_stats, "packets-received", &packets)) gst_structure_set (in, "packets-received", G_TYPE_UINT64, packets, NULL); - if (jb_stats) - gst_structure_set (in, "packets-lost", G_TYPE_UINT64, jb_lost, NULL); + if (jb_stats) { + gint64 packets_lost = jb_lost > G_MAXINT64 ? + G_MAXINT64 : (gint64) jb_lost; + gst_structure_set (in, "packets-lost", G_TYPE_INT64, packets_lost, NULL); + } if (gst_structure_get_uint (source_stats, "jitter", &jitter)) gst_structure_set (in, "jitter", G_TYPE_DOUBLE, CLOCK_RATE_VALUE_TO_SECONDS (jitter, clock_rate), NULL); diff --git a/subprojects/gst-plugins-bad/tests/check/elements/webrtcbin.c b/subprojects/gst-plugins-bad/tests/check/elements/webrtcbin.c index 40cd6bdc95..b1ce5b1537 100644 --- a/subprojects/gst-plugins-bad/tests/check/elements/webrtcbin.c +++ b/subprojects/gst-plugins-bad/tests/check/elements/webrtcbin.c @@ -1453,7 +1453,7 @@ static void validate_inbound_rtp_stats (const GstStructure * s, const GstStructure * stats) { guint ssrc, fir, pli, nack; - gint packets_lost; + gint64 packets_lost; guint64 packets_received, bytes_received; double jitter; gchar *remote_id; @@ -1470,8 +1470,8 @@ validate_inbound_rtp_stats (const GstStructure * s, const GstStructure * stats) fail_unless (gst_structure_get (s, "bytes-received", G_TYPE_UINT64, &bytes_received, NULL)); fail_unless (gst_structure_get (s, "jitter", G_TYPE_DOUBLE, &jitter, NULL)); - fail_unless (gst_structure_get (s, "packets-lost", G_TYPE_INT, &packets_lost, - NULL)); + fail_unless (gst_structure_get (s, "packets-lost", G_TYPE_INT64, + &packets_lost, NULL)); fail_unless (gst_structure_get (s, "remote-id", G_TYPE_STRING, &remote_id, NULL)); fail_unless (gst_structure_get (stats, remote_id, GST_TYPE_STRUCTURE, &remote, @@ -1487,7 +1487,7 @@ validate_remote_inbound_rtp_stats (const GstStructure * s, const GstStructure * stats) { guint ssrc; - gint packets_lost; + gint64 packets_lost; double jitter, rtt; gchar *local_id; GstStructure *local; @@ -1496,8 +1496,8 @@ validate_remote_inbound_rtp_stats (const GstStructure * s, fail_unless (gst_structure_get (s, "ssrc", G_TYPE_UINT, &ssrc, NULL)); fail_unless (gst_structure_get (s, "jitter", G_TYPE_DOUBLE, &jitter, NULL)); - fail_unless (gst_structure_get (s, "packets-lost", G_TYPE_INT, &packets_lost, - NULL)); + fail_unless (gst_structure_get (s, "packets-lost", G_TYPE_INT64, + &packets_lost, NULL)); fail_unless (gst_structure_get (s, "round-trip-time", G_TYPE_DOUBLE, &rtt, NULL)); fail_unless (gst_structure_get (s, "local-id", G_TYPE_STRING, &local_id, -- 2.34.1