libav: avcfg: Avoid brittle comparision
authorEdward Hervey <edward@centricular.com>
Fri, 4 Nov 2022 07:00:03 +0000 (08:00 +0100)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Fri, 4 Nov 2022 17:59:21 +0000 (17:59 +0000)
Subtracting a gint from another (or a guint from another) has no guarantees that
it will result in a gint.

Therefore do the actual comparision instead.

Also use the *actual* type for comparing flags (the field value types are different)

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3319>

subprojects/gst-libav/ext/libav/gstavcfg.c

index afa9185..fc8c19c 100644 (file)
@@ -79,7 +79,9 @@ gst_ffmpeg_cfg_init (void)
 static gint
 cmp_enum_value (GEnumValue * val1, GEnumValue * val2)
 {
-  return val1->value - val2->value;
+  if (val1->value == val2->value)
+    return 0;
+  return (val1->value > val2->value) ? 1 : -1;
 }
 
 static GType
@@ -176,9 +178,11 @@ done:
 }
 
 static gint
-cmp_flags_value (GEnumValue * val1, GEnumValue * val2)
+cmp_flags_value (GFlagsValue * val1, GFlagsValue * val2)
 {
-  return val1->value - val2->value;
+  if (val1->value == val2->value)
+    return 0;
+  return (val1->value > val2->value) ? 1 : -1;
 }
 
 static GType