247 lines
9.2 KiB
C
Executable File
247 lines
9.2 KiB
C
Executable File
/**
|
|
DC and its related utility.
|
|
|
|
DC and its related utility.
|
|
|
|
@file GxDC.h
|
|
@ingroup mIGxgfx
|
|
@note Nothing
|
|
|
|
DC : Drawing Canvas object, a bitmap use as a drawing target/source
|
|
|
|
Copyright Novatek Microelectronics Corp. 2012. All rights reserved.
|
|
*/
|
|
|
|
/*
|
|
Ex:
|
|
LAYER : Display layer, display a DC to specified window on screen
|
|
Get DC from LAYER:
|
|
pDC = DISPLAY_BeginDraw(uiLayerID);
|
|
DISPLAY_EndDraw(uiLayerID, pDC);
|
|
|
|
BITMAP : Image with Bitmap type object, contain memory for bitmap image (WORD align)
|
|
Get DC from BITMAP:
|
|
pDC = BITMAP_GetDC(pBm);
|
|
BITMAP_ReleaseDC(pBm, pDC);
|
|
|
|
ICON : Image with Icon type object, contain memory for icon image (bit-compacted)
|
|
Get DC from ICON:
|
|
ICON_MakeDC(&dc, pIconDB, uiIconID);
|
|
|
|
JPEG : Image with Jpeg stream type object, contain memory for jpeg stream image (only for Blt)
|
|
Get DC from JPEG:
|
|
JPEG_MakeDC(&dc, pJpegStream, uiJpegStreamSize);
|
|
*/
|
|
|
|
#ifndef _GX_DC_H_
|
|
#define _GX_DC_H_
|
|
|
|
#include "GxGfx/GxGfx.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
@addtogroup mIGxgfx
|
|
*/
|
|
//@{
|
|
|
|
|
|
//--------------------------------------------------------------------------------------
|
|
// type - DC
|
|
//--------------------------------------------------------------------------------------
|
|
/**
|
|
DC reserved size for cast to internal data structure
|
|
*/
|
|
#define DC_RESERVE_DWORD (28-8+16+16)
|
|
|
|
/**
|
|
DC : Drawing Canvas object.
|
|
|
|
DC : Drawing Canvas object, a bitmap use as a drawing target/source
|
|
@note Nothing.
|
|
*/
|
|
typedef struct _DC {
|
|
UINT32 uiFlag; ///< Status flag
|
|
UINT16 uiType; ///< Type (ex: TYPE_XXX)
|
|
UINT16 uiPxlfmt; ///< Pixel format (ex: PXLFMT_XXX)
|
|
ISIZE size; ///< Size (w,h in pixel)
|
|
IRECT winRect; ///< Cropping window (x,y,w,h in pixels)
|
|
IPOINT origPt; ///< Original point (x,y in pixel)
|
|
IPOINT lastPt; ///< Last brush point (x,y in pixel)
|
|
IPOINT thisPt; ///< Current brush point (x,y in pixel)
|
|
UINT32 uiReserved[DC_RESERVE_DWORD]; ///< Reserved data
|
|
}
|
|
DC, *PDC;
|
|
|
|
|
|
//--------------------------------------------------------------------------------------
|
|
// enum - DC type
|
|
//--------------------------------------------------------------------------------------
|
|
/**
|
|
@name Type of DC
|
|
*/
|
|
//@{
|
|
#define TYPE_NULL 0x00 ///< state = invalid
|
|
#define TYPE_FB 0x01 ///< state = bitmap with pitch is 4 byes alignment
|
|
#define TYPE_BITMAP 0x02 ///< state = bitmap with pitch is 4 byes alignment
|
|
#define TYPE_ICON 0x03 ///< state = bitmap with compact bits
|
|
#define TYPE_JPEG 0x04 ///< state = JPEG compressed bit stream
|
|
//@}
|
|
|
|
//--------------------------------------------------------------------------------------
|
|
// enum - DC fomat
|
|
//--------------------------------------------------------------------------------------
|
|
/**
|
|
@name Plane name of different format buffer
|
|
*/
|
|
//@{
|
|
#define PLANE_Y 0x00 ///< state = Support format: PXLFMT_YUV444, PXLFMT_YUV422, PXLFMT_YUV420
|
|
#define PLANE_U 0x01 ///< state = Support format: PXLFMT_YUV444, PXLFMT_YUV422, PXLFMT_YUV420
|
|
#define PLANE_V 0x02 ///< state = Support format: PXLFMT_YUV444, PXLFMT_YUV422, PXLFMT_YUV420
|
|
#define PLANE_R 0x00 ///< state = Support format: PXLFMT_RGB888
|
|
#define PLANE_G 0x01 ///< state = Support format: PXLFMT_RGB888
|
|
#define PLANE_B 0x02 ///< state = Support format: PXLFMT_RGB888
|
|
#define PLANE_RGB 0x03 ///< state = Support format: PXLFMT_RGB888_PK
|
|
#define PLANE_RGB565 0x00 ///< state = Support format: PXLFMT_RGB565_PK, PXLFMT_RGBA5658_PK, PXLFMT_RGBA5654_PK
|
|
#define PLANE_IDX 0x03 ///< state = Support format: PXLFMT_INDEX1, PXLFMT_INDEX2, PXLFMT_INDEX4, PXLFMT_INDEX8
|
|
//@}
|
|
|
|
/**
|
|
@name Pixel format of DC
|
|
*/
|
|
//@{
|
|
#define PXLFMT_PMODE 0xf0 ///< state = YUV, not RGB
|
|
#define PXLFMT_P1_IDX 0x00 ///< state = 1 color plane, index
|
|
#define PXLFMT_P1_PK 0x10 ///< state = 1 color plane (8888 packed)
|
|
#define PXLFMT_P1_PK2 0x20 ///< state = 2 color plane (565 packed)
|
|
#define PXLFMT_P1_PK3 0x30 ///< state = 1 color plane (4444 packed)
|
|
#define PXLFMT_P1_PK4 0x40 ///< state = 1 color plane (5551 packed)
|
|
|
|
#define PXLFMT_RGBA4444_PK (PXLFMT_P1_PK3) ///< state = 1 color plane, pixel=RGBA4444, packed 2-byte with B4-G4-R4-A4 order.
|
|
#define PXLFMT_RGBA5551_PK (PXLFMT_P1_PK4) ///< state = 1 color plane, pixel=RGBA4444, packed 2-byte with B5-G5-R5-A1 order.
|
|
#define PXLFMT_RGB888_PK (PXLFMT_P1_PK | 0x00) ///< state = 1 color plane, pixel=RGB888, packed 3-byte with B8-G8-R8 order.
|
|
#define PXLFMT_RGBD8888_PK (PXLFMT_P1_PK | 0x03) ///< state = 1 color plane, pixel=RGBD8888, packed 3-byte with B8-G8-R8 order.
|
|
#define PXLFMT_RGBA8888_PK (PXLFMT_P1_PK | 0x02) ///< state = 1 color plane, pixel=RGBA8888, packed 4-byte with B8-G8-R8-A8 order.
|
|
#define PXLFMT_RGB565_PK (PXLFMT_P1_PK2 | 0x00) ///< state = 1 color plane, pixel=RGB565, packed 2-byte with B5-G6-R5 order.
|
|
#define PXLFMT_RGBA5658_PK (PXLFMT_P1_PK2 | 0x01) ///< state = 2 color plane, pixel=RGB565, and A8, packed 2-byte with B5-G6-R5 order.
|
|
#define PXLFMT_RGBA5654_PK (PXLFMT_P1_PK2 | 0x02) ///< state = 2 color plane, pixel=RGB565, and A4, packed 2-byte with B5-G6-R5 order.
|
|
#define PXLFMT_INDEX1 (PXLFMT_P1_IDX | 0x00) ///< state = 1 color plane, pixel=INDEX1
|
|
#define PXLFMT_INDEX2 (PXLFMT_P1_IDX | 0x01) ///< state = 1 color plane, pixel=INDEX2
|
|
#define PXLFMT_INDEX4 (PXLFMT_P1_IDX | 0x02) ///< state = 1 color plane, pixel=INDEX4
|
|
#define PXLFMT_INDEX8 (PXLFMT_P1_IDX | 0x03) ///< state = 1 color plane, pixel=INDEX8
|
|
|
|
//tmp define
|
|
#define PXLFMT_YUV422_PK (0x50)
|
|
#define PXLFMT_YUV420_PK (0x60)
|
|
|
|
#define PXLFMT_A8 PXLFMT_INDEX8
|
|
#define PXLFMT_A4 PXLFMT_INDEX4
|
|
//@}
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------
|
|
// function - DC create and destory
|
|
//--------------------------------------------------------------------------------------
|
|
/**
|
|
Verify DC type and format.
|
|
|
|
Verify DC type and format.
|
|
@note Nothing
|
|
|
|
@param[in] uiType Type. (ex: TYPE_XXX).
|
|
@param[in] uiPxlfmt Format (ex: PXLFMT_XXX).
|
|
@return
|
|
- @b GX_OK: Successed
|
|
- @b GX_ERROR_TYPE: Failed, not support format with this type.
|
|
GX_ERROR_FORMAT: Failed, not support format.
|
|
*/
|
|
RESULT GxGfx_CheckDCTypeFmt(UINT16 uiType, UINT16 uiPxlfmt);
|
|
|
|
/**
|
|
Calculate DC pitch size.
|
|
|
|
Calculate DC pitch size.
|
|
@note Nothing
|
|
|
|
@param[in] uiWidth Width.
|
|
@param[in] uiType Type. (ex: TYPE_XXX).
|
|
@param[in] uiPxlfmt Format (ex: PXLFMT_XXX).
|
|
@return Buffer pitch size (in bytes)
|
|
*/
|
|
UINT32 GxGfx_CalcDCPitchSize(UINT32 uiWidth, UINT16 uiType, UINT16 uiPxlfmt);
|
|
|
|
/**
|
|
Calculate DC memory size.
|
|
|
|
Calculate DC memory size.
|
|
@note Nothing
|
|
|
|
@param[in] uiWidth Buffer width..
|
|
@param[in] uiHeight Buffer height..
|
|
@param[in] uiType Type. (ex: TYPE_XXX).
|
|
@param[in] uiPxlfmt Format (ex: PXLFMT_XXX).
|
|
@return Buffer total memory size (in bytes)
|
|
*/
|
|
UINT32 GxGfx_CalcDCMemSize(UINT32 uiWidth, UINT32 uiHeight, UINT16 uiType, UINT16 uiPxlfmt);
|
|
|
|
/**
|
|
Attach memory to DC.
|
|
|
|
Attach memory to DC.
|
|
@note Nothing
|
|
|
|
@param[out] pDC Pointer to DC.
|
|
@param[in] uiType Type. (ex: TYPE_XXX).
|
|
@param[in] uiPxlfmt Format (ex: PXLFMT_XXX).
|
|
@param[in] uiWidth Buffer width (in pixels).
|
|
@param[in] uiHeight Buffer height (in pixels).
|
|
@param[in] uiPitch Buffer pitch (in bytes) of plane-0.
|
|
@param[in] pBuf0 Buffer address of plane-0.
|
|
@param[in] pBuf1 Buffer address of plane-1.
|
|
@param[in] pBuf2 Buffer address of plane-2.
|
|
@return
|
|
- @b GX_OK: Successed
|
|
- @b GX_ERROR_TYPE: Failed, not support format with this type.
|
|
GX_ERROR_FORMAT: Failed, not support format.
|
|
GX_NULL_POINTER: Failed, not given buffer address.
|
|
GX_ERROR_SIZEZERO: Failed, buffer size (width, height, pitch) is zero.
|
|
GX_ERROR_SIZEALIGN: Failed, not match size align requirement.
|
|
*/
|
|
RESULT GxGfx_AttachDC(DC *pDC,
|
|
UINT16 uiType, UINT16 uiPxlfmt, UINT32 uiWidth, UINT32 uiHeight,
|
|
UINT32 uiPitch, UINT8 *pBuf0, UINT8 *pBuf1, UINT8 *pBuf2);
|
|
|
|
/**
|
|
Detach memory from DC.
|
|
|
|
Detach memory from DC.
|
|
@note Nothing
|
|
|
|
@param[in] pDC Pointer to DC.
|
|
*/
|
|
void GxGfx_DetachDC(DC *pDC);
|
|
|
|
/**
|
|
Get size of DC.
|
|
|
|
Get size of DC.
|
|
@note Nothing
|
|
|
|
@param[in] pDC Pointer to DC.
|
|
@return Size (w,h) of DC.
|
|
*/
|
|
ISIZE GxGfx_GetSize(const DC *pDC);
|
|
//@}
|
|
|
|
RESULT GxGfx_GetAddr(const DC *_pDC, UINT32 *pPlan1, UINT32 *pPlan2, UINT32 *pPlan3);
|
|
RESULT GxGfx_GetLineOffset(const DC *_pDC, UINT32 *pPlan1, UINT32 *pPlan2, UINT32 *pPlan3);
|
|
|
|
#ifdef __cplusplus
|
|
} //extern "C"
|
|
#endif
|
|
|
|
#endif//_GX_DC_H_
|