Bug 163164 - Allow more conservative memory management
Summary: Allow more conservative memory management
Status: RESOLVED FIXED
Alias: None
Product: digikam
Classification: Applications
Component: Plugin-Editor-Curves (show other bugs)
Version: 0.9.4
Platform: unspecified Linux
: NOR wishlist
Target Milestone: ---
Assignee: Digikam Developers
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-06-03 21:54 UTC by Dik Takken
Modified: 2017-08-08 15:08 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In: 3.0.0
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Dik Takken 2008-06-03 21:54:27 UTC
Version:           0.9.4-beta4 (using KDE 3.5.8)
OS:                Linux

Working with very large photographs (like 50 megapixel 16-bit 6x6 cm slide scans) can be a problem in Digikam. A 300 MB TIFF easily consumes 800 MB of resident memory and a total of 1200 MB of virtual memory.

Maybe adding features like a configurable number of undo steps can improve the situation. CinePaint has this feature, and this application is a lot easier on the memory than DigiKam is.
Comment 1 caulier.gilles 2008-08-24 14:06:36 UTC
SVN commit 851712 by cgilles:

digiKam from KDE3 branch : AdjustCurves tool : memory consume optimization.
No need to duplicates original image data here: we can use the instance from editor instead.

Andi, this way can be applied in others image plugins if necessary. i'm sure that we will find old code to polish by thi way.

CCBUGS: 163164


 M  +7 -13     adjustcurves.cpp
 M  +1 -1      adjustcurves.h


--- branches/extragear/kde3/graphics/digikam/imageplugins/adjustcurves/adjustcurves.cpp #851711:851712
@@ -87,18 +87,12 @@
 AdjustCurveTool::AdjustCurveTool(QObject* parent)
               : EditorTool(parent)
 {
-    m_destinationPreviewData = 0L;
+    m_destinationPreviewData = 0;

    ImageIface iface(0, 0);
-    uchar *data     = iface.getOriginalImage();
-    int w           = iface.originalWidth();
-    int h           = iface.originalHeight();
-    bool sixteenBit = iface.originalSixteenBit();
-    bool hasAlpha   = iface.originalHasAlpha();
-    m_originalImage = DImg(w, h, sixteenBit, hasAlpha ,data);
-    delete [] data;
+    m_originalImage = iface.getOriginalImg();

-    m_histoSegments = m_originalImage.sixteenBit() ? 65535 : 255;
+    m_histoSegments = m_originalImage->sixteenBit() ? 65535 : 255;

    setName("adjustcurves");
    setToolName(i18n("Adjust Curves"));
@@ -191,8 +185,8 @@
    QLabel *spacev = new QLabel(curveBox);
    spacev->setFixedWidth(1);

-    m_curvesWidget = new CurvesWidget(256, 256, m_originalImage.bits(), m_originalImage.width(),
-                                                m_originalImage.height(), m_originalImage.sixteenBit(),
+    m_curvesWidget = new CurvesWidget(256, 256, m_originalImage->bits(), m_originalImage->width(),
+                                                m_originalImage->height(), m_originalImage->sixteenBit(),
                                                curveBox);
    QWhatsThis::add( m_curvesWidget, i18n("<p>This is the curve drawing of the selected channel from "
                                          "original image"));
@@ -576,7 +570,7 @@
            QPoint disable(-1, -1);
            QPoint p = config->readPointEntry(QString("CurveAjustmentChannel%1Point%2").arg(i).arg(j), &disable);

-            if (m_originalImage.sixteenBit() && p.x() != -1)
+            if (m_originalImage->sixteenBit() && p.x() != -1)
            {
                p.setX(p.x()*255);
                p.setY(p.y()*255);
@@ -607,7 +601,7 @@
        {
            QPoint p = m_curvesWidget->curves()->getCurvePoint(i, j);

-            if (m_originalImage.sixteenBit() && p.x() != -1)
+            if (m_originalImage->sixteenBit() && p.x() != -1)
            {
                p.setX(p.x()/255);
                p.setY(p.y()/255);
--- branches/extragear/kde3/graphics/digikam/imageplugins/adjustcurves/adjustcurves.h #851711:851712
@@ -132,7 +132,7 @@

    Digikam::ImageWidget         *m_previewWidget;

-    Digikam::DImg                 m_originalImage;
+    Digikam::DImg                *m_originalImage;
 };

 }  // NameSpace DigikamAdjustCurvesImagesPlugin
Comment 2 caulier.gilles 2008-08-24 15:30:22 UTC
Andi,

Please look this patch and my comment. We need to apply the same way on all image plugins when we will port code to Editor Tool api

Gilles
Comment 3 Andi Clemens 2008-08-24 15:49:23 UTC
Ok... we can do it when actually converting the imageplugins. Right now I'm in the "converting the widgets" flow :-)

Andi
Comment 4 caulier.gilles 2011-11-24 09:17:00 UTC
Dik,

This entry still valid with 2.x serie ?

Gilles Caulier
Comment 5 Dik Takken 2011-11-26 17:58:05 UTC
Gentoo is still on 1.9. I'll test again when 2.x is stable. On 1.9, the problem is still the same.
Comment 6 caulier.gilles 2011-12-18 17:34:00 UTC
Dik,

This file still valid using digiKam 2.4 ?

Gilles Caulier
Comment 7 caulier.gilles 2012-09-11 19:54:00 UTC
Dik,

No news from this entry please ?

Gilles Caulier
Comment 8 Dik Takken 2012-09-12 16:06:53 UTC
Sorry it took so long, but 2.x is much better in this respect. Resolving as fixed.