nt9856x/code/lib/include/GxImageFile.h
2023-03-28 15:07:53 +08:00

217 lines
7.7 KiB
C
Executable File

/**
GxImageFile module.
For JPEG file encoding or decoding.
@file GxImageFile.h
@ingroup mIGxImageFile
Copyright Novatek Microelectronics Corp. 2012. All rights reserved.
*/
#ifndef _GX_IMAGEFILE_H_
#define _GX_IMAGEFILE_H_
#include "kwrap/type.h"
//#include "gximage/gximage.h"
#ifdef __cplusplus
extern "C" {
#endif
#if 0
/**
@addtogroup mIGxImageFile
*/
//@{
/**
@name Assign Q table.
*/
//@{
#define ASSIGN_QTABLE 0 ///< The parameter value for GxImgFile_EncodeByQuality().
//@}
/**
@name Recommended file buffer size for parsing.
*/
//@{
#define RECOMMENDED_PARSING_FILE_SIZE 0x10000 ///< Recommanded size is 64KB.
//@}
/**
Header information.
*/
typedef struct _GXIMG_HEADER_INFO {
UINT32 uiImageWidth; ///< [OUT]image width
UINT32 uiImageHeight; ///< [OUT]image height
UINT32 uiLineoffsetY; ///< [OUT]Y line offset after scaling
UINT32 uiLineoffsetUV; ///< [OUT]UV line offset after scaling
// GX_IMAGE_PIXEL_FMT fileformat; ///< [OUT]file format, refer to GX_IMAGE_PIXEL_FMT
UINT8 *pTagSOF; ///< [OUT]start addr of SOF (image-width, image-height, image-format)
void *param[4]; ///< [OUT]reserved(param[0] is Q-table addr Y, param[1] is Q-table addr UV)
} GXIMG_HEADER_INFO, *PGXIMG_HEADER_INFO;
/**
Scale down level.
*/
typedef enum _GXIMGDEC_SCALE_DOWN_LEVEL {
GXIMGDEC_SCALE_DOWN_NONE = 0, ///< no scaling
GXIMGDEC_SCALE_DOWN_BOTH_1_2, ///< 1/2 of width and 1/2 of height
GXIMGDEC_SCALE_DOWN_BOTH_1_4, ///< 1/4 of width and 1/4 of height
GXIMGDEC_SCALE_DOWN_BOTH_1_8, ///< 1/8 of width and 1/8 of height
ENUM_DUMMY4WORD(GXIMGDEC_SCALE_DOWN_LEVEL)
} GXIMGDEC_SCALE_DOWN_LEVEL;
/**
GxImageFile encoding configuration
*/
typedef enum _GX_IMGENC_CFG {
IMGENC_CFG_QTABLE_Y = 0, ///< Q table Y, only useful for GxImgFile_EncodeByQuality() with quality=ASSIGN_QTABLE.
IMGENC_CFG_QTABLE_UV, ///< Q table UV, Only useful for GxImgFile_EncodeByQuality() with quality=ASSIGN_QTABLE
IMGENC_CFG_BRC_INITIAL_QF, ///< initial QF value, 1 ~ 512, default is 128.
IMGENC_CFG_BRC_LOWER_BOUND_RATIO, ///< lower boundary ratio to target size, 1~100%, default is 15
IMGENC_CFG_BRC_UPPER_BOUND_RATIO, ///< upper boundary ratio to target size, 1~100%, default is 15
IMGENC_CFG_BRC_MAX_RETRY_CNT, ///< max re-try times, default is 5
ENUM_DUMMY4WORD(GX_IMGENC_CFG)
} GX_IMGENC_CFG;
/**
Parse image file to get respective JPEG information.
@param[in] uiWholeFileSize JPEG file size.
@param[in] pSrcFile Source file in buffer for parsing, recommended file size could refer to #RECOMMENDED_PARSING_FILE_SIZE.
@param[out] pThumbnanilData Thumbnail data information, the offset from the start of JPEG file and the size of thumbnail image.
@param[out] pPrimaryData Primary data information, the offset from the start of JPEG file and the size of primary image.
@param[out] pScreennailData Screennail data information, the offset from the start of JPEG file and the size of screennail image.
@return
- @b ER_OK: Succeed.
- @b ER_SYS: Failed.
*/
extern ER GxImgFile_ParseJPG(UINT32 uiWholeFileSize, PMEM_RANGE pSrcFile, PMEM_RANGE pThumbnanilData, PMEM_RANGE pPrimaryData, PMEM_RANGE pScreennailData);
/**
Parse JPEG data to get header information.
@param[in] pSrcFile Source file in buffer for parsing.
@param[out] pHeaderInfo Header information: #_GXIMG_HEADER_INFO.
@return
- @b ER_OK: Succeed.
- @b ER_SYS: Failed.
*/
extern ER GxImgFile_ParseHeader(PMEM_RANGE pSrcFile, PGXIMG_HEADER_INFO pHeaderInfo);
/**
Allocate buffer for decoding.
According to the available memory buffer to get proper decoding configuration.
@param[out] pDstImgBuf Image buffer for available memory size.
@param[in] pAvailableMem Available memory for decoding
@param[in] pHeaderInfo Header information, from the result of GxImgFile_ParseHeader()
@param[out] pScaleDownlevel Scale down level for decoding JPEG file into available memory.
@return
- @b ER_OK: Succeed.
- @b ER_SYS: Failed.
*/
extern ER GxImgFile_AllocDecBuf(PIMG_BUF pDstImgBuf, PMEM_RANGE pAvailableMem, PGXIMG_HEADER_INFO pHeaderInfo, GXIMGDEC_SCALE_DOWN_LEVEL *pScaleDownlevel);
/**
Decode JPEG data.
@param[in] pDstImgBuf Image buffer, from the result of GxImgFile_AllocDecBuf().
@param[in] pSrcBitstream Source file in buffer for parsing.
@return
- @b ER_OK: Succeed.
- @b ER_SYS: Failed.
*/
extern ER GxImgFile_Decode(PIMG_BUF pDstImgBuf, PMEM_RANGE pSrcBitstream);
/**
Decode JPEG data by down sampling.
@param[in] pDstImgBuf Image buffer, from the result of GxImgFile_AllocDecBuf().
@param[in] pSrcBitstream Source file in buffer for parsing.
@param[in] ScaleDownlevel Scale down level.
@return
- @b ER_OK: Succeed.
- @b ER_SYS: Failed.
*/
extern ER GxImgFile_DecodeByDownsample(PIMG_BUF pDstImgBuf, PMEM_RANGE pSrcBitstream, GXIMGDEC_SCALE_DOWN_LEVEL ScaleDownlevel); //support assign downsample level version
/**
Config decoding/encodeing parameters.
In order to change some default setting, one could uses this API.
@param[in] Item Item to config: #_GX_IMGENC_CFG.
@param[in] uiValue The value of the Item.
@return
- @b ER_OK: Succeed.
- @b ER_SYS: Failed.
*/
extern ER GxImgFile_Config(GX_IMGENC_CFG Item, UINT32 uiValue);
/**
Encode image to JPEG data by the mechanism of constant quality.
@param[in] pSrcImgBuf Image buffer for encoding.
@param[in,out] pDstBitstream [in]Available memory for JPEG data, [out]real output JPEG size.
@param[in] uiQuality Quality should be in the range of 1 to 100, and 100 is the best quality.
@return
- @b ER_OK: Succeed.
- @b ER_SYS: Failed.
*/
extern ER GxImgFile_EncodeByQuality(PIMG_BUF pSrcImgBuf, PMEM_RANGE pDstBitstream, UINT32 uiQuality);
/**
Calculate compression ratio.
@param[in] pSrcImgBuf Image buffer for encoding.
@param[in] uiTargetSize Target size.
@return Compression ratio, normalized to 100%
*/
extern UINT32 GxImgFile_CalcCompressedRatio(PIMG_BUF pSrcImgBuf, UINT32 uiTargetSize);
/**
Encode image to JPEG data by the mechanism of constant bit rate.
The default settings of bit rate control are the followings.\n
Initail QF = 128.\n
Lower boundary ratio = 15.\n
Upper boundary ratio = 15.\n
Max retried count = 5.
@param[in] pSrcImgBuf Image buffer for encoding.
@param[in,out] pDstBitstream [in]Available memory for JPEG data, [out]real output JPEG size.
@param[in] uiCompressedRatio compression ratio, normalized to 100%.
@return
- @b ER_OK: Succeed.
- @b ER_OBJ: Reach BRC limitation or retry count, the bitstream might be correct in BRC mode.
- @b ER_SYS: Failed.
*/
extern ER GxImgFile_EncodeByBitrate(PIMG_BUF pSrcImgBuf, PMEM_RANGE pDstBitstream, UINT32 uiCompressedRatio);
#endif
/**
Combine separated JPEG data, such as thumbnail, screennail, and primary, into a JPEG file
@note This API will mainly use primary data to joint the other JPEG data,\n
so user should reserve the exif data size prior to primary data, and the screennail size after primary data.
@param[in] pExifData JPEG exif header, including thumbnail bitstream.
@param[in] pPrimaryData Primary JPEG data.
@param[in] pScreennailData Screennail JPEG data.
@param[out] pDstJpgFile Combined JPEG file.
@return
- @b ER_OK: Succeed.
- @b ER_SYS: Failed.
*/
extern ER GxImgFile_CombineJPG(PMEM_RANGE pExifData, PMEM_RANGE pPrimaryData, PMEM_RANGE pScreennailData, PMEM_RANGE pDstJpgFile);
//@}
#ifdef __cplusplus
} //extern "C"
#endif
#endif //_GX_IMAGEFILE_H_