721 lines
30 KiB
C
Executable File
721 lines
30 KiB
C
Executable File
/**
|
|
Image operation module.
|
|
|
|
This module include the image operation like fill image,copy image, scale image, rotate image ...
|
|
|
|
@file gximage.h
|
|
@ingroup imgtrans
|
|
|
|
Copyright Novatek Microelectronics Corp. 2018. All rights reserved.
|
|
*/
|
|
#ifndef _GX_IMAGE_H_
|
|
#define _GX_IMAGE_H_
|
|
|
|
#include "kwrap/type.h"
|
|
#include "kflow_common/type_vdo.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
@addtogroup imgtrans
|
|
*/
|
|
|
|
/**
|
|
@name Lineoffset alignment pattern
|
|
*/
|
|
//@{
|
|
#define GXIMG_LINEOFFSET_PATTERN 0x80000000 ///< lineoffset base pattern
|
|
#define GXIMG_LINEOFFSET_ALIGN(n) (GXIMG_LINEOFFSET_PATTERN | (n)) ///< n bytes alignment lineoffset
|
|
//@}
|
|
|
|
/**
|
|
@name Image buffer pixel format for 650
|
|
*/
|
|
//@{
|
|
#define GXIMG_PIXEL_FMT_YUV422 GXIMG_PIXEL_FMT_YUV422_PACKED ///< for 650 paltform , YUV 422 means YUV 422 packed
|
|
#define GXIMG_PIXEL_FMT_YUV420 GXIMG_PIXEL_FMT_YUV420_PACKED ///< for 650 paltform , YUV 420 means YUV 420 packed
|
|
//@}
|
|
|
|
|
|
/**
|
|
@name Image buffer plane number maximum value
|
|
*/
|
|
//@{
|
|
#define GXIMG_MAX_PLANE_NUM 3 ///< 3 if for YUV planner
|
|
//@}
|
|
|
|
/**
|
|
@name Image region default value
|
|
*/
|
|
//@{
|
|
#define GXIMG_REGION_MATCH_IMG NULL ///< use in region w,h,x,y match pImgBuf
|
|
//@}
|
|
|
|
/**
|
|
macros to extra old IMG_BUF fields from VDO_FRAME.
|
|
*/
|
|
#define GXIMG_GET_SCALE_RATIO(vf) (&(((PVDO_COORD)(vf->reserved))->scale))
|
|
#define GXIMG_GET_VIRT_COORD(vf) (&(((PVDO_COORD)(vf->reserved))->coord))
|
|
#define GXIMG_GET_REAL_COORD_XY(vf) (&(((PVDO_COORD)(vf->reserved))->shift))
|
|
#define GXIMG_GET_REAL_COORD_WH(vf) (&(vf->size))
|
|
#define GXIMG_GET_META_DATA(vf) ((*MEM_RANGE)(&(vf->meta)))
|
|
|
|
/**
|
|
Structure of image cover description.
|
|
*/
|
|
typedef struct {
|
|
IPOINT top_left; ///< point 0 (left/top)
|
|
IPOINT top_right; ///< point 1 (right/top)
|
|
IPOINT bottom_right; ///< point 2 (right/bottom)
|
|
IPOINT bottom_left; ///< point 3 (left/bottom)
|
|
UINT32 yuva; ///< Alpha[31..24], V[23..16], U[15..8], Y[7..0], Please refer to COLOR_MAKE_YUVA macro
|
|
///< If this value is not zero, mosaic setting will be omitted
|
|
ISIZE mosaic_blk_size; ///< mosaic block size (only support 8*8, 16*16, 32*32, 64*64)
|
|
PVDO_FRAME p_mosaic_img; ///< mosaic image buffer
|
|
} GXIMG_COVER_DESC, *PGXIMG_COVER_DESC;
|
|
|
|
/**
|
|
Video Display layer ID.
|
|
*/
|
|
typedef enum _GXIMG_DISP_ID {
|
|
GXIMG_DISP_VIDEO1 = 1, ///< video 1
|
|
GXIMG_DISP_VIDEO2 = 2, ///< video 2
|
|
ENUM_DUMMY4WORD(GXIMG_DISP_ID)
|
|
} GXIMG_DISP_ID;
|
|
|
|
|
|
/**
|
|
Rotation Engine ID.
|
|
*/
|
|
typedef enum _GXIMG_RT_ENG {
|
|
GXIMG_ROTATE_ENG1 = 0, ///< Rotation Engine 1
|
|
GXIMG_ROTATE_ENG2 , ///< Rotation Engine 2
|
|
GXIMG_ROTATE_RESERVE, ///< Rotation Engine reserved
|
|
ENUM_DUMMY4WORD(GXIMG_RT_ENG)
|
|
} GXIMG_RT_ENG;
|
|
|
|
/**
|
|
Fill Engine ID.
|
|
*/
|
|
typedef enum _GXIMG_FILL_ENG {
|
|
GXIMG_FILL_ENG1 = 0, ///< Fill Engine 1
|
|
GXIMG_FILL_ENG2, ///< Fill Engine 2
|
|
ENUM_DUMMY4WORD(GXIMG_FILL_ENG)
|
|
} GXIMG_FILL_ENG;
|
|
|
|
|
|
/**
|
|
Copy Engine ID.
|
|
*/
|
|
typedef enum _GXIMG_CP_ENG {
|
|
GXIMG_CP_ENG1 = 0, ///< Copy Engine 1
|
|
GXIMG_CP_ENG2, ///< Copy Engine 2
|
|
GXIMG_CP_ENG_MAX, ///< Copy Engine MAX
|
|
GXIMG_CP_ENG_DFT = GXIMG_CP_ENG1, ///< Copy Engine Default
|
|
ENUM_DUMMY4WORD(GXIMG_CP_ENG)
|
|
} GXIMG_CP_ENG;
|
|
|
|
/**
|
|
Scale Engine ID.
|
|
*/
|
|
typedef enum _GXIMG_SC_ENG {
|
|
GXIMG_SC_ENG1 = 0, ///< Scale Engine 1
|
|
GXIMG_SC_ENG2, ///< Scale Engine 2
|
|
ENUM_DUMMY4WORD(GXIMG_SC_ENG)
|
|
} GXIMG_SC_ENG;
|
|
|
|
/**
|
|
Encode information.
|
|
|
|
*/
|
|
typedef struct _GXIMG_ENCODE_INFO {
|
|
PVDO_FRAME p_src_img; ///< the source raw image buffer
|
|
UINT32 out_buf_addr; ///< Out bitstream buffer starting address
|
|
UINT32 out_buf_size; ///< Out bitstream buffer size
|
|
void *param[4]; ///< param[0] is Q-table addr Y, param[1] is Q-table addr UV , param[2] & param[3] are reserved.
|
|
} GXIMG_ENCODE_INFO, *PGXIMG_ENCODE_INFO;
|
|
|
|
/**
|
|
Parameter ID.
|
|
|
|
*/
|
|
typedef enum _GXIMG_PARM_ID {
|
|
GXIMG_PARM_SCALE_METHOD = 0, ///< set scale method for scale function, the setting value please reference GXIMG_SCALE_METHOD.
|
|
GXIMG_PARM_FILTER_P2I = 1, ///< set IME scale filter for enable progressive to interlaced operation, the setting value is 1 or 0.
|
|
ENUM_DUMMY4WORD(GXIMG_PARM_ID)
|
|
} GXIMG_PARM_ID;
|
|
|
|
|
|
/**
|
|
Scale method.
|
|
|
|
Used when set parameter GXIMG_PARM_SCALE_METHOD. The default scale method for scale function is GXIMG_SCALE_AUTO.
|
|
|
|
*/
|
|
typedef enum _GXIMG_SCALE_METHOD {
|
|
GXIMG_SCALE_BICUBIC = 0, ///< bicubic interpolation
|
|
GXIMG_SCALE_BILINEAR, ///< bilinear interpolation
|
|
GXIMG_SCALE_NEAREST, ///< nearest interpolation
|
|
GXIMG_SCALE_INTEGRATION, ///< integration interpolation
|
|
GXIMG_SCALE_AUTO, ///< auto choose scale method above, this is the default value.
|
|
GXIMG_SCALE_MAX_ID, ///< total scale method numbers
|
|
ENUM_DUMMY4WORD(GXIMG_SCALE_METHOD)
|
|
} GXIMG_SCALE_METHOD;
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
// GxImage Basic
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
Calculate required buffer size.
|
|
|
|
User can firstly call this API to get required buffer size before calling gximg_init_buf().
|
|
|
|
@param[in] width: The image width.
|
|
@param[in] height: The image height.
|
|
@param[in] pxlfmt: The image pixel format.
|
|
@param[in] lineoff: The image pixel lineoffset. GXIMG_LINEOFFSET_ALIGN(n) means the lineoffset is the input image width align n.\n
|
|
0 means the lineoffset is input image width align 4.\n
|
|
@return required buffer size.
|
|
|
|
*/
|
|
extern UINT32 gximg_calc_require_size(UINT32 width, UINT32 height, VDO_PXLFMT pxlfmt, UINT32 lineoff);
|
|
|
|
extern UINT32 gximg_calc_require_size_h_align(UINT32 width, UINT32 height, UINT32 halign, VDO_PXLFMT pxlfmt, UINT32 lineoff);
|
|
|
|
|
|
/**
|
|
Init Image Buffer.
|
|
|
|
When user use this API to init buffer, it is assumed that for the Y UVpacked image, the width, lineoffset of Y & UV are the same.\n
|
|
And the Y UV data are put in sequence and continuous in the buffer address.
|
|
|
|
@param[out] p_img_buf: The image buffer.
|
|
@param[in] width: The image width.
|
|
@param[in] height: The image Height.
|
|
@param[in] pxlfmt: The image pixel format.
|
|
@param[in] lineoff: The image pixel lineoffset. GXIMG_LINEOFFSET_ALIGN(n) means the lineoffset is the input image width align n.\n
|
|
0 means the lineoffset is input image width align 4.\n
|
|
@param[in] addr: The image raw buffer address.
|
|
@param[in] available_size: The image raw buffer available size.
|
|
@return
|
|
- @b E_OK: Init Image buffer ok.
|
|
- @b E_SYS: Init Image buffer fail, input buffer size not enough.
|
|
- @b E_PAR: Init Image buffer fail, input parameter error.
|
|
|
|
Example:
|
|
@code
|
|
{
|
|
UINT32 uiPool,uiPoolSize;
|
|
ISIZE DeviceSize;
|
|
VDO_FRAME DispImg;
|
|
|
|
// Get display size
|
|
DeviceSize = GxVideo_GetDeviceSize(DOUT1);
|
|
// Init Display image buffer as pixel format 422
|
|
gximg_init_buf(&DispImg,DeviceSize.w,DeviceSize.h,VDO_PXLFMT_YUV422, GXIMG_LINEOFFSET_ALIGN(16),uiPool,uiPoolSize);
|
|
}
|
|
@endcode
|
|
*/
|
|
extern ER gximg_init_buf(PVDO_FRAME p_img_buf, UINT32 width, UINT32 height, VDO_PXLFMT pxlfmt, UINT32 lineoff, UINT32 addr, UINT32 available_size);
|
|
|
|
extern ER gximg_init_buf_h_align(PVDO_FRAME p_img_buf, UINT32 width, UINT32 height, UINT32 halign, VDO_PXLFMT pxlfmt, UINT32 lineoff, UINT32 addr, UINT32 available_size);
|
|
|
|
/**
|
|
Init Image Buffer extension API.
|
|
|
|
User can use this API when the Y UV data address & lineoffset is already known in other image buffer structure.
|
|
The Y UV data address may be not in sequence or continuous.
|
|
|
|
@param[out] p_img_buf: The image buffer.
|
|
@param[in] width: The image width.
|
|
@param[in] height: The image height.
|
|
@param[in] pxlfmt: The image pixel format.
|
|
@param[in] lineoff: The image pixel lineoffset of each plane.
|
|
@param[in] pxladdr: The image raw buffer address of each plane.
|
|
@return
|
|
- @b E_OK: Init Image buffer ok.
|
|
- @b E_PAR: Init Image buffer fail, input parameter error.
|
|
|
|
Example:
|
|
@code
|
|
{
|
|
uiLineOffset[0] = StampBuffer.uiYLineOffset;
|
|
uiLineOffset[1] = StampBuffer.uiUVLineOffset;
|
|
uiPxlAddr[0] = StampBuffer.uiYAddr;
|
|
uiPxlAddr[1] = StampBuffer.uiUAddr;
|
|
gximg_init_buf_ex(&SrcImg, uiWidth, uiStampDataHeight,VDO_PXLFMT_YUV420, uiLineOffset, uiPxlAddr);
|
|
}
|
|
@endcode
|
|
*/
|
|
extern ER gximg_init_buf_ex(PVDO_FRAME p_img_buf, UINT32 width, UINT32 height, VDO_PXLFMT pxlfmt, UINT32 lineoff[GXIMG_MAX_PLANE_NUM], UINT32 pxladdr[GXIMG_MAX_PLANE_NUM]);
|
|
|
|
/**
|
|
Get image buffer start & End address.
|
|
|
|
User can use this API to get start & end address when the image buffer is initialized by gximg_init_buf(),\n.
|
|
because the Y UV data is in sequence & continuous.
|
|
User can't use this API to get start & end address when the image buffer is initialized by gximg_init_buf_ex(),\n
|
|
because the Y UV data may be not in sequence or continuous.
|
|
|
|
@param[in] p_img_buf: The image buffer.
|
|
@param[out] p_start_addr: The image buffer start address.
|
|
@param[out] p_end_addr: The image buffer end address.
|
|
@return
|
|
- @b TRUE: Get buffer address ok.
|
|
- @b FALSE: Get buffer address fail, input parameter error.
|
|
|
|
*/
|
|
extern ER gximg_get_buf_addr(PVDO_FRAME p_img_buf, UINT32 *p_start_addr, UINT32 *p_end_addr);
|
|
|
|
//------------------------------------------------------------------------------
|
|
// GxImage Process
|
|
//------------------------------------------------------------------------------
|
|
|
|
|
|
/**
|
|
Fill image buffer with specific YCbCr/rgb565/argb1555/argb4444 color.
|
|
|
|
@param[in] p_dst_img: The image buffer.
|
|
@param[in] p_dst_region: Fill region of image buffer. GXIMG_REGION_MATCH_IMG means the region matches image buffer.
|
|
@param[in] color : for yuv image, it's ycbcr: The fill color value, format is 0x00CrCbYY.
|
|
for (a)rgb image, it's (a)rgb
|
|
@return
|
|
- @b E_OK: Fill color success.
|
|
- @b E_PAR: Input parameter error.
|
|
*/
|
|
extern ER gximg_fill_data(PVDO_FRAME p_dst_img, IRECT *p_dst_region, UINT32 color);
|
|
|
|
extern ER gximg_fill_data_no_flush(PVDO_FRAME p_dst_img, IRECT *p_dst_region, UINT32 color);
|
|
|
|
/**
|
|
Fill image buffer with specific YCbCr/rgb565/argb1555/argb4444 color.
|
|
|
|
@param[in] p_dst_img: The image buffer.
|
|
@param[in] p_dst_region: Fill region of image buffer. GXIMG_REGION_MATCH_IMG means the region matches image buffer.
|
|
@param[in] color : for yuv image, it's ycbcr: The fill color value, format is 0x00CrCbYY.
|
|
for (a)rgb image, it's (a)rgb
|
|
@param[in] engine: The fill data engine.
|
|
@return
|
|
- @b E_OK: Fill color success.
|
|
- @b E_PAR: Input parameter error.
|
|
*/
|
|
extern ER gximg_fill_data_ex(PVDO_FRAME p_dst_img, IRECT *p_dst_region, UINT32 color, GXIMG_FILL_ENG engine);
|
|
|
|
/**
|
|
Copy image data.
|
|
|
|
Copy image data of specific region from source buffer to specific location of destionation buff.
|
|
|
|
@note Naturely, the source region should not over the range of source image. So if the input soucre region is over the source image.\n
|
|
This fuction will auto calculate clipped rectangle for copying. The region has limitation of minimum width value is 2, height value is 2.
|
|
|
|
@param[in] p_src_img: The source image buffer.
|
|
@param[in] p_src_region: The source buffer region for copying. GXIMG_REGION_MATCH_IMG means the region matches source image buffer.
|
|
@param[in] p_dst_img: The destionation image buffer.
|
|
@param[in] p_dst_location: The destionation image buffer location to copy to.
|
|
@return
|
|
- @b E_OK: Copy data success.
|
|
- @b E_PAR: Input parameter error.
|
|
*/
|
|
extern ER gximg_copy_data(PVDO_FRAME p_src_img, IRECT *p_src_region, PVDO_FRAME p_dst_img, IPOINT *p_dst_location, GXIMG_CP_ENG engine);
|
|
|
|
extern ER gximg_copy_data_no_flush(PVDO_FRAME p_src_img, IRECT *p_src_region, PVDO_FRAME p_dst_img, IPOINT *p_dst_location, GXIMG_CP_ENG engine);
|
|
|
|
/**
|
|
Copy image data.
|
|
|
|
Copy image data of specific region from source buffer to specific location of destionation buff.
|
|
|
|
@note Naturely, the source region should not over the range of source image. So if the input soucre region is over the source image.\n
|
|
This fuction will auto calculate clipped rectangle for copying. The region has limitation of minimum width value is 2, height value is 2.
|
|
|
|
@param[in] p_src_img: The source image buffer.
|
|
@param[in] p_src_region: The source buffer region for copying. GXIMG_REGION_MATCH_IMG means the region matches source image buffer.
|
|
@param[in] p_dst_img: The destionation image buffer.
|
|
@param[in] p_dst_location: The destionation image buffer location to copy to.
|
|
@param[in] engine: The copy data engine.
|
|
@return
|
|
- @b E_OK: Copy data success.
|
|
- @b E_PAR: Input parameter error.
|
|
*/
|
|
extern ER gximg_copy_data_ex(PVDO_FRAME p_src_img, IRECT *p_src_region, PVDO_FRAME p_dst_img, IPOINT *p_dst_location, GXIMG_CP_ENG engine);
|
|
|
|
/**
|
|
Copy image data with colorkey effect.
|
|
|
|
This API will do the color key (=) copy effect. \n
|
|
A: is source image. B: is key image. It means if (B == colorkey) ? A:B -> destination buffer.
|
|
|
|
@param[in] p_src_img: The source image buffer.
|
|
@param[in] p_copy_region: The buffer region for copying. GXIMG_REGION_MATCH_IMG means the region matches source image buffer.
|
|
@param[in] p_key_img: The color key image buffer.
|
|
@param[in] p_key_location: The key image buffer location to copy to.
|
|
@param[in] color_key: The color key (0x00VVUUYY).
|
|
@param[in] is_copy_to_key_img: If the destination buffer is p_key_img, else the destination buffer will be p_src_img.
|
|
@param[in] engine: The copy data engine.
|
|
@return
|
|
- @b E_OK: Copy data success.
|
|
- @b E_PAR: Input parameter error.
|
|
*/
|
|
extern ER gximg_copy_color_key_data(PVDO_FRAME p_src_img, IRECT *p_copy_region, PVDO_FRAME p_key_img, IPOINT *p_key_location, UINT32 color_key, BOOL is_copy_to_key_img, GXIMG_CP_ENG engine);
|
|
|
|
/**
|
|
Copy image data with alpha blending effect.
|
|
|
|
This API will do the alpha blending effect. \n
|
|
A: is source image. B: is destion image. The copy blending weight is (alpha/256)*A + ((256-alpha)/256)*B.
|
|
|
|
@param[in] p_src_img: The source image buffer.
|
|
@param[in] p_src_region: The source buffer region for copying. GXIMG_REGION_MATCH_IMG means the region matches source image buffer.
|
|
@param[in] p_dst_img: The destionation image buffer.
|
|
@param[in] p_dst_location: The destionation image buffer location to copy to.
|
|
@param[in] alpha: The alpha blending value, range is from 0 ~ 256, all the image use the same constant alpha.
|
|
@param[in] engine: The copy data engine.
|
|
@return
|
|
- @b E_OK: Copy data success.
|
|
- @b E_PAR: Input parameter error.
|
|
*/
|
|
extern ER gximg_copy_blend_data(PVDO_FRAME p_src_img, IRECT *p_src_region, PVDO_FRAME p_dst_img, IPOINT *p_dst_location, UINT32 alpha, GXIMG_CP_ENG engine);
|
|
|
|
extern ER gximg_copy_blend_data_no_flush(PVDO_FRAME p_src_img, IRECT *p_src_region, PVDO_FRAME p_dst_img, IPOINT *p_dst_location, UINT32 alpha, GXIMG_CP_ENG engine);
|
|
|
|
/**
|
|
Copy image data with alpha blending effect.
|
|
|
|
This API will do the alpha blending effect. \n
|
|
A: is source image. B: is alpha plane. C: is destion image. The copy blending weight is (B/256)*A + ((256-B)/256)*C.
|
|
|
|
@param[in] p_src_img: The source image buffer.
|
|
@param[in] p_src_region: The source buffer region for copying. GXIMG_REGION_MATCH_IMG means the region matches source image buffer.
|
|
@param[in] p_dst_img: The destionation image buffer.
|
|
@param[in] p_dst_location: The destionation image buffer location to copy to.
|
|
@param[in] p_alpha_plane: The alpha plane. The width, height and lineoffset is the same with source image.
|
|
@return
|
|
- @b E_OK: Copy data success.
|
|
- @b E_PAR: Input parameter error.
|
|
*/
|
|
extern ER gximg_copy_blend_data_ex(PVDO_FRAME p_src_img, IRECT *p_src_region, PVDO_FRAME p_dst_img, IPOINT *p_dst_location, UINT8 *p_alpha_plane);
|
|
|
|
extern ER gximg_copy_blend_data_ex_no_flush(PVDO_FRAME p_src_img, IRECT *p_src_region, PVDO_FRAME p_dst_img, IPOINT *p_dst_location, UINT8 *p_alpha_plane);
|
|
|
|
/**
|
|
Set parameter of GxIamge.
|
|
|
|
@param[in] parm_id: The parameter ID.
|
|
@param[in] value: The parameter value.
|
|
@return
|
|
- @b E_OK: Setting success.
|
|
- @b E_PAR: Input parameter error.
|
|
*/
|
|
extern ER gximg_set_parm(GXIMG_PARM_ID parm_id, UINT32 value);
|
|
|
|
/**
|
|
Get parameter of GxIamge.
|
|
|
|
@param[in] parm_id: The parameter ID.
|
|
@return
|
|
- @b The parameter value
|
|
*/
|
|
extern UINT32 gximg_get_parm(GXIMG_PARM_ID parm_id);
|
|
|
|
/**
|
|
Scaling up/down image data.
|
|
|
|
This API will scale up/down image data, the max scale up/down factor is 16.\n
|
|
This API have no start address word alignment limitation or width/height word alignment limitation.\n
|
|
The scaling method supports all that defined in GXIMG_SCALE_METHOD.
|
|
|
|
@note If the scaling up/down factor over the HW limitation, it will auto change to FW scaling.
|
|
|
|
@param[in] p_src_img: The source image buffer.
|
|
@param[in] p_src_region: The source buffer region for scaling. GXIMG_REGION_MATCH_IMG means the region matches source image buffer.
|
|
@param[in] p_dst_img: The destionation image buffer.
|
|
@param[in] p_dst_region: The destionation image buffer region to scaling to. GXIMG_REGION_MATCH_IMG means the region matches destionation image buffer.
|
|
@return
|
|
- @b E_OK: Scaling data success.
|
|
- @b E_PAR: Input parameter error.
|
|
*/
|
|
extern ER gximg_scale_data(PVDO_FRAME p_src_img, IRECT *p_src_region, PVDO_FRAME p_dst_img, IRECT *p_dst_region, GXIMG_SCALE_METHOD method);
|
|
|
|
extern ER gximg_scale_data_no_flush(PVDO_FRAME p_src_img, IRECT *p_src_region, PVDO_FRAME p_dst_img, IRECT *p_dst_region, GXIMG_SCALE_METHOD method);
|
|
|
|
/**
|
|
Scaling up/down image data.
|
|
|
|
This API will scale up/down image data, the max scale up/down factor is 16.\n
|
|
This API have no start address word alignment limitation or width/height word alignment limitation.\n
|
|
The scaling method supports all that defined in GXIMG_SCALE_METHOD.
|
|
|
|
@note If the scaling up/down factor over the HW limitation, it will auto change to FW scaling.
|
|
|
|
@param[in] p_src_img: The source image buffer.
|
|
@param[in] p_src_region: The source buffer region for scaling. GXIMG_REGION_MATCH_IMG means the region matches source image buffer.
|
|
@param[in] p_dst_img: The destionation image buffer.
|
|
@param[in] p_dst_region: The destionation image buffer region to scaling to. GXIMG_REGION_MATCH_IMG means the region matches destionation image buffer.
|
|
@param[in] engine: The scale data engine.
|
|
@return
|
|
- @b E_OK: Scaling data success.
|
|
- @b E_PAR: Input parameter error.
|
|
*/
|
|
extern ER gximg_scale_data_ex(PVDO_FRAME p_src_img, IRECT *p_src_region, PVDO_FRAME p_dst_img, IRECT *p_dst_region, GXIMG_SC_ENG engine, GXIMG_SCALE_METHOD method);
|
|
|
|
/**
|
|
Scaling up/down image data with high quality.
|
|
|
|
This API will scale up/down image data, the max scale up factor is 32, the max scale down factor is 16.\n
|
|
This API have start address word alignment limitation & width/height word alignment limitation.\n
|
|
The scaling method supports all that defined in GXIMG_SCALE_METHOD.
|
|
|
|
@note If the scaling up/down factor over the HW limitation, or the address alignment not meet the HW limitation,\n
|
|
it wll auto change to FW scaling.
|
|
|
|
@param[in] p_src_img: The source image buffer.
|
|
@param[in] p_src_region: The source buffer region for scaling.GXIMG_REGION_MATCH_IMG means the region matches source image buffer.
|
|
@param[in] p_dst_img: The destionation image buffer.
|
|
@param[in] p_dst_region: The destionation image buffer region to scaling to. GXIMG_REGION_MATCH_IMG means the region matches destionation image buffer.
|
|
@return
|
|
- @b E_OK: Scale data success.
|
|
- @b E_PAR: Input parameter error.
|
|
*/
|
|
extern ER gximg_scale_data_fine(PVDO_FRAME p_src_img, IRECT *p_src_region, PVDO_FRAME p_dst_img, IRECT *p_dst_region);
|
|
|
|
|
|
/**
|
|
Scaling down Y image data only.
|
|
|
|
This API will scale down Y image data only, The scaling method is bilinear.
|
|
|
|
@note If the scaling up/down factor over the HW limitation, or the address alignment not meet the HW limitation,\n
|
|
it wll auto change to FW scaling.
|
|
|
|
@param[in] p_src_img: The source image buffer.
|
|
@param[in] p_src_region: The source buffer region for scaling.GXIMG_REGION_MATCH_IMG means the region matches source image buffer.
|
|
@param[in] p_dst_img: The destionation image buffer.
|
|
@param[in] p_dst_region: The destionation image buffer region to scaling to. GXIMG_REGION_MATCH_IMG means the region matches destionation image buffer.
|
|
@return
|
|
- @b E_OK: Scale data success.
|
|
- @b E_PAR: Input parameter error.
|
|
*/
|
|
extern ER gximg_scale_data_down_y_only(PVDO_FRAME p_src_img, IRECT *p_src_region, PVDO_FRAME p_dst_img, IRECT *p_dst_region);
|
|
|
|
|
|
/**
|
|
Rotate image data.
|
|
|
|
This API will rotate a image data and put the rotated image to dstBuff, the rotated image info will be put in p_out_img_buf.\n
|
|
The needed destination buffer size is align16(w)*align8(h)*3/2;
|
|
|
|
@note If the source image is 422 format, the roated image will be translated to 420 format, because the rotate operation need 420 foramt.
|
|
|
|
@param[in] p_img_buf: The source image buffer.
|
|
@param[in] dst_buff: The destination buffer for putting rotated image.
|
|
@param[in] dst_buf_size: The destionation buffer size.
|
|
@param[in] rotate_dir: The rotation direction.
|
|
@param[out] p_out_img_buf: The rotated image buffer.
|
|
@return
|
|
- @b E_OK: Rotate data success.
|
|
- @b E_PAR: Input parameter error or destination buffer too small.
|
|
*/
|
|
extern ER gximg_rotate_data(PVDO_FRAME p_img_buf, UINT32 dst_buff, UINT32 dst_buf_size, UINT32 rotate_dir, PVDO_FRAME p_out_img_buf);
|
|
|
|
extern ER gximg_rotate_data_no_flush(PVDO_FRAME p_img_buf, UINT32 dst_buff, UINT32 dst_buf_size, UINT32 rotate_dir, PVDO_FRAME p_out_img_buf);
|
|
|
|
/**
|
|
Rotate image data with specific rotation engine.
|
|
|
|
This API will rotate a image data and put the rotated image to dstBuff, the rotated image info will be put in p_out_img_buf.\n
|
|
The needed destination buffer size is align16(w)*align8(h)*3/2;
|
|
|
|
@note If the source image is 422 format, the roated image will be translated to 420 format, because the rotate operation need 420 foramt.
|
|
|
|
@param[in] p_img_buf: The source image buffer.
|
|
@param[in] dst_buff: The destination buffer for putting rotated image.
|
|
@param[in] dst_buf_size: The destionation buffer size.
|
|
@param[in] rotate_dir: The rotation direction.
|
|
@param[out] p_out_img_buf: The rotated image buffer.
|
|
@param[in] engine: The rotation engine.
|
|
@return
|
|
- @b E_OK: Rotate data success.
|
|
- @b E_PAR: Input parameter error or destination buffer too small.
|
|
*/
|
|
extern ER gximg_rotate_data_ex(PVDO_FRAME p_img_buf, UINT32 dst_buff, UINT32 dst_buf_size, UINT32 rotate_dir, PVDO_FRAME p_out_img_buf, GXIMG_RT_ENG engine);
|
|
|
|
|
|
/**
|
|
Rotate image data with specific source region to specific postion of destination image.
|
|
|
|
@note The source image & destination image should be 420 format, because the rotate operation need 420 foramt.
|
|
|
|
@param[in] p_src_img: The source image buffer.
|
|
@param[in] p_src_region: The source buffer region for scaling.GXIMG_REGION_MATCH_IMG means the region matches source image buffer.
|
|
@param[in] p_dst_img: The destionation image buffer.
|
|
@param[in] p_dst_location: The destionation image buffer location to rotate to.
|
|
@param[in] rotate_dir: The rotation direction.
|
|
@param[in] engine: The rotation engine.
|
|
@return
|
|
- @b E_OK: Rotate data success.
|
|
- @b E_PAR: Input parameter error or destination buffer too small.
|
|
*/
|
|
extern ER gximg_rotate_paste_data(PVDO_FRAME p_src_img, IRECT *p_src_region, PVDO_FRAME p_dst_img, IPOINT *p_dst_location, UINT32 rotate_dir, GXIMG_RT_ENG engine);
|
|
|
|
extern ER gximg_rotate_paste_data_no_flush(PVDO_FRAME p_src_img, IRECT *p_src_region, PVDO_FRAME p_dst_img, IPOINT *p_dst_location, UINT32 rotate_dir, GXIMG_RT_ENG engine);
|
|
|
|
/**
|
|
Self rotate image data.
|
|
|
|
This API will rotate a image data and put the rotated image to original image buffer address.\n
|
|
So the rotated image buffer size should not over the original image buffer size.
|
|
|
|
@note If the source image is 422 format, the roated image will be translated to 420 format, because the rotate operation need 420 foramt.
|
|
|
|
@param[in,out] p_img_buf: The image buffer.
|
|
@param[in] tmp_buff: The temp buffer for roate operaion.
|
|
@param[in] tmp_buf_size: The temp buffer size (need about dstLineoff * dstHeight).
|
|
@param[in] rotate_dir: The rotation direction.
|
|
@return
|
|
- @b E_OK: Rotate data success.
|
|
- @b E_PAR: Input parameter error or temp buffer too small.
|
|
*/
|
|
extern ER gximg_self_rotate(PVDO_FRAME p_img_buf, UINT32 tmp_buff, UINT32 tmp_buf_size, UINT32 rotate_dir);
|
|
|
|
/**
|
|
Color Transform between YUV and RGB.
|
|
|
|
This API support the color transform of 4 cases.
|
|
1. YUV 420 packed/planar -> RGB888 planar
|
|
2. RGB888 planar -> YUV packed
|
|
3. ARGB888 packed -> YUV packed (need tmpBuff W*ALIGN_8(H)*7)
|
|
4. YUV 420 planar -> YUV 420 packed
|
|
|
|
@param[in] p_src_img: The source image buffer.
|
|
@param[in] p_dst_img: The destionation image buffer.
|
|
@param[in] tmp_buff: The temp buffer for color transform.
|
|
@param[in] tmp_buf_size: The temp buffer size.
|
|
|
|
|
|
*/
|
|
extern ER gximg_color_transform(PVDO_FRAME p_src_img, PVDO_FRAME p_dst_img, UINT32 tmp_buff, UINT32 tmp_buf_size);
|
|
|
|
/**
|
|
Transform a Gray(8bits-Y) image to YUV packed.
|
|
|
|
@param[in] p_src_img: The source image buffer.
|
|
@param[in] p_dst_img: The destionation image buffer.
|
|
@param[in] lookup_table: The color transform lookup table.
|
|
|
|
*/
|
|
extern ER gximg_gray_to_yuv(PVDO_FRAME p_src_img, PVDO_FRAME p_dst_img, UINT32 lookup_table[GXIMG_MAX_PLANE_NUM]);
|
|
|
|
/**
|
|
Transform ARGB to YUV with alpha value by graphic engine.
|
|
|
|
Supported input formats: \n
|
|
GXIMG_PXLFMT_ARGB1555 (Alpha0: uiAlpha[3..0], Alpha1: uiAlpha[7..4])
|
|
GXIMG_PXLFMT_ARGB4444
|
|
GXIMG_PXLFMT_RGB565 (Alpha: uiAlpha)
|
|
|
|
@param[in] p_src_img: The source image buffer.
|
|
@param[in] p_src_region: The source buffer region for copying. GXIMG_REGION_MATCH_IMG means the region matches source image buffer.
|
|
@param[in] p_dst_img: The destionation image buffer.
|
|
@param[in] p_dst_location: The destionation image buffer location.
|
|
@param[in] alpha: The alpha blending value.
|
|
@return
|
|
- @b E_OK: Operation success.
|
|
- @b E_PAR: Input parameter error.
|
|
- @b E_SYS: HW engine or system error
|
|
*/
|
|
extern ER gximg_argb_to_yuv_blend(PVDO_FRAME p_src_img, IRECT *p_src_region, PVDO_FRAME p_dst_img, IPOINT *p_dst_location, UINT32 alpha, void *palette);
|
|
|
|
extern ER gximg_argb_to_yuv_blend_no_flush(PVDO_FRAME p_src_img, IRECT *p_src_region, PVDO_FRAME p_dst_img, IPOINT *p_dst_location, UINT32 alpha, void *palette);
|
|
|
|
/**
|
|
Transform RGB to YUV with colorkey and alpha by graphic engine.
|
|
|
|
Supported input formats: \n
|
|
GXIMG_PXLFMT_RGB565
|
|
|
|
@param[in] p_src_img: The source image buffer.
|
|
@param[in] p_src_region: The source buffer region for copying. GXIMG_REGION_MATCH_IMG means the region matches source image buffer.
|
|
@param[in] p_dst_img: The destionation image buffer.
|
|
@param[in] p_dst_location: The destionation image buffer location.
|
|
@param[in] alpha: The alpha blending value. (Applied only when the Src pixel is not ColorKey)
|
|
@param[in] color_key: The RGB color key. (0x00RRGGBB)
|
|
@return
|
|
- @b E_OK: Operation success.
|
|
- @b E_PAR: Input parameter error.
|
|
- @b E_SYS: HW engine or system error
|
|
*/
|
|
extern ER gximg_rgb_to_yuv_color_key(PVDO_FRAME p_src_img, IRECT *p_src_region, PVDO_FRAME p_dst_img, IPOINT *p_dst_location, UINT32 alpha, UINT32 color_key);
|
|
|
|
/**
|
|
Set a convex quadrilateral cover to the image.
|
|
|
|
Supported input formats: \n
|
|
GXIMG_PXLFMT_YUV422_PLANAR
|
|
GXIMG_PXLFMT_YUV420_PLANAR
|
|
GXIMG_PXLFMT_YUV422
|
|
GXIMG_PXLFMT_YUV420
|
|
GXIMG_PXLFMT_Y8
|
|
|
|
@note The size of pMosaicImg is limited to SrcW/BlkSize and SrcH/BlkSize
|
|
|
|
@param[in] p_cover: The image cover description.
|
|
@param[in] p_dst_img: The destionation image buffer.
|
|
@param[in] p_dst_region: The destionation image region to cover.
|
|
@return
|
|
- @b E_OK: Operation success.
|
|
- @b E_PAR: Input parameter error.
|
|
- @b E_SYS: HW engine or system error
|
|
*/
|
|
extern ER gximg_quad_cover(GXIMG_COVER_DESC *p_cover, PVDO_FRAME p_dst_img, IRECT *p_dst_region, UINT32 hollow, UINT32 thickness);
|
|
|
|
extern ER gximg_quad_cover_no_flush(GXIMG_COVER_DESC *p_cover, PVDO_FRAME p_dst_img, IRECT *p_dst_region, UINT32 hollow, UINT32 thickness);
|
|
|
|
extern ER gximg_quad_cover_with_flush(GXIMG_COVER_DESC *p_cover, PVDO_FRAME p_dst_img, IRECT *p_dst_region, UINT32 hollow, UINT32 thickness, int no_flush);
|
|
//------------------------------------------------------------------------------
|
|
// GxImage Virtual coordinate
|
|
//------------------------------------------------------------------------------
|
|
/**
|
|
Set virtual coordinate for one image buffer.
|
|
|
|
When user set the virtual coordinate rectangle differ with real coordinate rectangle.\n
|
|
The image buffer will work in the virtual coordinate view.
|
|
|
|
@param[in] p_img_buf: The image buffer.
|
|
@param[in] p_virt_coord: The virtual coordinate rectangle.
|
|
@param[in] p_real_coord: The real coordinate rectangle. NULL means pRealCoord = image buff rectangle.
|
|
@return
|
|
- @b E_OK: Set ok.
|
|
- @b E_PAR: Input parameter error.
|
|
*/
|
|
extern ER gximg_set_coord(PVDO_FRAME p_img_buf, IRECT *p_virt_coord, IRECT *p_real_coord);
|
|
|
|
/**
|
|
Get virtual coordinate of one image buffer.
|
|
|
|
@param[in] p_img_buf: The image buffer.
|
|
@return the virtual coordinate rectangle value.
|
|
|
|
*/
|
|
extern IRECT gximg_get_virtual_coord(PVDO_FRAME p_img_buf);
|
|
|
|
/**
|
|
Get real coordinate of one image buffer.
|
|
|
|
@param[in] p_img_buf: The image buffer.
|
|
@return the real coordinate rectangle value.
|
|
|
|
*/
|
|
extern IRECT gximg_get_real_coord(PVDO_FRAME p_img_buf);
|
|
|
|
extern ER gximg_raw_graphic(UINT32 engine, void *p_request);
|
|
|
|
#ifdef __cplusplus
|
|
} //extern "C"
|
|
#endif
|
|
|
|
#endif //_GX_IMAGE_H_
|