mirror of
https://invent.kde.org/frameworks/kimageformats.git
synced 2025-07-17 11:44:16 -04:00
exr: Fix read/write with openexr 3.3
It really wants to have a filename Also it uses seek and tell a lot so sequential devices are for now not supported BUGS: 494571 (cherry picked from commit 3489806ae2568b4aba1167b29828dfb745231fb5)
This commit is contained in:
committed by
Heiko Becker
parent
ee77e349e3
commit
09b9ff7bf9
@ -68,8 +68,8 @@
|
|||||||
class K_IStream : public Imf::IStream
|
class K_IStream : public Imf::IStream
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
K_IStream(QIODevice *dev, const QByteArray &fileName)
|
K_IStream(QIODevice *dev)
|
||||||
: IStream(fileName.data())
|
: IStream("K_IStream")
|
||||||
, m_dev(dev)
|
, m_dev(dev)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -159,7 +159,7 @@ bool EXRHandler::read(QImage *outImage)
|
|||||||
int width;
|
int width;
|
||||||
int height;
|
int height;
|
||||||
|
|
||||||
K_IStream istr(device(), QByteArray());
|
K_IStream istr(device());
|
||||||
Imf::RgbaInputFile file(istr);
|
Imf::RgbaInputFile file(istr);
|
||||||
Imath::Box2i dw = file.dataWindow();
|
Imath::Box2i dw = file.dataWindow();
|
||||||
bool isRgba = file.channels() & Imf::RgbaChannels::WRITE_A;
|
bool isRgba = file.channels() & Imf::RgbaChannels::WRITE_A;
|
||||||
@ -271,6 +271,13 @@ bool EXRHandler::canRead(QIODevice *device)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if OPENEXR_VERSION_MAJOR == 3 && OPENEXR_VERSION_MINOR > 2
|
||||||
|
// openexpr >= 3.3 uses seek and tell extensively
|
||||||
|
if (device->isSequential()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
const QByteArray head = device->peek(4);
|
const QByteArray head = device->peek(4);
|
||||||
|
|
||||||
return Imf::isImfMagic(head.data());
|
return Imf::isImfMagic(head.data());
|
||||||
|
Reference in New Issue
Block a user