[Spice-commits] 2 commits - server/gstreamer-encoder.c

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue May 21 07:49:08 UTC 2019


 server/gstreamer-encoder.c |    9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

New commits:
commit ba4bcd51749eee6fcff028118855126a739fa0f2
Author: Francois Gouget <fgouget at codeweavers.com>
Date:   Tue May 21 02:30:19 2019 +0200

    gstreamer-encoder: Return the average frame size as a 32 bit int
    
    It makes no sense to expect average frame sizes anywhere close to 2GB.
    But then make sure to avoid arithmetic overflows.
    
    Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
    Acked-by: Frediano Ziglio <fziglio at redhat.com>

diff --git a/server/gstreamer-encoder.c b/server/gstreamer-encoder.c
index 2e5345ce..6217988c 100644
--- a/server/gstreamer-encoder.c
+++ b/server/gstreamer-encoder.c
@@ -396,7 +396,7 @@ static uint64_t get_average_encoding_time(SpiceGstEncoder *encoder)
     return encoder->stat_duration_sum / count;
 }
 
-static uint64_t get_average_frame_size(SpiceGstEncoder *encoder)
+static uint32_t get_average_frame_size(SpiceGstEncoder *encoder)
 {
     uint32_t count = encoder->history_last +
         (encoder->history_last < encoder->stat_first ? SPICE_GST_HISTORY_SIZE : 0) -
@@ -520,8 +520,8 @@ static uint32_t get_min_playback_delay(SpiceGstEncoder *encoder)
      * an I frame) and an average frame. This also takes into account the
      * frames dropped by the encoder bit rate control.
      */
-    uint64_t size = get_maximum_frame_size(encoder) + get_average_frame_size(encoder);
-    uint32_t send_time = MSEC_PER_SEC * size * 8 / encoder->bit_rate;
+    uint32_t size = get_maximum_frame_size(encoder) + get_average_frame_size(encoder);
+    uint32_t send_time = ((uint64_t)MSEC_PER_SEC * 8) * size / encoder->bit_rate;
 
     /* Also factor in the network latency with a margin for jitter. */
     uint32_t net_latency = get_network_latency(encoder) * (1.0 + SPICE_GST_LATENCY_MARGIN);
commit cfe98800a0429b8ab5d4221cce1975bbe67e0b4d
Author: Francois Gouget <fgouget at codeweavers.com>
Date:   Tue May 21 02:27:23 2019 +0200

    gstreamer-encoder: Show the source fps when the system is too slow
    
    The source framerate is as important as the resolution when trying to
    understand if the system should be fast enough to encode the video
    stream in real time.
    
    Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
    Acked-by: Frediano Ziglio <fziglio at redhat.com>

diff --git a/server/gstreamer-encoder.c b/server/gstreamer-encoder.c
index 0ff1201a..2e5345ce 100644
--- a/server/gstreamer-encoder.c
+++ b/server/gstreamer-encoder.c
@@ -542,7 +542,8 @@ static void update_next_frame_mm_time(SpiceGstEncoder *encoder)
     uint64_t period_ns = NSEC_PER_SEC / get_source_fps(encoder);
     uint64_t min_delay_ns = get_average_encoding_time(encoder);
     if (min_delay_ns > period_ns) {
-        spice_warning("your system seems to be too slow to encode this %dx%d video in real time", encoder->width, encoder->height);
+        spice_warning("your system seems to be too slow to encode this %dx%d@%d video in real time",
+                      encoder->width, encoder->height, get_source_fps(encoder));
     }
 
     min_delay_ns = MIN(min_delay_ns, SPICE_GST_MAX_PERIOD);


More information about the Spice-commits mailing list