digiKam
Loading...
Searching...
No Matches
dngwriter_p.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2008-09-25
7 * Description : a tool to convert RAW file to DNG
8 *
9 * SPDX-FileCopyrightText: 2008-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
10 *
11 * SPDX-License-Identifier: GPL-2.0-or-later
12 *
13 * ============================================================ */
14
15#pragma once
16
17#include "dngwriter.h"
18
19// Qt includes
20
21#include <QImage>
22#include <QString>
23#include <QByteArray>
24#include <QFile>
25#include <QFileInfo>
26#include <QIODevice>
27#include <QTemporaryFile>
28#include <QDateTime>
29#include <QPointer>
30#include <QScopedPointer>
31
32// Local includes
33
34#include "drawdecoder.h"
35
36// DNG SDK includes
37
38#include "dng_camera_profile.h"
39#include "dng_color_space.h"
40#include "dng_exceptions.h"
41#include "dng_file_stream.h"
42#include "dng_globals.h"
43#include "dng_host.h"
44#include "dng_ifd.h"
45#include "dng_image_writer.h"
46#include "dng_info.h"
47#include "dng_linearization_info.h"
48#include "dng_memory_stream.h"
49#include "dng_mosaic_info.h"
50#include "dng_negative.h"
51#include "dng_preview.h"
52#include "dng_read_image.h"
53#include "dng_render.h"
54#include "dng_simple_image.h"
55#include "dng_tag_codes.h"
56#include "dng_tag_types.h"
57#include "dng_tag_values.h"
58#include "dng_xmp.h"
59#include "dng_xmp_sdk.h"
60
61// XMP SDK includes
62
63#include "XMP_Version.h"
64
65// Local includes
66
67#include "digikam_debug.h"
68#include "digikam_version.h"
69#include "dfileoperations.h"
70#include "dmetadata.h"
71#include "exiftoolparser.h"
72#include "exiftoolprocess.h"
73
74#define CHUNK 65536
75
76namespace Digikam
77{
78
79class DNGWriterHost;
80
81class Q_DECL_HIDDEN DNGWriter::Private
82{
83
84public:
85
95
96public:
97
98 explicit Private(DNGWriter* const dd);
99 ~Private() = default;
100
101public:
102
103 void reset();
104 void cleanup();
105 dng_date_time dngDateTime(const QDateTime& qDT) const;
106
107 bool fujiRotate(QByteArray& rawData, DRawInfo& identify) const;
108
109 QString dngErrorCodeToString(int errorCode) const;
110
111 QString dngBayerPatternToString(int pattern) const;
112
116 int debugExtractedRAWData(const QByteArray& rawData);
117
118public:
119
120 // DNG processing stages.
121
122 int importRaw(DRawInfo* const identify,
123 DRawInfo* const identifyMake);
124
125 int identMosaic(DRawInfo* const identify,
126 DRawInfo* const identifyMake);
127
128 int createNegative(AutoPtr<dng_negative>& negative,
129 DRawInfo* const identify);
130
131 int storeExif(DNGWriterHost& host,
132 AutoPtr<dng_negative>& negative,
133 DRawInfo* const identify,
134 DRawInfo* const identifyMake,
135 DMetadata* const meta);
136
137 int storeMakernote(DNGWriterHost& host,
138 AutoPtr<dng_negative>& negative,
139 DRawInfo* const identify,
140 DRawInfo* const identifyMake,
141 DMetadata* const meta);
142
143 int storeXmp(DNGWriterHost& host,
144 AutoPtr<dng_negative>& negative,
145 DRawInfo* const identify,
146 DRawInfo* const identifyMake,
147 DMetadata* const meta);
148
149 int backupRaw(DNGWriterHost& host,
150 AutoPtr<dng_negative>& negative);
151
152 int exportTarget(DNGWriterHost& host,
153 AutoPtr<dng_negative>& negative,
154 AutoPtr<dng_image>& image);
155
156 int exifToolPostProcess();
157
158private:
159
160 void backportNikonMakerNote(DMetadata* const meta);
161 void backportCanonMakerNote(DMetadata* const meta);
162 void backportPentaxMakerNote(DMetadata* const meta);
163 void backportOlympusMakerNote(DMetadata* const meta);
164 void backportPanasonicMakerNote(DMetadata* const meta);
165 void backportSonyMakerNote(DMetadata* const meta);
166 void storeLensInformation();
167 void backupMakernote(DNGWriterHost& host,
168 AutoPtr<dng_negative>& negative,
169 DRawInfo* const identify,
170 DRawInfo* const identifyMake,
171 DMetadata* const meta);
172
173public:
174
175 DNGWriter* parent = nullptr;
176 DNGBayerPattern bayerPattern = Unknown;
177 uint32 filter = 0;
178
179 bool metaLoaded = false;
180 bool cancel = false;
181 bool jpegLossLessCompression = true;
182 bool updateFileDate = false;
183 bool backupOriginalRawFile = false;
184
185 int previewMode = DNGWriter::FULL_SIZE;
186 int activeWidth = 0;
187 int activeHeight = 0;
188 int outputHeight = 0;
189 int outputWidth = 0;
190 int width = 0;
191 int height = 0;
192
193 QString inputFile;
194 QString outputFile;
195 QString dngFilePath;
196 QByteArray rawData;
197
198 QFileInfo inputInfo;
199 QFileInfo outputInfo;
200 QDateTime fileDate;
201
202 dng_date_time_info orgDateTimeInfo;
203 dng_rect activeArea;
204 dng_exif* exif = nullptr;
205};
206
207} // namespace Digikam
Definition dmetadata.h:46
Definition dngwriterhost.h:26
Definition dngwriter_p.h:82
QString inputFile
Definition dngwriter_p.h:193
QByteArray rawData
Definition dngwriter_p.h:196
QFileInfo inputInfo
Definition dngwriter_p.h:198
DNGBayerPattern
Definition dngwriter_p.h:87
@ LinearRaw
Definition dngwriter_p.h:89
@ Fuji
Definition dngwriter_p.h:91
@ Standard
Definition dngwriter_p.h:90
@ Fuji6x6
Definition dngwriter_p.h:92
QString dngFilePath
Definition dngwriter_p.h:195
QFileInfo outputInfo
Definition dngwriter_p.h:199
dng_rect activeArea
Definition dngwriter_p.h:203
dng_date_time_info orgDateTimeInfo
Definition dngwriter_p.h:202
QString outputFile
Definition dngwriter_p.h:194
QDateTime fileDate
Definition dngwriter_p.h:200
Definition dngwriter.h:31
Definition drawinfo.h:37
Definition datefolderview.cpp:34