[Spice-devel] server: Simplify the MJPEG encoder's maximum framerate estimation

Frediano Ziglio fziglio at redhat.com
Thu Dec 3 08:04:59 PST 2015


> 
> Also round it to the nearest integer instead of rounding down.
> 
> Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
> ---
>  server/mjpeg_encoder.c | 10 +---------
>  1 file changed, 1 insertion(+), 9 deletions(-)
> 
> diff --git a/server/mjpeg_encoder.c b/server/mjpeg_encoder.c
> index 9b331c1..752dae8 100644
> --- a/server/mjpeg_encoder.c
> +++ b/server/mjpeg_encoder.c
> @@ -341,15 +341,7 @@ static inline uint32_t
> mjpeg_encoder_get_latency(MJpegEncoder *encoder)
>  
>  static uint32_t get_max_fps(uint64_t frame_size, uint64_t bytes_per_sec)
>  {
> -    double fps;
> -    double send_time_ms;
> -
> -    if (!bytes_per_sec) {
> -        return 0;
> -    }
> -    send_time_ms = frame_size * 1000.0 / bytes_per_sec;
> -    fps = send_time_ms ? 1000 / send_time_ms : MJPEG_MAX_FPS;
> -    return fps;
> +    return frame_size ? (bytes_per_sec + frame_size / 2) / frame_size :
> MJPEG_MAX_FPS;
>  }
>  
>  static inline void mjpeg_encoder_reset_quality(MJpegEncoder *encoder,

I think the exact simplification is

if (!bytes_per_sec) {
  return 0;
}
return frame_size ? bytes_per_sec / frame_size : MJPEG_MAX_FPS;

You already noted that you used rounding instead or truncation;
depending on the usage can be correct or not.
This change that if bytes_per_sec == 0 and frame_size == 0 previous
code returned 0 while now returns MJPEG_MAX_FPS. I think this
is not possible!

Frediano


More information about the Spice-devel mailing list