File indexing completed on 2025-04-27 03:58:09

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2007-07-20
0007  * Description : Loader for thumbnails
0008  *
0009  * SPDX-FileCopyrightText: 2003-2005 by Renchi Raju <renchi dot raju at gmail dot com>
0010  * SPDX-FileCopyrightText: 2003-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
0011  * SPDX-FileCopyrightText: 2006-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
0012  *
0013  * SPDX-License-Identifier: GPL-2.0-or-later
0014  *
0015  * ============================================================ */
0016 
0017 #ifndef DIGIKAM_THUMB_NAIL_CREATOR_PRIVATE_H
0018 #define DIGIKAM_THUMB_NAIL_CREATOR_PRIVATE_H
0019 
0020 #include "thumbnailcreator.h"
0021 
0022 // Qt includes
0023 
0024 #include <QUrl>
0025 #include <QFile>
0026 #include <QBuffer>
0027 #include <QPainter>
0028 #include <QIODevice>
0029 #include <QFileInfo>
0030 #include <QUrlQuery>
0031 #include <QApplication>
0032 #include <QMimeDatabase>
0033 #include <QTemporaryFile>
0034 #include <QScopedPointer>
0035 #include <QStandardPaths>
0036 
0037 // KDE includes
0038 
0039 #include <klocalizedstring.h>
0040 
0041 // Local includes
0042 
0043 #include "digikam_config.h"
0044 #include "metaengine_previews.h"
0045 #include "metaengine_rotation.h"
0046 #include "filereadwritelock.h"
0047 #include "drawdecoder.h"
0048 #include "drawfiles.h"
0049 #include "digikam_debug.h"
0050 #include "dimg.h"
0051 #include "dimgloader.h"
0052 #include "dimgloaderobserver.h"
0053 #include "dmetadata.h"
0054 #include "iccmanager.h"
0055 #include "iccprofile.h"
0056 #include "iccsettings.h"
0057 #include "loadsavethread.h"
0058 #include "jpegutils.h"
0059 #include "pgfutils.h"
0060 #include "tagregion.h"
0061 #include "thumbsdbaccess.h"
0062 #include "thumbsdb.h"
0063 #include "thumbsdbbackend.h"
0064 #include "thumbnailsize.h"
0065 
0066 #ifdef HAVE_MEDIAPLAYER
0067 #   include "videothumbnailer.h"
0068 #   include "videostripfilter.h"
0069 #endif
0070 
0071 namespace Digikam
0072 {
0073 
0074 class ThumbnailImage
0075 {
0076 public:
0077 
0078     explicit ThumbnailImage()
0079       : exifOrientation(DMetadata::ORIENTATION_UNSPECIFIED)
0080     {
0081     }
0082 
0083     bool isNull() const
0084     {
0085         return qimage.isNull();
0086     }
0087 
0088 public:
0089 
0090     QImage qimage;
0091     int    exifOrientation;
0092 };
0093 
0094 // -------------------------------------------------------------------
0095 
0096 class Q_DECL_HIDDEN ThumbnailCreator::Private
0097 {
0098 public:
0099 
0100     explicit Private()
0101       : exifRotate          (true),
0102         removeAlphaChannel  (true),
0103         onlyLargeThumbnails (false),
0104         thumbnailStorage    (ThumbnailCreator::FreeDesktopStandard),
0105         infoProvider        (nullptr),
0106         dbIdForReplacement  (-1),
0107         thumbnailSize       (0),
0108         digiKamFingerPrint  (QLatin1String("Digikam Thumbnail Generator")), // Used internally as PNG metadata. Do not use i18n.
0109         observer            (nullptr)
0110     {
0111         fastRawSettings.optimizeTimeLoading();
0112         fastRawSettings.rawPrm.halfSizeColorImage = true;
0113         fastRawSettings.rawPrm.sixteenBitsImage   = false;
0114     }
0115 
0116     bool                            exifRotate;
0117     bool                            removeAlphaChannel;
0118     bool                            onlyLargeThumbnails;
0119 
0120     ThumbnailCreator::StorageMethod thumbnailStorage;
0121     ThumbnailInfoProvider*          infoProvider;
0122     int                             dbIdForReplacement;
0123 
0124     int                             thumbnailSize;
0125 
0126     QString                         error;
0127     QString                         bigThumbPath;
0128     QString                         smallThumbPath;
0129 
0130     QString                         digiKamFingerPrint;
0131 
0132     QImage                          alphaImage;
0133 
0134     DImgLoaderObserver*             observer;
0135     DRawDecoding                    rawSettings;
0136     DRawDecoding                    fastRawSettings;
0137 
0138 public:
0139 
0140     int                             storageSize() const;
0141 };
0142 
0143 } // namespace Digikam
0144 
0145 #endif // DIGIKAM_THUMB_NAIL_CREATOR_PRIVATE_H