00001 /**************************************************************************** 00002 ** 00003 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). 00004 ** Contact: Alexander Bokovoy <alexander.bokovoy@nokia.com> 00005 ** 00006 ** This file is part of the Quill Image Filters package. 00007 ** 00008 ** Commercial Usage 00009 ** Licensees holding valid Qt Commercial licenses may use this file in 00010 ** accordance with the Qt Commercial License Agreement provided with the 00011 ** Software or, alternatively, in accordance with the terms contained in 00012 ** a written agreement between you and Nokia. 00013 ** 00014 ** GNU Lesser General Public License Usage 00015 ** Alternatively, this file may be used under the terms of the GNU Lesser 00016 ** General Public License version 2.1 as published by the Free Software 00017 ** Foundation and appearing in the file LICENSE.LGPL included in the 00018 ** packaging of this file. Please review the following information to 00019 ** ensure the GNU Lesser General Public License version 2.1 requirements 00020 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. 00021 ** 00022 ** In addition, as a special exception, Nokia gives you certain 00023 ** additional rights. These rights are described in the Nokia Qt LGPL 00024 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this 00025 ** package. 00026 ** 00027 ** GNU General Public License Usage 00028 ** Alternatively, this file may be used under the terms of the GNU 00029 ** General Public License version 3.0 as published by the Free Software 00030 ** Foundation and appearing in the file LICENSE.GPL included in the 00031 ** packaging of this file. Please review the following information to 00032 ** ensure the GNU General Public License version 3.0 requirements will be 00033 ** met: http://www.gnu.org/copyleft/gpl.html. 00034 ** 00035 ** If you are unsure which license is appropriate for your use, please 00036 ** contact the sales department at qt-sales@nokia.com. 00037 ** 00038 ****************************************************************************/ 00039 00052 #ifndef READERSTORAGE_H 00053 #define READERSTORAGE_H 00054 00055 #include <QCache> 00056 #include <QLatin1String> 00057 #include "quillimagefilter.h" 00058 00059 class QByteArray; 00060 class QBuffer; 00061 class QImageReader; 00062 00063 class ReaderStorageItem 00064 { 00065 public: 00066 ReaderStorageItem(); 00067 ~ReaderStorageItem(); 00068 00069 inline QBuffer* buffer(); 00070 inline QByteArray* byteArray(); 00071 inline QImageReader* reader(); 00072 inline void setImageReader(QImageReader* imageReader); 00073 inline QuillImageFilter::ImageFilterError error(); 00074 void setError(QuillImageFilter::ImageFilterError error); 00075 00076 private: 00077 QByteArray *m_ByteArray; 00078 QBuffer *m_Buffer; 00079 QImageReader *m_reader; 00080 QuillImageFilter::ImageFilterError filterError; 00081 }; 00082 00083 class ReaderStorage 00084 { 00085 public: 00086 ReaderStorage(); 00094 QImageReader* createImageReader(int uniqueKey, const QString& fileName, const QByteArray& format); 00095 00097 static bool isJpeg(const QByteArray &format); 00098 00103 QImageReader* getReaderFromStorage(int uniqueKey); 00104 00109 QuillImageFilter::ImageFilterError error(int uniqueKey); 00110 00113 void discardReader(int uniqueKey); 00114 00115 private: 00116 bool loadStorageItemFromFile(const QString& fileName, ReaderStorageItem* readerStorageItem, const QByteArray& format); 00117 00118 private: 00119 QCache<int,ReaderStorageItem> m_ReaderCache; 00120 00121 static const QByteArray JpegFormatShort; 00122 static const QByteArray JpegFormatLong; 00123 }; 00124 00125 #endif // READERSTORAGE_H