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_
 |