mirror of
https://invent.kde.org/frameworks/kimageformats.git
synced 2025-06-03 17:08:08 -04:00
DDS: Fix warning in qfloat16 and test failure on PowerPC
Fixes the following warning: ``` /home/daniel/kimageformats/src/imageformats/dds.cpp: In function ‘qfloat16 readFloat16(QDataStream&)’: /home/daniel/kimageformats/src/imageformats/dds.cpp:1037:11: warning: ‘void* memcpy(void*, const void*, size_t)’ copying an object of non-trivial type ‘class qfloat16’ from an array of ‘quint16’ {aka ‘short unsigned int’} [-Wclass-memaccess] 1037 | memcpy(&f16, &rawData, sizeof(rawData)); | ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/qt6/QtCore/qmetatype.h:14, from /usr/include/qt6/QtCore/qobject.h:18, from /usr/include/qt6/QtCore/qiodevice.h:10, from /usr/include/qt6/QtGui/qimageiohandler.h:9, from /usr/include/qt6/QtGui/QImageIOPlugin:1, from /home/daniel/kimageformats/src/imageformats/dds_p.h:13, from /home/daniel/kimageformats/src/imageformats/dds.cpp:12: /usr/include/qt6/QtCore/qfloat16.h:46:7: note: ‘class qfloat16’ declared here 46 | class qfloat16 | ^~~~~~~~ ``` Should also fixes the following failed tests under PowerPC (32-bits): ``` INFO : rgba16dx10.dds: converting rgba16dx10.dds from RGBA16FPx4 to ARGB32 FAIL : rgba16dx10.dds: differs from rgba16dx10.png expected data written to rgba16dx10.dds-expected.data actual data written to rgba16dx10.dds-actual.data ``` ``` INFO : rgba_f16.dds: converting rgba_f16.dds from RGBA16FPx4 to ARGB32 FAIL : rgba_f16.dds: differs from rgba_f16.png expected data written to rgba_f16.dds-expected.data actual data written to rgba_f16.dds-actual.data ```
This commit is contained in:
parent
ae00c110f2
commit
5f92bcbf26
@ -161,9 +161,7 @@ if (LibJXR_FOUND)
|
||||
)
|
||||
endif()
|
||||
|
||||
# Allow some fuzziness when reading this formats, to allow for
|
||||
# rounding errors (eg: in alpha blending).
|
||||
kimageformats_read_tests(FUZZ 1
|
||||
kimageformats_read_tests(
|
||||
xcf
|
||||
)
|
||||
|
||||
|
7
autotests/read/dds/rgba16dx10.dds.json
Normal file
7
autotests/read/dds/rgba16dx10.dds.json
Normal file
@ -0,0 +1,7 @@
|
||||
[
|
||||
{
|
||||
"fileName" : "rgba16dx10.png",
|
||||
"fuzziness" : 1,
|
||||
"description" : "Minimum fuzziness value to pass the test on all architectures."
|
||||
}
|
||||
]
|
7
autotests/read/dds/rgba_f16.dds.json
Normal file
7
autotests/read/dds/rgba_f16.dds.json
Normal file
@ -0,0 +1,7 @@
|
||||
[
|
||||
{
|
||||
"fileName" : "rgba_f16.png",
|
||||
"fuzziness" : 1,
|
||||
"description" : "Minimum fuzziness value to pass the test on all architectures."
|
||||
}
|
||||
]
|
@ -377,7 +377,12 @@ int main(int argc, char **argv)
|
||||
<< " to " << formatToString(cmpFormat) << '\n';
|
||||
expImage = expImage.convertToFormat(cmpFormat);
|
||||
}
|
||||
if (fuzzyeq(inputImage, expImage, fuzziness)) {
|
||||
auto tmpFuzziness = fuzziness;
|
||||
if (tmpFuzziness == 0) {
|
||||
// If the fuzziness value is not explicitly set I use the one set for the current image.
|
||||
tmpFuzziness = timg.fuzziness();
|
||||
}
|
||||
if (fuzzyeq(inputImage, expImage, tmpFuzziness)) {
|
||||
QTextStream(stdout) << "PASS : " << fi.fileName() << "\n";
|
||||
++passed;
|
||||
} else {
|
||||
|
@ -126,6 +126,15 @@ bool TemplateImage::checkOptionaInfo(const QImage& image, QString& error) const
|
||||
return true;
|
||||
}
|
||||
|
||||
quint8 TemplateImage::fuzziness() const
|
||||
{
|
||||
auto obj = searchObject(m_fi);
|
||||
if (obj.isEmpty()) {
|
||||
return quint8(0);
|
||||
}
|
||||
return quint8(obj.value("fuzziness").toInt());
|
||||
}
|
||||
|
||||
QStringList TemplateImage::suffixes()
|
||||
{
|
||||
return QStringList({"png", "tif", "tiff", "json"});
|
||||
|
@ -63,13 +63,25 @@ public:
|
||||
|
||||
/*!
|
||||
* \brief checkOptionaInfo
|
||||
* Verify the optional information (resolution, metadata, etc.) of the image with that in the template if present.
|
||||
* Verify the optional information (resolution, metadata, etc.) of the
|
||||
* image with that in the template if present.
|
||||
* \param image The image to check optional information on.
|
||||
* \param error The error message when returns false.
|
||||
* \return True on success, otherwise false.
|
||||
*/
|
||||
bool checkOptionaInfo(const QImage& image, QString& error) const;
|
||||
|
||||
/*!
|
||||
* \brief fuzziness
|
||||
* The fuzziness value that ensures the test works correctly. Normally
|
||||
* set for lossy codecs and images that require floating point
|
||||
* conversions.
|
||||
* Floating point conversions may give slightly different results from
|
||||
* one architecture to another (Intel, PowerPC, Arm, etc...).
|
||||
* \return The default fuzziness value for the image. Zero means no fuzziness.
|
||||
*/
|
||||
quint8 fuzziness() const;
|
||||
|
||||
/*!
|
||||
* \brief suffixes
|
||||
* \return The list of suffixes considered templates.
|
||||
|
@ -1031,11 +1031,7 @@ static QImage readUnsignedImage(QDataStream &s, const DDSHeader &dds, quint32 wi
|
||||
static qfloat16 readFloat16(QDataStream &s)
|
||||
{
|
||||
qfloat16 f16;
|
||||
|
||||
quint16 rawData;
|
||||
s >> rawData;
|
||||
memcpy(&f16, &rawData, sizeof(rawData));
|
||||
|
||||
s >> f16;
|
||||
return f16;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user