util: Add GST_ROUND_UP_N and GST_ROUND_DOWN_N
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Tue, 14 Jan 2014 21:15:02 +0000 (16:15 -0500)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Tue, 14 Jan 2014 21:22:31 +0000 (16:22 -0500)
These are generic rounding macro that works for any power of two.

gst/gstutils.h

index 0dbaa00751928ee219d4696fc996b6b9c22202c5..945add495b41178dad12ae0fcea9dcf1213d93b3 100644 (file)
@@ -822,6 +822,15 @@ GST_WRITE_DOUBLE_BE(guint8 *data, gdouble num)
  * Since: 1.4
  */
 #define GST_ROUND_UP_128(num) (((num)+127)&~127)
+/**
+ * GST_ROUND_UP_N:
+ * @num: integrer value to round up
+ * @align: a power of two to round up to
+ *
+ * Rounds an integer value up to the next multiple of @align. @align MUST be a
+ * power of two.
+ */
+#define GST_ROUND_UP_N(num,align) ((((num) + ((align) - 1)) & ~((align) - 1)))
 
 
 /**
@@ -874,6 +883,16 @@ GST_WRITE_DOUBLE_BE(guint8 *data, gdouble num)
  * Since: 1.4
  */
 #define GST_ROUND_DOWN_128(num) ((num)&(~127))
+/**
+ * GST_ROUND_DOWN_N:
+ * @num: integrer value to round down
+ * @align: a power of two to round down to
+ *
+ * Rounds an integer value down to the next multiple of @align. @align MUST be a
+ * power of two.
+ */
+#define GST_ROUND_DOWN_N(num,align) (((num) & ~((align) - 1)))
+
 
 void                    gst_object_default_error        (GstObject    * source,
                                                          const GError * error,