kimgio: jp2, jpeg and raw plugins review

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2022-10-12 01:01:02 +03:00
parent 1f9ff81688
commit cfe47507fa
3 changed files with 13 additions and 10 deletions

View file

@ -117,9 +117,11 @@ bool JP2Handler::canRead() const
bool JP2Handler::read(QImage *image) bool JP2Handler::read(QImage *image)
{ {
const qint64 devicepos = device()->pos();
const QByteArray data = device()->readAll(); const QByteArray data = device()->readAll();
device()->seek(devicepos);
if (Q_UNLIKELY(data.isEmpty())) {
return false;
}
opj_codec_t* ojcodec = opj_create_decompress(guessOJCodec(data.constData())); opj_codec_t* ojcodec = opj_create_decompress(guessOJCodec(data.constData()));
if (!ojcodec) { if (!ojcodec) {

View file

@ -37,12 +37,11 @@ static const uchar s_jpegexifheader[] = { 0xFF, 0xD8, 0xFF, 0xE1 };
static const struct HeadersTblData { static const struct HeadersTblData {
const uchar *header; const uchar *header;
const int headersize; const int headersize;
const char *format;
} HeadersTbl[] = { } HeadersTbl[] = {
{ s_jpgjfifheader, 12, "jpg" }, { s_jpgjfifheader, 12 },
{ s_jpgheader, 4, "jpg" }, { s_jpgheader, 4 },
{ s_jpg2header, 4, "jpg" }, { s_jpg2header, 4 },
{ s_jpegexifheader, 4, "jpg" } { s_jpegexifheader, 4 }
}; };
static const qint16 HeadersTblSize = sizeof(HeadersTbl) / sizeof(HeadersTblData); static const qint16 HeadersTblSize = sizeof(HeadersTbl) / sizeof(HeadersTblData);
@ -67,6 +66,10 @@ bool JPEGHandler::read(QImage *image)
{ {
const QByteArray data = device()->readAll(); const QByteArray data = device()->readAll();
if (Q_UNLIKELY(data.isEmpty())) {
return false;
}
tjhandle jpegdecomp = tjInitDecompress(); tjhandle jpegdecomp = tjInitDecompress();
if (!jpegdecomp) { if (!jpegdecomp) {
kWarning() << "Could not initialize decompressor" << tjGetErrorStr(); kWarning() << "Could not initialize decompressor" << tjGetErrorStr();
@ -157,7 +160,7 @@ bool JPEGHandler::canRead(QIODevice *device)
for (int i = 0; i < HeadersTblSize; i++) { for (int i = 0; i < HeadersTblSize; i++) {
if (qstrncmp(data.constData(), reinterpret_cast<const char*>(HeadersTbl[i].header), HeadersTbl[i].headersize) == 0) { if (qstrncmp(data.constData(), reinterpret_cast<const char*>(HeadersTbl[i].header), HeadersTbl[i].headersize) == 0) {
kDebug() << "Header detected" << HeadersTbl[i].format; kDebug() << "Header detected";
return true; return true;
} }
} }

View file

@ -44,9 +44,7 @@ bool RAWHandler::canRead() const
bool RAWHandler::read(QImage *image) bool RAWHandler::read(QImage *image)
{ {
const qint64 devicepos = device()->pos();
QByteArray data = device()->readAll(); QByteArray data = device()->readAll();
device()->seek(devicepos);
if (Q_UNLIKELY(data.isEmpty())) { if (Q_UNLIKELY(data.isEmpty())) {
return false; return false;