From 832c8b6c25e99fa87fd2c6ddadbcf3cf4add4c52 Mon Sep 17 00:00:00 2001 From: Ingo Date: Wed, 9 Apr 2014 23:59:26 +0200 Subject: [PATCH] Buffer underrun in RGB denoise, Issue 2337. Could also fix 'Crash when creating detail window, Issue 2324' (Thanks to Hombre) --- rtengine/cplx_wavelet_level.h | 4 ++-- rtgui/cropwindow.cc | 5 ++++- rtgui/cropwindow.h | 1 + rtgui/imagearea.cc | 4 ++++ 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/rtengine/cplx_wavelet_level.h b/rtengine/cplx_wavelet_level.h index a89b91af6..e8fa3bc96 100644 --- a/rtengine/cplx_wavelet_level.h +++ b/rtengine/cplx_wavelet_level.h @@ -298,8 +298,8 @@ namespace rtengine { dstLo[(pitch*(i))] = 0.5*(srcbuffer[i] + srcbuffer[i+skip]); dstHi[(pitch*(i))] = 0.5*(srcbuffer[i] - srcbuffer[i+skip]); } - - for(size_t i = (srclen-skip); i < (srclen); i++) { + // Start the loop at max(srclen-skip,skip) to avoid buffer underrun + for(size_t i = max(srclen-skip,skip); i < (srclen); i++) { dstLo[(pitch*(i))] = 0.5*(srcbuffer[i] + srcbuffer[i-skip]); dstHi[(pitch*(i))] = 0.5*(srcbuffer[i] - srcbuffer[i-skip]); } diff --git a/rtgui/cropwindow.cc b/rtgui/cropwindow.cc index ebc72d35d..991827bf9 100755 --- a/rtgui/cropwindow.cc +++ b/rtgui/cropwindow.cc @@ -108,11 +108,14 @@ CropWindow::CropWindow (ImageArea* parent, rtengine::StagedImageProcessor* ipc_, cropHandler.setCropHandlerListener (this); cropHandler.newImage (ipc_); - cropHandler.setEnabled (true); state = SNormal; } +void CropWindow::enable() { + cropHandler.setEnabled (true); +} + void CropWindow::setPosition (int x, int y) { if (y<0) diff --git a/rtgui/cropwindow.h b/rtgui/cropwindow.h index 4676d2145..80460f188 100755 --- a/rtgui/cropwindow.h +++ b/rtgui/cropwindow.h @@ -120,6 +120,7 @@ class CropWindow : public LWButtonListener, public CropHandlerListener, public E void getPosition (int& x, int& y); void setSize (int w, int h, bool norefresh=false); void getSize (int& w, int& h); + void enable (); void leaveNotify (GdkEventCrossing* event); void flawnOver (bool isFlawnOver); diff --git a/rtgui/imagearea.cc b/rtgui/imagearea.cc index c310f4799..dba3d68f5 100644 --- a/rtgui/imagearea.cc +++ b/rtgui/imagearea.cc @@ -93,6 +93,7 @@ void ImageArea::on_resized (Gtk::Allocation& req) { mainCropWindow->setPointerMotionHListener (pmhlistener); mainCropWindow->setPosition (0, 0); mainCropWindow->setSize (get_width(), get_height(), false); // this execute the refresh itself + mainCropWindow->enable(); // start processing ! } else { mainCropWindow->setSize (get_width(), get_height()); @@ -386,6 +387,9 @@ void ImageArea::addCropWindow () { cw->setPosition (lastClosedX, lastClosedY); lastClosedX = -1; } + + cw->enable(); // start processing! + int x0,y0,w,h,wc,hc; mainCropWindow->getCropRectangle(x0,y0,w,h ); cw->getCropSize(wc,hc);