diff options
author | Jan Schmidt <thaytan@noraisin.net> | 2010-12-12 02:24:00 +1100 |
---|---|---|
committer | Jan Schmidt <jan.schmidt@oracle.com> | 2010-12-12 02:24:00 +1100 |
commit | a4f2ab78ffe9a5f0bd8a29e778ca9ea7688de792 (patch) | |
tree | 44e19c2051c0499d0071339fc06d16b76c4e3382 /gst/gaudieffects/gstburn.c | |
parent | 7e3472d772573cb4d645845d2242f24f61b51b72 (diff) | |
download | gstreamer-plugins-bad-a4f2ab78ffe9a5f0bd8a29e778ca9ea7688de792.tar.gz |
gaudieffects: Avoid divide by 0 in burn element
Diffstat (limited to 'gst/gaudieffects/gstburn.c')
-rw-r--r-- | gst/gaudieffects/gstburn.c | 31 |
1 files changed, 11 insertions, 20 deletions
diff --git a/gst/gaudieffects/gstburn.c b/gst/gaudieffects/gstburn.c index 582d5e85b..3d769356a 100644 --- a/gst/gaudieffects/gstburn.c +++ b/gst/gaudieffects/gstburn.c @@ -96,7 +96,6 @@ enum #define DEFAULT_ADJUSTMENT 175 -static gint gate_int (gint value, gint min, gint max); static void transform (guint32 * src, guint32 * dest, gint video_area, gint adjustment); @@ -289,24 +288,13 @@ gst_burn_plugin_init (GstPlugin * burn) } /*** Now the image processing work.... ***/ -/* Keep the values inbounds. */ -static gint -gate_int (gint value, gint min, gint max) -{ - if (value < min) { - return min; - } else if (value > max) { - return max; - } else { - return value; - } -} /* Transform processes each frame. */ static void transform (guint32 * src, guint32 * dest, gint video_area, gint adjustment) { - guint32 in, red, green, blue; + guint32 in; + gint red, green, blue, c; gint x; for (x = 0; x < video_area; x++) { @@ -316,13 +304,16 @@ transform (guint32 * src, guint32 * dest, gint video_area, gint adjustment) green = (in >> 8) & 0xff; blue = (in) & 0xff; - red = 256 - ((256 * (255 - red)) / (red + adjustment)); - green = 256 - ((256 * (255 - green)) / (green + adjustment)); - blue = 256 - ((256 * (255 - blue)) / (blue + adjustment)); + c = (red + adjustment); + red = c ? (256 - (256 * (255 - red) / c)) : 0; + c = (green + adjustment); + green = c ? (256 - (256 * (255 - green) / c)) : 0; + c = (blue + adjustment); + blue = c ? (256 - (256 * (255 - blue) / c)) : 0; - red = gate_int (red, 0, 255); - green = gate_int (green, 0, 255); - blue = gate_int (blue, 0, 255); + red = CLAMP (red, 0, 255); + green = CLAMP (green, 0, 255); + blue = CLAMP (blue, 0, 255); *dest++ = (red << 16) | (green << 8) | blue; } |