From f74e3b5f4e08054277d5024a229321017457bee0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Fri, 14 Apr 2023 18:10:50 +0200 Subject: [PATCH] Tga{Importer,ImageConverter}: respect Flag::Quiet. --- .../Test/TgaImageConverterTest.cpp | 17 ++++++++++++----- .../TgaImageConverter/TgaImageConverter.cpp | 2 +- .../TgaImporter/Test/TgaImporterTest.cpp | 12 +++++++++--- src/MagnumPlugins/TgaImporter/TgaImporter.cpp | 2 +- 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/MagnumPlugins/TgaImageConverter/Test/TgaImageConverterTest.cpp b/src/MagnumPlugins/TgaImageConverter/Test/TgaImageConverterTest.cpp index b9374a783..935a94f67 100644 --- a/src/MagnumPlugins/TgaImageConverter/Test/TgaImageConverterTest.cpp +++ b/src/MagnumPlugins/TgaImageConverter/Test/TgaImageConverterTest.cpp @@ -279,11 +279,14 @@ const struct { const struct { const char* name; - ImageFlags2D flags; + ImageFlags2D imageFlags; + ImageConverterFlags converterFlags; const char* message; } UnsupportedMetadataData[]{ - {"1D array", ImageFlag2D::Array, - "1D array images are unrepresentable in TGA, saving as a regular 2D image"} + {"1D array", ImageFlag2D::Array, {}, + "1D array images are unrepresentable in TGA, saving as a regular 2D image"}, + {"1D array, quiet", ImageFlag2D::Array, ImageConverterFlag::Quiet, + nullptr} }; TgaImageConverterTest::TgaImageConverterTest() { @@ -651,14 +654,18 @@ void TgaImageConverterTest::unsupportedMetadata() { setTestCaseDescription(data.name); Containers::Pointer converter = _converterManager.instantiate("TgaImageConverter"); + converter->setFlags(data.converterFlags); const char imageData[4]{}; - ImageView2D image{PixelFormat::RGBA8Unorm, {1, 1}, imageData, data.flags}; + ImageView2D image{PixelFormat::RGBA8Unorm, {1, 1}, imageData, data.imageFlags}; std::ostringstream out; Warning redirectWarning{&out}; CORRADE_VERIFY(converter->convertToData(image)); - CORRADE_COMPARE(out.str(), Utility::formatString("Trade::TgaImageConverter::convertToData(): {}\n", data.message)); + if(!data.message) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), Utility::formatString("Trade::TgaImageConverter::convertToData(): {}\n", data.message)); } }}}} diff --git a/src/MagnumPlugins/TgaImageConverter/TgaImageConverter.cpp b/src/MagnumPlugins/TgaImageConverter/TgaImageConverter.cpp index a8a7f3a94..bf4b0e38c 100644 --- a/src/MagnumPlugins/TgaImageConverter/TgaImageConverter.cpp +++ b/src/MagnumPlugins/TgaImageConverter/TgaImageConverter.cpp @@ -213,7 +213,7 @@ template void rleEncode(Containers::Array& data, const ImageView2 Containers::Optional> TgaImageConverter::doConvertToData(const ImageView2D& image) { /* Warn about lost metadata */ - if(image.flags() & ImageFlag2D::Array) { + if((image.flags() & ImageFlag2D::Array) && !(flags() & ImageConverterFlag::Quiet)) { Warning{} << "Trade::TgaImageConverter::convertToData(): 1D array images are unrepresentable in TGA, saving as a regular 2D image"; } diff --git a/src/MagnumPlugins/TgaImporter/Test/TgaImporterTest.cpp b/src/MagnumPlugins/TgaImporter/Test/TgaImporterTest.cpp index a6e08ec6f..bfe5d0d48 100644 --- a/src/MagnumPlugins/TgaImporter/Test/TgaImporterTest.cpp +++ b/src/MagnumPlugins/TgaImporter/Test/TgaImporterTest.cpp @@ -240,15 +240,17 @@ const struct { const struct { const char* name; Containers::Array extra; + ImporterFlags flags; + bool quiet; } FileTooLongData[]{ {"", {InPlaceInit, { 'e', 'x', 't', 'r', 'a' - }}}, + }}, {}, false}, {"TGA 2", {InPlaceInit, { 'e', 'x', 't', 'r', 'a', 0, 0, 0, 0, 0, 0, 0, 0, 'T', 'R', 'U', 'E', 'V', 'I', 'S', 'I', 'O', 'N', '-', 'X', 'F', 'I', 'L', 'E', '.', '\0' - }}}, + }}, ImporterFlag::Quiet, true}, }; /* Shared among all plugins that implement data copying optimizations */ @@ -550,6 +552,7 @@ void TgaImporterTest::fileTooLong() { setTestCaseDescription(data.name); Containers::Pointer importer = _manager.instantiate("TgaImporter"); + importer->setFlags(data.flags); /* The actual image data is always the same, only the end differs */ CORRADE_VERIFY(importer->openData( @@ -572,7 +575,10 @@ void TgaImporterTest::fileTooLong() { 3, 4, 5, 6 }), TestSuite::Compare::Container); - CORRADE_COMPARE(out.str(), "Trade::TgaImporter::image2D(): ignoring 5 extra bytes at the end of image data\n"); + if(data.quiet) + CORRADE_COMPARE(out.str(), ""); + else + CORRADE_COMPARE(out.str(), "Trade::TgaImporter::image2D(): ignoring 5 extra bytes at the end of image data\n"); } void TgaImporterTest::openMemory() { diff --git a/src/MagnumPlugins/TgaImporter/TgaImporter.cpp b/src/MagnumPlugins/TgaImporter/TgaImporter.cpp index 5422debe1..fb987a362 100644 --- a/src/MagnumPlugins/TgaImporter/TgaImporter.cpp +++ b/src/MagnumPlugins/TgaImporter/TgaImporter.cpp @@ -192,7 +192,7 @@ Containers::Optional TgaImporter::doImage2D(UnsignedInt, UnsignedIn /* Image data that are larger are allowed in this case (even if there's a TGA 2 footer after), as we get garbage back in the worst case. In case of RLE this would be a failure. */ - if(srcPixels.size() > outputSize) { + if(srcPixels.size() > outputSize && !(flags() & ImporterFlag::Quiet)) { Warning{} << "Trade::TgaImporter::image2D(): ignoring" << srcPixels.size() - outputSize << "extra bytes at the end of image data"; }