Re: [PATCH] gstreamer-encoder: fix compiler warning with Fedora 30

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 7/1/19 6:19 PM, Frediano Ziglio wrote:

Fedora 30 / gcc 9.1.1 20190503 (Red Hat 9.1.1-1) fails to build
because of this error/warning:

gstreamer-encoder.c: In function 'set_video_bit_rate':
gstreamer-encoder.c:518:17: error: taking the absolute value of unsigned
type 'uint64_t' {aka 'long unsigned int'} has no effect
[-Werror=absolute-value]
  518 |     } else  if (abs(bit_rate - encoder->video_bit_rate) >
  encoder->video_bit_rate * SPICE_GST_VIDEO_BITRATE_MARGIN) {
      |                 ^~~
gstreamer-encoder.c:518:17: error: absolute value function 'abs' given an
argument of type 'uint64_t' {aka 'long unsigned int'}

This patches solves these two warnings:

1) cast the substraction to a signed type (int64_t instead of
uint64_t) to preserve the operation meaning;

2) use the long int labs() instead of the int version abs() to avoid
data trunction.

Not working for all platform we support, maybe a

static inline int64_t i64abs(int64_t value)
{
     if (sizeof(int) == sizeof(value)) {
         return (int64_t) abs((int) value);
     }
     if (sizeof(long int) == sizeof(value)) {
         return (int64_t) labs((long int) value);
     }
     return (int64_t) llabs((long long int) value);
}

Or a simpler
    return (value >= 0) ? value : -value;

Uri.


---

resending this patch with the comments addressed

---
  server/gstreamer-encoder.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/gstreamer-encoder.c b/server/gstreamer-encoder.c
index 6416b688..da73c5ee 100644
--- a/server/gstreamer-encoder.c
+++ b/server/gstreamer-encoder.c
@@ -515,7 +515,7 @@ static void set_video_bit_rate(SpiceGstEncoder *encoder,
uint64_t bit_rate)
          encoder->video_bit_rate = bit_rate;
          set_gstenc_bitrate(encoder);

-    } else  if (abs(bit_rate - encoder->video_bit_rate) >
encoder->video_bit_rate * SPICE_GST_VIDEO_BITRATE_MARGIN) {
+    } else  if (labs((int64_t)(bit_rate - encoder->video_bit_rate)) >
encoder->video_bit_rate * SPICE_GST_VIDEO_BITRATE_MARGIN) {
          encoder->video_bit_rate = bit_rate;
          set_pipeline_changes(encoder, SPICE_GST_VIDEO_PIPELINE_BITRATE);
      }

Frediano
_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel


_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux Virtualization]     [Linux Virtualization]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]