EncJpeg.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. /*------------------------------------------------------------------------------
  2. -- --
  3. -- This software is confidential and proprietary and may be used --
  4. -- only as expressly authorized by a licensing agreement from --
  5. -- --
  6. -- Hantro Products Oy. --
  7. -- --
  8. -- (C) COPYRIGHT 2006 HANTRO PRODUCTS OY --
  9. -- ALL RIGHTS RESERVED --
  10. -- --
  11. -- The entire notice above must be reproduced --
  12. -- on all copies and should not be removed. --
  13. -- --
  14. --------------------------------------------------------------------------------
  15. --
  16. -- Abstract :
  17. --
  18. ------------------------------------------------------------------------------*/
  19. /*------------------------------------------------------------------------------
  20. Table of contents
  21. 1. Include headers
  22. 2. Module defines
  23. 3. Data types
  24. 4. Function prototypes
  25. ------------------------------------------------------------------------------*/
  26. #ifndef __ENC_JPEG_H__
  27. #define __ENC_JPEG_H__
  28. /*------------------------------------------------------------------------------
  29. 1. Include headers
  30. ------------------------------------------------------------------------------*/
  31. #include "jpegencapi.h"
  32. #include "basetype.h"
  33. #include "enccommon.h"
  34. #include "EncJpegPutBits.h"
  35. /*------------------------------------------------------------------------------
  36. 2. Module defines
  37. ------------------------------------------------------------------------------*/
  38. #define MAX_NUMBER_OF_COMPONENTS 3
  39. /*------------------------------------------------------------------------------
  40. 3. Data types
  41. ------------------------------------------------------------------------------*/
  42. enum
  43. {
  44. ENC_WHOLE_FRAME,
  45. ENC_PARTIAL_FRAME,
  46. ENC_420_MODE,
  47. ENC_422_MODE
  48. };
  49. typedef enum
  50. {
  51. ENC_NO_UNITS = 0,
  52. ENC_DOTS_PER_INCH = 1,
  53. ENC_DOTS_PER_CM = 2
  54. } EncAppUnitsType;
  55. enum
  56. {
  57. ENC_SINGLE_MARKER,
  58. ENC_MULTI_MARKER
  59. };
  60. typedef struct JpegEncQuantTables_t
  61. {
  62. const u8 *pQlumi;
  63. const u8 *pQchromi;
  64. } JpegEncQuantTables;
  65. typedef struct JpegEncFrameHeader_t /* SOF0 */
  66. {
  67. u32 header;
  68. u32 Lf;
  69. u32 P;
  70. u32 Y;
  71. u32 X;
  72. u32 Nf;
  73. u32 Ci[MAX_NUMBER_OF_COMPONENTS];
  74. u32 Hi[MAX_NUMBER_OF_COMPONENTS];
  75. u32 Vi[MAX_NUMBER_OF_COMPONENTS];
  76. u32 Tqi[MAX_NUMBER_OF_COMPONENTS];
  77. } JpegEncFrameHeader;
  78. typedef struct JpegEncCommentHeader_t /* COM */
  79. {
  80. u32 comEnable;
  81. u32 Lc;
  82. u32 comLen;
  83. const u8 *pComment;
  84. } JpegEncCommentHeader;
  85. typedef struct JpegEncRestart_t /* DRI */
  86. {
  87. u32 Lr;
  88. u32 Ri;
  89. } JpegEncRestart;
  90. typedef struct JpegEncAppn_t /* APP0 */
  91. {
  92. u32 Lp;
  93. u32 ident1;
  94. u32 ident2;
  95. u32 ident3;
  96. u32 version;
  97. u32 units;
  98. u32 Xdensity;
  99. u32 Ydensity;
  100. /*u32 XThumbnail;*/
  101. /*u32 YThumbnail;*/
  102. /*u32 thumbMode;*/
  103. /*u32 rgb1;*/
  104. /*u32 rgb2;*/
  105. u32 thumbEnable;
  106. /*u32 thumbSize;*/
  107. /*u32 targetStart;*/
  108. /*u32 targetEnd;*/
  109. /*u8 *pStartOfOutput;*/
  110. /*u8 *pHor;*/
  111. /*u8 *pVer;*/
  112. /*u32 appExtLp;*/
  113. /*u32 appExtId1;*/
  114. /*u32 appExtId2;*/
  115. /*u32 appExtId3;*/
  116. /*u32 extCode;*/
  117. } JpegEncAppn_t;
  118. typedef struct
  119. {
  120. true_e header;
  121. JpegEncRestart restart; /* Restart Interval */
  122. i32 rstCount;
  123. JpegEncFrameHeader frame; /* Frame Header Data */
  124. JpegEncCommentHeader com; /* COM Header Data */
  125. JpegEncAppn_t appn; /* APPn Header Data */
  126. JpegEncQuantTables qTable;
  127. i32 markerType;
  128. i32 codingType; /* Whole or slice */
  129. i32 codingMode; /* 420 or 422 */
  130. i32 sliceNum; /* Number of current input slice */
  131. i32 sliceRows; /* Amount of MB rows in a slice */
  132. /*i32 rotation;*/ /* Rotation 0/-90*+90 */
  133. i32 width;
  134. i32 height;
  135. i32 mbNum;
  136. i32 mbPerFrame;
  137. i32 row;
  138. /*i32 column;*/
  139. /*i32 lastColumn;*/
  140. /*i32 dcAbove[6];*/
  141. /*i32 dcCurrent[6];*/
  142. /*i32 dc[6];*/ /* Macroblock DC */
  143. /*i32 rlcCount[6];*/ /* Block RLC count */
  144. /*const i16 *rlc[6];*/ /* RLC data for each block */
  145. u8 qTableLuma[64];
  146. u8 qTableChroma[64];
  147. u8 *streamStartAddress; /* output start address */
  148. JpegEncThumb thumbnail; /* thumbnail data */
  149. } jpegData_s;
  150. /*------------------------------------------------------------------------------
  151. 4. Function prototypes
  152. ------------------------------------------------------------------------------*/
  153. void EncJpegInit(jpegData_s * jpeg);
  154. u32 EncJpegHdr(stream_s * stream, jpegData_s * data);
  155. /*void EncJpegImageEnd(stream_s * stream, jpegData_s * data);*/
  156. /*void EncJpegImageEndReplaceRst(stream_s * stream, jpegData_s * data);*/
  157. #endif