SWM341_jpeg.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #ifndef __SWM341_JPEG_H__
  2. #define __SWM341_JPEG_H__
  3. #include <stdint.h>
  4. typedef struct {
  5. uint8_t DoneIEn; // 解码完成中断使能
  6. uint8_t ErrorIEn; // 解码出错中断使能
  7. } JPEG_InitStructure;
  8. typedef struct {
  9. uint8_t format; // 解码输出格式,可取值JPEG_OUT_YUV、JPEG_OUT_YUVsp、JPEG_OUT_XRGB888、...
  10. /* for RGB output */
  11. uint8_t dither; // RGB565 dithering enable
  12. uint32_t RGBAddr;
  13. /* for YUV output */
  14. uint32_t YAddr;
  15. uint32_t CbAddr;
  16. uint32_t CrAddr;
  17. } jpeg_outset_t; // output setting
  18. #define JPEG_OUT_YUV 0
  19. #define JPEG_OUT_YUVsp 1 // semi-planar
  20. #define JPEG_OUT_XRGB888 2
  21. #define JPEG_OUT_RGB888 3
  22. #define JPEG_OUT_RGB565 4
  23. #define JPEG_OUT_YVU (0 | (1 << 4))
  24. #define JPEG_OUT_YVUsp (1 | (1 << 4))
  25. #define JPEG_OUT_XBGR888 (2 | (1 << 5))
  26. #define JPEG_OUT_BGR888 (3 | (1 << 5))
  27. #define JPEG_OUT_BGR565 (4 | (1 << 5))
  28. #define JPEG_OUT_BGRX888 (2 | (1 << 6))
  29. #define JPEG_OUT_RGBX888 (2 | (1 << 5) | (1 << 6))
  30. #define JPEG_FMT_H2V2 0 // YUV420
  31. #define JPEG_FMT_H2V1 1 // YUV422
  32. #define JPEG_FMT_H1V1 2 // YUV444
  33. #define JFIF_QTAB_MAX 3
  34. #define JFIF_HTAB_MAX 2
  35. typedef struct {
  36. uint16_t Width;
  37. uint16_t Height;
  38. struct {
  39. uint8_t id; // 1:Y 2:Cb 3:Cr
  40. uint8_t hfactor; // 颜色分量水平采样因子
  41. uint8_t vfactor; // 颜色分量垂直采样因子
  42. uint8_t qtab_id; // 颜色分量使用的量化表ID
  43. uint8_t htab_id_dc; // 直流分量使用的霍夫曼表ID
  44. uint8_t htab_id_ac; // 交流分量使用的霍夫曼表ID
  45. } CompInfo[3]; // Component Information
  46. uint8_t CompCnt;
  47. uint8_t QTable[JFIF_QTAB_MAX][64];
  48. uint8_t QTableCnt;
  49. struct {
  50. struct {
  51. uint16_t codeWord[16];
  52. uint8_t codeLen[16];
  53. uint8_t codeVal[16];
  54. } DC;
  55. struct {
  56. uint16_t codeWord[162];
  57. uint8_t codeLen[162];
  58. uint8_t codeVal[162];
  59. } AC;
  60. } HTable[JFIF_HTAB_MAX];
  61. uint8_t HTableCnt;
  62. uint32_t CodeAddr; // 待解码数据
  63. uint32_t CodeLen;
  64. } jfif_info_t;
  65. void JPEG_Init(JPEG_TypeDef * JPEGx, JPEG_InitStructure * initStruct);
  66. void JPEG_Decode(JPEG_TypeDef * JPEGx, jfif_info_t * jfif_info, jpeg_outset_t * jpeg_outset);
  67. uint32_t JPEG_DecodeBusy(JPEG_TypeDef * JPEGx);
  68. #endif //__SWM341_JPEG_H__