mirror of
https://invent.kde.org/frameworks/kimageformats.git
synced 2025-06-03 17:08:08 -04:00
raw: change the use of the quality parameter
- Standardized the quality parameter between 0-100 - The value -1 is the default value of Qt plugins and is managed - Negative values other than -1 are used as flags to activate the custom mode
This commit is contained in:
parent
d57ff91f8b
commit
93adb22632
@ -418,7 +418,7 @@ inline void rgbToRgbX(uchar *target, const uchar *source, qint32 targetSize, qin
|
|||||||
#define C_NR(a) (((a) & 0x3) << 17)
|
#define C_NR(a) (((a) & 0x3) << 17)
|
||||||
#define C_FC(a) (((a) & 0x1) << 19)
|
#define C_FC(a) (((a) & 0x1) << 19)
|
||||||
#define C_SR(a) (((a) & 0x1) << 20)
|
#define C_SR(a) (((a) & 0x1) << 20)
|
||||||
#define C_PRESET(a) ((a) & 0xF)
|
#define C_FLAGS(a) (((a) & 0x1) << 31) // flags mode
|
||||||
|
|
||||||
#define T_IQ(a) (((a) >> 4) & 0xF)
|
#define T_IQ(a) (((a) >> 4) & 0xF)
|
||||||
#define T_OC(a) (((a) >> 8) & 0xF)
|
#define T_OC(a) (((a) >> 8) & 0xF)
|
||||||
@ -430,10 +430,10 @@ inline void rgbToRgbX(uchar *target, const uchar *source, qint32 targetSize, qin
|
|||||||
#define T_NR(a) (((a) >> 17) & 0x3)
|
#define T_NR(a) (((a) >> 17) & 0x3)
|
||||||
#define T_FC(a) (((a) >> 19) & 0x1)
|
#define T_FC(a) (((a) >> 19) & 0x1)
|
||||||
#define T_SR(a) (((a) >> 20) & 0x1)
|
#define T_SR(a) (((a) >> 20) & 0x1)
|
||||||
#define T_PRESET(a) ((a) & 0xF)
|
#define T_FLAGS(a) (((a) >> 31) & 0x1)
|
||||||
// clang-format on
|
// clang-format on
|
||||||
|
|
||||||
#define DEFAULT_QUALITY (C_IQ(3) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0))
|
#define DEFAULT_QUALITY (C_IQ(3) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0) | C_FLAGS(1))
|
||||||
|
|
||||||
void setParams(QImageIOHandler *handler, LibRaw *rawProcessor)
|
void setParams(QImageIOHandler *handler, LibRaw *rawProcessor)
|
||||||
{
|
{
|
||||||
@ -459,47 +459,45 @@ void setParams(QImageIOHandler *handler, LibRaw *rawProcessor)
|
|||||||
if (handler->supportsOption(QImageIOHandler::Quality)) {
|
if (handler->supportsOption(QImageIOHandler::Quality)) {
|
||||||
quality = handler->option(QImageIOHandler::Quality).toInt();
|
quality = handler->option(QImageIOHandler::Quality).toInt();
|
||||||
}
|
}
|
||||||
if (quality < 0) {
|
if (quality > -1) {
|
||||||
quality = DEFAULT_QUALITY;
|
switch (quality / 10) {
|
||||||
}
|
|
||||||
|
|
||||||
switch (T_PRESET(quality)) {
|
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
quality = C_IQ(0) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(0) | C_HS(1);
|
quality = C_IQ(0) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(0) | C_HS(1);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 1:
|
||||||
quality = C_IQ(0) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(0) | C_HS(0);
|
quality = C_IQ(0) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(0) | C_HS(0);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 2:
|
||||||
quality = C_IQ(3) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(0) | C_HS(0);
|
quality = C_IQ(3) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(0) | C_HS(0);
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 3:
|
||||||
quality = C_IQ(3) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
quality = C_IQ(3) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 4:
|
||||||
quality = C_IQ(3) | C_OC(2) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
quality = C_IQ(3) | C_OC(2) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 5:
|
||||||
quality = C_IQ(3) | C_OC(4) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
quality = C_IQ(3) | C_OC(4) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 6:
|
||||||
quality = C_IQ(11) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(0) | C_HS(0);
|
quality = C_IQ(11) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(0) | C_HS(0);
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 7:
|
||||||
quality = C_IQ(11) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
quality = C_IQ(11) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
||||||
break;
|
break;
|
||||||
case 9:
|
case 8:
|
||||||
quality = C_IQ(11) | C_OC(2) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
quality = C_IQ(11) | C_OC(2) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
||||||
break;
|
break;
|
||||||
case 10:
|
default:
|
||||||
quality = C_IQ(11) | C_OC(4) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
quality = C_IQ(11) | C_OC(4) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
quality = DEFAULT_QUALITY;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
quality |= C_FLAGS(1);
|
||||||
|
}
|
||||||
|
if (quality == -1) {
|
||||||
|
quality = DEFAULT_QUALITY;
|
||||||
|
}
|
||||||
|
Q_ASSERT(T_FLAGS(quality));
|
||||||
|
|
||||||
auto &¶ms = rawProcessor->imgdata.params;
|
auto &¶ms = rawProcessor->imgdata.params;
|
||||||
|
|
||||||
|
@ -40,30 +40,13 @@ private:
|
|||||||
* Change the quality of the conversion. If -1, default quality is used.
|
* Change the quality of the conversion. If -1, default quality is used.
|
||||||
* @note Verify that the quality change support has been compiled with supportsOption()
|
* @note Verify that the quality change support has been compiled with supportsOption()
|
||||||
*
|
*
|
||||||
|
* When the quality value is negative (but not -1), we assume we want to work with flags according to the following scheme:
|
||||||
* 3 2 1 0
|
* 3 2 1 0
|
||||||
* 1 0 9 8 7 6 5 4 3 2 1 0 9 87 6 5 4 3 2 1098 7654 3210
|
* 1 0 9 8 7 6 5 4 3 2 1 0 9 87 6 5 4 3 2 1098 7654 3210
|
||||||
* _ _ _ _ _ _ _ _ _ _ _ S F NN E H B A W CCCC IIII PPPP
|
* 1 _ _ _ _ _ _ _ _ _ _ S F NN E H B A W CCCC IIII ____
|
||||||
*
|
*
|
||||||
* Where:
|
* Where:
|
||||||
*
|
* _: reserved (should be zero)
|
||||||
* _: reserved
|
|
||||||
* P: preset values: *** if set, other flags are ignored! ***
|
|
||||||
* - 0: Use other flags (no preset)
|
|
||||||
* - 1: I = 0, C = 1, B = 0, W = 1, A = 1, H = 1 (Linear, sRGB, 8-bits, Camera White, Auto White, Half-size)
|
|
||||||
* - 2: I = 0, C = 1, B = 0, W = 1, A = 1, H = 0 (Linear, sRGB, 8-bits, Camera White, Auto White)
|
|
||||||
* - 3: I = 3, C = 1, B = 0, W = 1, A = 1, H = 0 (AHD, sRGB, 8-bits, Camera White, Auto White)
|
|
||||||
* - 4: I = 3, C = 1, B = 1, W = 1, A = 1, H = 0 (AHD, sRGB, 16-bits, Camera White, Auto White)
|
|
||||||
* - 5: I = 3, C = 2, B = 1, W = 1, A = 1, H = 0 (AHD, Adobe, 16-bits, Camera White, Auto White)
|
|
||||||
* - 6: I = 3, C = 4, B = 1, W = 1, A = 1, H = 0 (AHD, ProPhoto, 16-bits, Camera White, Auto White)
|
|
||||||
* - 7: I = 11, C = 1, B = 0, W = 1, A = 1, H = 0 (DHT, sRGB, 8-bits, Camera White, Auto White)
|
|
||||||
* - 8: I = 11, C = 1, B = 1, W = 1, A = 1, H = 0 (DHT, sRGB, 16-bits, Camera White, Auto White)
|
|
||||||
* - 9: I = 11, C = 2, B = 1, W = 1, A = 1, H = 0 (DHT, Adobe, 16-bits, Camera White, Auto White)
|
|
||||||
* - 10: I = 11, C = 4, B = 1, W = 1, A = 1, H = 0 (DHT, ProPhoto, 16-bits, Camera White, Auto White)
|
|
||||||
* - 11: reserved
|
|
||||||
* - 12: reserved
|
|
||||||
* - 13: reserved
|
|
||||||
* - 14: reserved
|
|
||||||
* - 15: reserved
|
|
||||||
* I: interpolation quality (0 - linear, 1 - VNG, 2 - PPG, 3 - AHD, 4 - DCB, 11 - DHT, 12 - AAHD)
|
* I: interpolation quality (0 - linear, 1 - VNG, 2 - PPG, 3 - AHD, 4 - DCB, 11 - DHT, 12 - AAHD)
|
||||||
* C: output colorspace (0 - raw, 1 - sRGB, 2 - Adobe, 3 - Wide, 4 - ProPhoto, 5 - XYZ, 6 - ACES, 7 - DCI-P3, 8 - Rec2020)
|
* C: output colorspace (0 - raw, 1 - sRGB, 2 - Adobe, 3 - Wide, 4 - ProPhoto, 5 - XYZ, 6 - ACES, 7 - DCI-P3, 8 - Rec2020)
|
||||||
* W: use camera white balace (0 - off, 1 - on)
|
* W: use camera white balace (0 - off, 1 - on)
|
||||||
@ -74,8 +57,21 @@ private:
|
|||||||
* N: FBDD noise reduction (0 - off, 1 - light, 2 - full)
|
* N: FBDD noise reduction (0 - off, 1 - light, 2 - full)
|
||||||
* F: Interpolate RGGB as four colors (0 - off, 1 - on)
|
* F: Interpolate RGGB as four colors (0 - off, 1 - on)
|
||||||
* S: Don't stretch or rotate raw pixels (0 - rotate and stretch, 1 - don't rotate and stretch)
|
* S: Don't stretch or rotate raw pixels (0 - rotate and stretch, 1 - don't rotate and stretch)
|
||||||
*
|
|
||||||
* @note It is safe to set both W and A: W is used if camera white balance is found, otherwise A is used.
|
* @note It is safe to set both W and A: W is used if camera white balance is found, otherwise A is used.
|
||||||
|
*
|
||||||
|
* When quality is a positive value, a value between 0 and 100 is expected. The values are interpreted as follows:
|
||||||
|
* - 00-09: I = 0, C = 1, B = 0, W = 1, A = 1, H = 1 (Linear, sRGB, 8-bits, Camera White, Auto White, Half-size)
|
||||||
|
* - 10-19: I = 0, C = 1, B = 0, W = 1, A = 1, H = 0 (Linear, sRGB, 8-bits, Camera White, Auto White)
|
||||||
|
* - 20-29: I = 3, C = 1, B = 0, W = 1, A = 1, H = 0 (AHD, sRGB, 8-bits, Camera White, Auto White)
|
||||||
|
* - 30-39: I = 3, C = 1, B = 1, W = 1, A = 1, H = 0 (AHD, sRGB, 16-bits, Camera White, Auto White) [Default]
|
||||||
|
* - 40-49: I = 3, C = 2, B = 1, W = 1, A = 1, H = 0 (AHD, Adobe, 16-bits, Camera White, Auto White)
|
||||||
|
* - 50-59: I = 3, C = 4, B = 1, W = 1, A = 1, H = 0 (AHD, ProPhoto, 16-bits, Camera White, Auto White)
|
||||||
|
* - 60-69: I = 11, C = 1, B = 0, W = 1, A = 1, H = 0 (DHT, sRGB, 8-bits, Camera White, Auto White)
|
||||||
|
* - 70-79: I = 11, C = 1, B = 1, W = 1, A = 1, H = 0 (DHT, sRGB, 16-bits, Camera White, Auto White)
|
||||||
|
* - 80-89: I = 11, C = 2, B = 1, W = 1, A = 1, H = 0 (DHT, Adobe, 16-bits, Camera White, Auto White)
|
||||||
|
* - >= 90: I = 11, C = 4, B = 1, W = 1, A = 1, H = 0 (DHT, ProPhoto, 16-bits, Camera White, Auto White)
|
||||||
|
*
|
||||||
|
* When the quality is -1, default quality is used.
|
||||||
*/
|
*/
|
||||||
qint32 m_quality;
|
qint32 m_quality;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user