Browse Source

Tga{Importer,ImageConverter}: respect Flag::Quiet.

pull/617/head
Vladimír Vondruš 3 years ago
parent
commit
f74e3b5f4e
  1. 17
      src/MagnumPlugins/TgaImageConverter/Test/TgaImageConverterTest.cpp
  2. 2
      src/MagnumPlugins/TgaImageConverter/TgaImageConverter.cpp
  3. 12
      src/MagnumPlugins/TgaImporter/Test/TgaImporterTest.cpp
  4. 2
      src/MagnumPlugins/TgaImporter/TgaImporter.cpp

17
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<AbstractImageConverter> 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));
}
}}}}

2
src/MagnumPlugins/TgaImageConverter/TgaImageConverter.cpp

@ -213,7 +213,7 @@ template<class T> void rleEncode(Containers::Array<char>& data, const ImageView2
Containers::Optional<Containers::Array<char>> 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";
}

12
src/MagnumPlugins/TgaImporter/Test/TgaImporterTest.cpp

@ -240,15 +240,17 @@ const struct {
const struct {
const char* name;
Containers::Array<char> 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<AbstractImporter> 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() {

2
src/MagnumPlugins/TgaImporter/TgaImporter.cpp

@ -192,7 +192,7 @@ Containers::Optional<ImageData2D> 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";
}

Loading…
Cancel
Save