QRPIJpegHandler.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #ifndef QRPIJPEGHANDLER_H
  2. #define QRPIJPEGHANDLER_H
  3. #include <QtGui/qimageiohandler.h>
  4. #include <QtCore/QSize>
  5. #include <QtCore/QRect>
  6. #include "brcmjpeg.h"
  7. QT_BEGIN_NAMESPACE
  8. ///////////////////////////////////////////////////////////////////////////////////////////////////
  9. // JPEG header struct
  10. #define JFIF_DATA_SIZE 4096 // additionnal data size for header parsing
  11. typedef unsigned char BYTE;
  12. typedef struct _JFIFHeader
  13. {
  14. BYTE SOI[2]; /* 00h Start of Image Marker */
  15. BYTE APP0[2]; /* 02h Application Use Marker */
  16. BYTE Length[2]; /* 04h Length of APP0 Field */
  17. BYTE Identifier[5]; /* 06h "JFIF" (zero terminated) Id String */
  18. BYTE Version[2]; /* 07h JFIF Format Revision */
  19. BYTE Units; /* 09h Units used for Resolution */
  20. BYTE Xdensity[2]; /* 0Ah Horizontal Resolution */
  21. BYTE Ydensity[2]; /* 0Ch Vertical Resolution */
  22. BYTE XThumbnail; /* 0Eh Horizontal Pixel Count */
  23. BYTE YThumbnail; /* 0Fh Vertical Pixel Count */
  24. BYTE data[JFIF_DATA_SIZE];
  25. } JFIFHEAD;
  26. // Hardware decoder buffers
  27. #define MAX_WIDTH 5000
  28. #define MAX_HEIGHT 5000
  29. #define MAX_ENCODED (15*1024*1024)
  30. #define MAX_DECODED (MAX_WIDTH*MAX_HEIGHT*2)
  31. static BYTE encodedInBuf[MAX_ENCODED];
  32. static BYTE decodedBuf[MAX_DECODED];
  33. ///////////////////////////////////////////////////////////////////////////////////////////////////
  34. // RPI JPEG decoding handling class
  35. class QRPIJpegHandler : public QImageIOHandler
  36. {
  37. public:
  38. QRPIJpegHandler();
  39. ~QRPIJpegHandler();
  40. bool canRead() const Q_DECL_OVERRIDE;
  41. bool read(QImage *image) Q_DECL_OVERRIDE;
  42. bool write(const QImage &image) Q_DECL_OVERRIDE;
  43. QByteArray name() const Q_DECL_OVERRIDE;
  44. static bool canRead(QIODevice *device);
  45. QVariant option(ImageOption option) const Q_DECL_OVERRIDE;
  46. void setOption(ImageOption option, const QVariant &value) Q_DECL_OVERRIDE;
  47. bool supportsOption(ImageOption option) const Q_DECL_OVERRIDE;
  48. private:
  49. bool readJpegSize(QIODevice *device, QSize &size) const;
  50. int m_quality;
  51. BRCMJPEG_REQUEST_T m_dec_request;
  52. BRCMJPEG_T *m_decoder;
  53. };
  54. QT_END_NAMESPACE
  55. #endif // QRPIJPEGHANDLER_H