mirror of
https://invent.kde.org/frameworks/kimageformats.git
synced 2025-05-28 00:30:23 -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_FC(a) (((a) & 0x1) << 19)
|
||||
#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_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_FC(a) (((a) >> 19) & 0x1)
|
||||
#define T_SR(a) (((a) >> 20) & 0x1)
|
||||
#define T_PRESET(a) ((a) & 0xF)
|
||||
#define T_FLAGS(a) (((a) >> 31) & 0x1)
|
||||
// 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)
|
||||
{
|
||||
@ -459,47 +459,45 @@ void setParams(QImageIOHandler *handler, LibRaw *rawProcessor)
|
||||
if (handler->supportsOption(QImageIOHandler::Quality)) {
|
||||
quality = handler->option(QImageIOHandler::Quality).toInt();
|
||||
}
|
||||
if (quality < 0) {
|
||||
if (quality > -1) {
|
||||
switch (quality / 10) {
|
||||
case 0:
|
||||
quality = C_IQ(0) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(0) | C_HS(1);
|
||||
break;
|
||||
case 1:
|
||||
quality = C_IQ(0) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(0) | C_HS(0);
|
||||
break;
|
||||
case 2:
|
||||
quality = C_IQ(3) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(0) | C_HS(0);
|
||||
break;
|
||||
case 3:
|
||||
quality = C_IQ(3) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
||||
break;
|
||||
case 4:
|
||||
quality = C_IQ(3) | C_OC(2) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
||||
break;
|
||||
case 5:
|
||||
quality = C_IQ(3) | C_OC(4) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
||||
break;
|
||||
case 6:
|
||||
quality = C_IQ(11) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(0) | C_HS(0);
|
||||
break;
|
||||
case 7:
|
||||
quality = C_IQ(11) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
||||
break;
|
||||
case 8:
|
||||
quality = C_IQ(11) | C_OC(2) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
||||
break;
|
||||
default:
|
||||
quality = C_IQ(11) | C_OC(4) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
||||
break;
|
||||
}
|
||||
quality |= C_FLAGS(1);
|
||||
}
|
||||
if (quality == -1) {
|
||||
quality = DEFAULT_QUALITY;
|
||||
}
|
||||
|
||||
switch (T_PRESET(quality)) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
quality = C_IQ(0) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(0) | C_HS(1);
|
||||
break;
|
||||
case 2:
|
||||
quality = C_IQ(0) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(0) | C_HS(0);
|
||||
break;
|
||||
case 3:
|
||||
quality = C_IQ(3) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(0) | C_HS(0);
|
||||
break;
|
||||
case 4:
|
||||
quality = C_IQ(3) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
||||
break;
|
||||
case 5:
|
||||
quality = C_IQ(3) | C_OC(2) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
||||
break;
|
||||
case 6:
|
||||
quality = C_IQ(3) | C_OC(4) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
||||
break;
|
||||
case 7:
|
||||
quality = C_IQ(11) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(0) | C_HS(0);
|
||||
break;
|
||||
case 8:
|
||||
quality = C_IQ(11) | C_OC(1) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
||||
break;
|
||||
case 9:
|
||||
quality = C_IQ(11) | C_OC(2) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
||||
break;
|
||||
case 10:
|
||||
quality = C_IQ(11) | C_OC(4) | C_CW(1) | C_AW(1) | C_BT(1) | C_HS(0);
|
||||
break;
|
||||
default:
|
||||
quality = DEFAULT_QUALITY;
|
||||
break;
|
||||
}
|
||||
Q_ASSERT(T_FLAGS(quality));
|
||||
|
||||
auto &¶ms = rawProcessor->imgdata.params;
|
||||
|
||||
|
@ -40,30 +40,13 @@ private:
|
||||
* Change the quality of the conversion. If -1, default quality is used.
|
||||
* @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
|
||||
* 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:
|
||||
*
|
||||
* _: 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
|
||||
* _: reserved (should be zero)
|
||||
* 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)
|
||||
* W: use camera white balace (0 - off, 1 - on)
|
||||
@ -74,8 +57,21 @@ private:
|
||||
* N: FBDD noise reduction (0 - off, 1 - light, 2 - full)
|
||||
* 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)
|
||||
*
|
||||
* @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;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user