1449 lines
		
	
	
		
			35 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			1449 lines
		
	
	
		
			35 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| 
 | |
| #include "GxDisplay.h"
 | |
| #include "GxDisplay_int.h"
 | |
| #include "DL.h"
 | |
| #if !defined(__FREERTOS)
 | |
| #include "vendor_videoout.h"
 | |
| #include <sys/ioctl.h>
 | |
| #include <linux/fb.h>
 | |
| #include <fcntl.h>
 | |
| #include <sys/mman.h>
 | |
| static struct fb_var_screeninfo vinfo;
 | |
| static int fb_fd = 0;
 | |
| #endif
 | |
| 
 | |
| #define COLOR_YUV_BLACK             0x00808000 ///< built-in color
 | |
| #define COLOR_BLACK                 COLOR_YUV_BLACK
 | |
| 
 | |
| #define REMOVE              0
 | |
| #define _DL_SetAutoWait(a,b)
 | |
| #define _DL_Wait_VSync(a)
 | |
| #define _DL_Wait_Load(a)
 | |
| #define _DL_UpdateOutput(a)
 | |
| #define _DL_Dirty(a,b)
 | |
| //#define _DL_SetOSDMix(a,b,c,d,e,f,g,h,i,j)
 | |
| //#define _DL_SetVDOMix(a,b,c,d,e,f,g,h,i,j)
 | |
| #define _DL_SetCtrl(a,b,c)
 | |
| //#define _DL_GetOSDCk(a,b,c)     0
 | |
| #define _DL_BufferExit(a)
 | |
| #define _DD_GetLayerEn(a)     0
 | |
| #define _DD_SetLayerEn(a,b)
 | |
| 
 | |
| //disp-1
 | |
| LAYER_BUFMAN *_gBM_1[LAYER_NUM] = {0};
 | |
| DISPLAY_MIXER _gDM_1;
 | |
| DISPLAY_LAYER _gDL_1[LAYER_NUM];
 | |
| 
 | |
| #if (DEVICE_COUNT >= 2)
 | |
| //disp-2
 | |
| LAYER_BUFMAN *_gBM_2[LAYER_NUM] = {0};
 | |
| DISPLAY_MIXER _gDM_2;
 | |
| DISPLAY_LAYER _gDL_2[LAYER_NUM];
 | |
| #endif
 | |
| 
 | |
| UINT32 _gDisp_RenderOBJ = 0;
 | |
| 
 | |
| 
 | |
| 
 | |
| void  GxDisplay_RegBufMan(UINT32 LayerID, LAYER_BUFMAN *pBufMan)
 | |
| {
 | |
| 	UINT32 cDevID = _DD(LayerID);
 | |
| 	UINT32 cLayerID = _DL(LayerID);
 | |
| 
 | |
| 	if (cDevID == 0) {
 | |
| 		_gBM_1[cLayerID] = pBufMan;
 | |
| 	}
 | |
| #if (DEVICE_COUNT >= 2)
 | |
| 	if (cDevID == 1) {
 | |
| 		_gBM_2[cLayerID] = pBufMan;
 | |
| 	}
 | |
| #endif
 | |
| }
 | |
| 
 | |
| static LAYER_BUFMAN *_DL_GetBufMan(UINT32 LayerID)
 | |
| {
 | |
| 	LAYER_BUFMAN *pthisBM = 0;
 | |
| 	UINT32 cDevID = _DD(LayerID);
 | |
| 	UINT32 cLayerID = _DL(LayerID);
 | |
| 	//GX_ASSERT(LayerID < LAYER_NUM);
 | |
| 
 | |
| 	if (cDevID == 0) {
 | |
| 		pthisBM = _gBM_1[cLayerID];
 | |
| 	}
 | |
| #if (DEVICE_COUNT >= 2)
 | |
| 	if (cDevID == 1) {
 | |
| 		pthisBM = _gBM_2[cLayerID];
 | |
| 	}
 | |
| #endif
 | |
| 	return pthisBM;
 | |
| }
 | |
| 
 | |
| 
 | |
| static DISPLAY_LAYER *_DL_GetLayer(UINT32 LayerID)
 | |
| {
 | |
| 	DISPLAY_LAYER *pthisDL = 0;
 | |
| 	UINT32 cDevID = _DD(LayerID);
 | |
| 	UINT32 cLayerID = _DL(LayerID);
 | |
| 	//GX_ASSERT(LayerID < LAYER_NUM);
 | |
| 
 | |
| 	if (cDevID == 0) {
 | |
| 		pthisDL = &(_gDL_1[cLayerID]);
 | |
| 	}
 | |
| #if (DEVICE_COUNT >= 2)
 | |
| 	if (cDevID == 1) {
 | |
| 		pthisDL = &(_gDL_2[cLayerID]);
 | |
| 	}
 | |
| #endif
 | |
| 	return pthisDL;
 | |
| }
 | |
| 
 | |
| static DISPLAY_MIXER *_DL_GetMixer(UINT32 LayerID)
 | |
| {
 | |
| 	DISPLAY_MIXER *pthisDM = 0;
 | |
| 	UINT32 cDevID = _DD(LayerID);
 | |
| 
 | |
| 	if (cDevID == 0) {
 | |
| 		pthisDM = &(_gDM_1);
 | |
| 	}
 | |
| #if defined(_BSP_NA51000_)
 | |
| 	if (cDevID == 1) {
 | |
| 		pthisDM = &(_gDM_2);
 | |
| 	}
 | |
| #endif
 | |
| 
 | |
| 	return pthisDM;
 | |
| }
 | |
| 
 | |
| static void *_DL_GetBufferDC(UINT32 LayerID, UINT32 BufferID)
 | |
| {
 | |
| 	void *pDC = 0;
 | |
| 	INT32 DevID = _DD(LayerID);
 | |
| 	LayerID = _DL(LayerID);
 | |
| 
 | |
| 	if (DevID == 0) {
 | |
| 		if ((LayerID == 0) | (LayerID == 1) | (LayerID == 2) | (LayerID == 3)) {
 | |
| 			pDC = _gBM_1[LayerID]->get(BufferID);
 | |
| 		}
 | |
| 	}
 | |
| #if (DEVICE_COUNT >= 2)
 | |
| 	if (DevID == 1) {
 | |
| 		if ((LayerID == 0) | (LayerID == 2)) {
 | |
| 			pDC = _gBM_2[LayerID]->get(BufferID);
 | |
| 		}
 | |
| 	}
 | |
| #endif
 | |
| 
 | |
| 	return pDC;
 | |
| }
 | |
| 
 | |
| static UINT8 _GxDisplay_GetNextBufID(UINT32 LayerID, UINT8 uiBufIndex)
 | |
| {
 | |
| 	DISPLAY_LAYER *pthisDL = _DL_GetLayer(LayerID);
 | |
| 	if (pthisDL == NULL) {
 | |
| 		return 0;
 | |
| 	}
 | |
| 	//get next buffer index
 | |
| 	uiBufIndex ++;
 | |
| 	if (uiBufIndex > pthisDL->uiBufCount) {
 | |
| 		uiBufIndex = 0;
 | |
| 	}
 | |
| 
 | |
| 	return uiBufIndex;
 | |
| }
 | |
| #if !defined(__FREERTOS)
 | |
| UINT8 *GxDisplay_InitFB(UINT32 LayerID,UINT32 uiBufAddr,UINT32 uiBufSize,UINT32 uiBufCount)
 | |
| {
 | |
|     VENDOR_FB_INIT fb_init;
 | |
|     struct fb_fix_screeninfo finfo;
 | |
|     long int screensize = 0;
 | |
|     char *fbp = 0;
 | |
|     int count =1000;
 | |
| 
 | |
|     fb_init.fb_id = HD_FB0;
 | |
|     fb_init.pa_addr = uiBufAddr;
 | |
|     fb_init.buf_len = uiBufSize*(uiBufCount+1);
 | |
| 
 | |
| 	vendor_videoout_set(VENDOR_VIDEOOUT_ID0, VENDOR_VIDEOOUT_ITEM_FB_INIT, &fb_init);
 | |
| 
 | |
|     while(count){
 | |
|     	fb_fd = open("/dev/fb0", O_RDWR);
 | |
|     	if (fb_fd<0)	{
 | |
|             usleep(100);
 | |
|             count--;
 | |
|     	} else {
 | |
|     	    break;
 | |
|     	}
 | |
|     }
 | |
|     if(fb_fd<0){
 | |
| 		DBG_ERR("Error: Cannot open framebuffer device.\n");
 | |
| 		return 0;
 | |
| 	}
 | |
| 
 | |
|     if (ioctl(fb_fd, FBIOGET_FSCREENINFO, &finfo)) {
 | |
|         DBG_ERR("Error reading fixed information.\n");
 | |
| 		return 0;
 | |
|     }
 | |
| 
 | |
|     screensize =  finfo.smem_len;
 | |
|     fbp = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED,fb_fd, 0);
 | |
| 
 | |
|     if(uiBufCount)//ping-pong buffer should set yres_virtual for pan disp
 | |
|     {
 | |
|         if (ioctl(fb_fd, FBIOGET_VSCREENINFO, &vinfo)) {
 | |
|             DBG_ERR("Error reading variable information\n");
 | |
|         }
 | |
|         vinfo.xres_virtual = vinfo.xres;
 | |
|         vinfo.yres_virtual = vinfo.yres * 2;
 | |
| 
 | |
|         if (ioctl(fb_fd, FBIOPUT_VSCREENINFO, &vinfo) == -1) {
 | |
|             DBG_ERR("Could not set variable screen info!\n");
 | |
|     	}
 | |
|     }
 | |
|     return (UINT8 *)fbp;
 | |
| }
 | |
| #endif
 | |
| RESULT GxDisplay_InitLayer(UINT32 LayerID, const LAYER_INIT *pInit, BOOL bClear)
 | |
| {
 | |
| 	DISPLAY_LAYER *pthisDL = 0;
 | |
| 	LAYER_BUFMAN *pthisBM = 0;
 | |
| 	UINT16 fmt;
 | |
| 	register INT8 i;
 | |
| 
 | |
| 	DBG_FUNC_BEGIN("\r\n");
 | |
|     DBG_IND("uiSwapEffect %x\r\n",pInit->uiSwapEffect);
 | |
| 
 | |
| 	pthisDL = _DL_GetLayer(LayerID);
 | |
| 	if (pthisDL == 0) {
 | |
| 		return GX_NULL_DL;
 | |
| 	}
 | |
| 
 | |
| 	pthisBM = _DL_GetBufMan(LayerID);
 | |
| 	if (pthisBM == 0) {
 | |
| 		DBG_ERR("Lyr(0x%02x) - Buffer manager is not registered!\r\n", LayerID);
 | |
| 		return GX_NULL_BUFMAN;
 | |
| 	}
 | |
| 
 | |
| 	//*((LAYER_INIT *)pthisDL) = *pInit;
 | |
| 	memcpy((void *)pthisDL,(void *)pInit,sizeof(LAYER_INIT));
 | |
| 
 | |
| 	fmt = pthisDL->uiPxlfmt;
 | |
| 
 | |
| 	//check buffer count
 | |
| 	if (pthisDL->uiBufCount + 1 > LAYER_BUFFER_NUM) {
 | |
| 		DBG_ERR("Lyr(0x%02x) - Too may buffers!\r\n", LayerID);
 | |
| 		return GX_OUTOF_BUFCOUNT;
 | |
| 	}
 | |
| 	//check swap effect
 | |
| 	if ((pthisDL->uiBufCount == 0) &&
 | |
| 		((pthisDL->uiSwapEffect & BUFATTR_SWAPEFFECT) != SWAPEFFECT_DISCARD)) {
 | |
| 		DBG_ERR("Lyr(0x%02x) - Single buffer only DISCARD swapping effect!\r\n", LayerID);
 | |
| 		return GX_FAIL_SWAPEFFECT;
 | |
| 	}
 | |
| 
 | |
| 	//check buf size
 | |
| 	if (pthisDL->uiBufSize < pthisBM->calcsize((LAYER_INIT *)pthisDL)) {
 | |
| 		DBG_ERR("Lyr(0x%02x) - Buffer size is not enough!\r\n", LayerID);
 | |
| 		return GX_NOTENOUGH_BUFSIZE;
 | |
| 	}
 | |
| 
 | |
| 	//check buf address
 | |
| 	for (i = 0; i <= pthisDL->uiBufCount; i++)
 | |
| 		if (pthisDL->pBufAddr[i] == 0) {
 | |
| 			DBG_ERR("Lyr(0x%02x) - Some buffer address is not assigned!\r\n", LayerID);
 | |
| 			return GX_NULL_BUF;
 | |
| 		}
 | |
| 
 | |
| 	//clear all flag
 | |
| 	pthisDL->uiFlag = 0;
 | |
| 
 | |
| 	//init general state //valid, but not draw, clear dirty
 | |
| 	pthisDL->uiFlag &= ~LRFLAG_SIGN_MASK;
 | |
| 	pthisDL->uiFlag |= LRFLAG_SIGN;
 | |
| 
 | |
| 	//init palette state
 | |
| 	pthisDL->uiPalCount = 0;
 | |
| 	if (fmt == DISP_PXLFMT_INDEX8) {
 | |
| 		pthisDL->uiPalCount = 0x100;
 | |
| 	}
 | |
| 
 | |
| 	//update dc
 | |
| 	pthisDL->uiFlag |= LRFLAG_INITDC;
 | |
| 	//assign first buffer ID
 | |
| 	pthisDL->uiBufShowID = 0;
 | |
| 	//update window state
 | |
| 	pthisDL->uiFlag |= LRFLAG_INITID;
 | |
| 
 | |
| 	//update window state
 | |
| 	pthisDL->uiFlag |= LRFLAG_SETWIN;
 | |
| 
 | |
| #if 0
 | |
| 	pthisDL->uiEnable = 0;  //initial with disable
 | |
| 	pthisDL->uiFlag |= LRFLAG_SETEN;
 | |
| #else
 | |
| 	//do NOT control enable state by GxDisplay_InitLayer()!
 | |
| 	//only control enable state by GxDisplay_Set()!
 | |
| #endif
 | |
| 
 | |
| 	if (bClear) {
 | |
| 		pthisDL->uiFlag |= LRFLAG_CLEAR;
 | |
| 	}
 | |
| 
 | |
| 	return GX_OK;
 | |
| }
 | |
| 
 | |
| void GxDisplay_ExitLayer(UINT32 LayerID)
 | |
| {
 | |
| 	DISPLAY_LAYER *pthisDL = 0;
 | |
| 	LAYER_BUFMAN *pthisBM = 0;
 | |
| 	register INT8 i;
 | |
| 
 | |
| 	DBG_FUNC_BEGIN("\r\n");
 | |
| 	pthisDL = _DL_GetLayer(LayerID);
 | |
| 	if (pthisDL == 0) {
 | |
| 		return;
 | |
| 	}
 | |
| 	pthisBM = _DL_GetBufMan(LayerID);
 | |
| 	if (pthisBM == 0) {
 | |
| 		return;
 | |
| 	}
 | |
| 	if (!((pthisDL->uiFlag & LRFLAG_SIGN_MASK) == LRFLAG_SIGN)) {
 | |
| 		DBG_WRN("Lyr(0x%02x) - Layer is not initialized, ignore.\r\n", LayerID);
 | |
| 		return; //ignore
 | |
| 	}
 | |
| 
 | |
| 	//del DC
 | |
| 	for (i = 0; i <= pthisDL->uiBufCount; i++) {
 | |
| 		pthisBM->detach(_DL_GetBufferDC(LayerID, i));
 | |
| 	}
 | |
| 
 | |
| 	pthisDL->uiFlag = 0;   //invalid it, clear all dirty
 | |
| }
 | |
| 
 | |
| void GxDisplay_Init(UINT32 DevID, UINT32 uiDispWidth, UINT32 uiDispHeight)
 | |
| {
 | |
| 	UINT32 cDevID = _DD(DevID);
 | |
| 	DBG_FUNC_BEGIN("\r\n");
 | |
| #if (DEVICE_COUNT < 2)
 | |
| 	if (cDevID >= 1) {
 | |
| 		DBG_ERR("GxDisplay_Init() fail, DevID%d no support\r\n", cDevID);
 | |
| 		return;
 | |
| 	}
 | |
| #endif
 | |
| 
 | |
| 	//install debug cmd
 | |
| 	//GxDisplay_InstallCmd();
 | |
| 
 | |
| 	//clear MIXER object
 | |
| 	{
 | |
| 		DISPLAY_MIXER *pthisDM = _DL_GetMixer(_LayerID(cDevID, 0));
 | |
| 		if (pthisDM == 0) {
 | |
| 			return;
 | |
| 		}
 | |
| 		memset(pthisDM, 0, sizeof(DISPLAY_MIXER));
 | |
| 
 | |
| 		//init OSD mix method
 | |
| 		pthisDM->uiOSD1KeyOp = COMPARE_KEY_NEVER;
 | |
| 		pthisDM->uiOSD1KeyColor = 0;
 | |
| 		pthisDM->uiOSD1BlendOp = BLEND_PIXELALPHA;
 | |
| 		pthisDM->uiOSD1ConstAlpha = 0xff;
 | |
| 		pthisDM->uiOSD2KeyOp = COMPARE_KEY_NEVER;
 | |
| 		pthisDM->uiOSD2KeyColor = 0;
 | |
| 		pthisDM->uiOSD2BlendOp = BLEND_PIXELALPHA;
 | |
| 		pthisDM->uiOSD2ConstAlpha = 0xff;
 | |
| 
 | |
| 		//init VDO mix method
 | |
| 		pthisDM->uiVDO1KeyOp = COMPARE_KEY_NEVER;
 | |
| 		pthisDM->uiVDO1KeyColor = COLOR_BLACK;
 | |
| 		pthisDM->uiVDO1BlendOp = BLEND_CONSTALPHA;
 | |
| 		pthisDM->uiVDO1ConstAlpha = 0xff;
 | |
| 		pthisDM->uiVDO2KeyOp = COMPARE_KEY_NEVER;
 | |
| 		pthisDM->uiVDO2KeyColor = COLOR_BLACK;
 | |
| 		pthisDM->uiVDO2BlendOp = BLEND_CONSTALPHA;
 | |
| 		pthisDM->uiVDO2ConstAlpha = 0xff;
 | |
| 
 | |
| 		//init background - black color
 | |
| 		pthisDM->uiBackColor = COLOR_BLACK;
 | |
| 		pthisDM->uiAllCtrl = 0;
 | |
| 
 | |
| 		//_DL_Init(DevID, uiDispWidth, uiDispHeight);
 | |
| 
 | |
| 		pthisDM->uiFlag = 0;
 | |
| 
 | |
| 		pthisDM->uiFlag |= LRFLAG_SETOSDMIX;
 | |
| 		pthisDM->uiFlag |= LRFLAG_SETVDOMIX;
 | |
| 		pthisDM->uiFlag |= LRFLAG_SETCTRL;
 | |
| 
 | |
| 		pthisDM->PalStart[LAYER_OSD1] = 0;
 | |
| 		pthisDM->PalCount[LAYER_OSD1] = 0;
 | |
| 		memset(&(pthisDM->Pal[LAYER_OSD1]), 0x00, 256 * sizeof(PALETTE_ITEM));
 | |
| 		pthisDM->PalStart[LAYER_OSD2] = 0;
 | |
| 		pthisDM->PalCount[LAYER_OSD2] = 0;
 | |
| 		memset(&(pthisDM->Pal[LAYER_OSD2]), 0x00, 256 * sizeof(PALETTE_ITEM));
 | |
| 	}
 | |
| 
 | |
| 	//clear all LAYER objects
 | |
| 	if (cDevID == 0) {
 | |
| 		DISPLAY_LAYER *pthisDL;
 | |
| 		pthisDL = _DL_GetLayer(_LayerID(cDevID, LAYER_OSD1));
 | |
| 		if (pthisDL != 0) {
 | |
| 			memset(pthisDL, 0, sizeof(DISPLAY_LAYER));
 | |
| 		}
 | |
| 		pthisDL = _DL_GetLayer(_LayerID(cDevID, LAYER_OSD2));
 | |
| 		if (pthisDL != 0) {
 | |
| 			memset(pthisDL, 0, sizeof(DISPLAY_LAYER));
 | |
| 		}
 | |
| 		pthisDL = _DL_GetLayer(_LayerID(cDevID, LAYER_VDO1));
 | |
| 		if (pthisDL != 0) {
 | |
| 			memset(pthisDL, 0, sizeof(DISPLAY_LAYER));
 | |
| 		}
 | |
| 		pthisDL = _DL_GetLayer(_LayerID(cDevID, LAYER_VDO2));
 | |
| 		if (pthisDL != 0) {
 | |
| 			memset(pthisDL, 0, sizeof(DISPLAY_LAYER));
 | |
| 		}
 | |
| 	}
 | |
| #if (DEVICE_COUNT >= 2)
 | |
| 	if (cDevID == 1) {
 | |
| 		DISPLAY_LAYER *pthisDL;
 | |
| 		pthisDL = _DL_GetLayer(_LayerID(cDevID, LAYER_OSD1));
 | |
| 		if (pthisDL != 0) {
 | |
| 			memset(pthisDL, 0, sizeof(DISPLAY_LAYER));
 | |
| 		}
 | |
| 		pthisDL = _DL_GetLayer(_LayerID(cDevID, LAYER_VDO1));
 | |
| 		if (pthisDL != 0) {
 | |
| 			memset(pthisDL, 0, sizeof(DISPLAY_LAYER));
 | |
| 		}
 | |
| 	}
 | |
| #endif
 | |
| }
 | |
| 
 | |
| void GxDisplay_Exit(UINT32 DevID)
 | |
| {
 | |
| 	UINT32 cDevID = _DD(DevID);
 | |
| 	DBG_FUNC_BEGIN("\r\n");
 | |
| 	if (cDevID == 0) {
 | |
| 		GxDisplay_ExitLayer(_LayerID(cDevID, LAYER_OSD1));
 | |
| 		GxDisplay_ExitLayer(_LayerID(cDevID, LAYER_OSD2));
 | |
| 		GxDisplay_ExitLayer(_LayerID(cDevID, LAYER_VDO1));
 | |
| 		GxDisplay_ExitLayer(_LayerID(cDevID, LAYER_VDO2));
 | |
| 	}
 | |
| #if (DEVICE_COUNT >= 2)
 | |
| 	if (cDevID == 1) {
 | |
| 		GxDisplay_ExitLayer(_LayerID(cDevID, LAYER_OSD1));
 | |
| 		GxDisplay_ExitLayer(_LayerID(cDevID, LAYER_VDO1));
 | |
| 	}
 | |
| #endif
 | |
| 	//_DL_Exit();
 | |
| }
 | |
| PALETTE_ITEM _gTempPalette[256];
 | |
| 
 | |
| void GxDisplay_SetPalette(UINT32 LayerID, UINT16 uiStartID, UINT16 uiCount, const PALETTE_ITEM *pTable)
 | |
| {
 | |
| 	UINT16 i;
 | |
| 	DISPLAY_LAYER *pthisDL = 0;
 | |
| 	DISPLAY_MIXER *pthisDM = 0;
 | |
| 	UINT32 cLayerID = _DL(LayerID);
 | |
| 
 | |
| 	DBG_FUNC_BEGIN("\r\n");
 | |
| 	pthisDL = _DL_GetLayer(LayerID);
 | |
| 	if (pthisDL == 0) {
 | |
| 		return;
 | |
| 	}
 | |
| 	pthisDM = _DL_GetMixer(LayerID);
 | |
| 	if (pthisDM == 0) {
 | |
| 		return;
 | |
| 	}
 | |
| 	if (pTable == 0) {
 | |
| 		DBG_ERR("Lyr(0x%02x) - no palette , ignore.\r\n", LayerID);
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	if ((cLayerID == LAYER_OSD1)
 | |
| 		|| (cLayerID == LAYER_OSD2)) {
 | |
| 		for (i = uiStartID; i < uiStartID + uiCount; i++) {
 | |
| 			pthisDM->Pal[cLayerID][i] = pTable[i];
 | |
| 		}
 | |
| 		if (pthisDL->uiFlag & LRFLAG_SETPAL) {
 | |
| 			pthisDM->PalStart[cLayerID] = 0;
 | |
| 			pthisDM->PalCount[cLayerID] = 256;
 | |
| 		} else {
 | |
| 			pthisDL->uiFlag |= LRFLAG_SETPAL;
 | |
| 			pthisDM->PalStart[cLayerID] = uiStartID;
 | |
| 			pthisDM->PalCount[cLayerID] = uiCount;
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void GxDisplay_GetPalette(UINT32 LayerID, UINT16 uiStartID, UINT16 uiCount, PALETTE_ITEM *pTable)
 | |
| {
 | |
| 	UINT16 i;
 | |
| 	DISPLAY_LAYER *pthisDL = 0;
 | |
| 	DISPLAY_MIXER *pthisDM = 0;
 | |
| 	UINT32 cLayerID = _DL(LayerID);
 | |
| 
 | |
| 	DBG_FUNC_BEGIN("\r\n");
 | |
| 	pthisDL = _DL_GetLayer(LayerID);
 | |
| 	if (pthisDL == 0) {
 | |
| 		return;
 | |
| 	}
 | |
| 	pthisDM = _DL_GetMixer(LayerID);
 | |
| 	if (pthisDM == 0) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	switch (pthisDL->uiPxlfmt) {
 | |
| 	case DISP_PXLFMT_INDEX8:
 | |
| 		break;
 | |
| 	default:
 | |
| 		DBG_ERR("Lyr(0x%02x) - Cannot get palette in this format!\r\n", LayerID);
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	if ((cLayerID == LAYER_OSD1)
 | |
| 		|| (cLayerID == LAYER_OSD2)) {
 | |
| 		_DL_GetPalette(LayerID,
 | |
| 					   uiStartID,
 | |
| 					   uiCount,
 | |
| 					   pthisDM->Pal[cLayerID] + uiStartID);
 | |
| 		for (i = uiStartID; i < uiStartID + uiCount; i++) {
 | |
| 			pTable[i - uiStartID] = pthisDM->Pal[cLayerID][i];
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void GxDisplay_SetColorKey(UINT32 LayerID, UINT32 enable,UINT32 color)
 | |
| {
 | |
| 	DISPLAY_LAYER *pthisDL = 0;
 | |
| 	DISPLAY_MIXER *pthisDM = 0;
 | |
| 	UINT32 cLayerID = _DL(LayerID);
 | |
| 
 | |
| 	DBG_FUNC_BEGIN("\r\n");
 | |
| 	pthisDL = _DL_GetLayer(LayerID);
 | |
| 	if (pthisDL == 0) {
 | |
| 		return;
 | |
| 	}
 | |
| 	pthisDM = _DL_GetMixer(LayerID);
 | |
| 	if (pthisDM == 0) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	if ((cLayerID == LAYER_OSD1)
 | |
| 		|| (cLayerID == LAYER_OSD2)) {
 | |
| 		pthisDM->uiOSD1KeyOp = enable;
 | |
| 		pthisDM->uiOSD1KeyColor = color;
 | |
| 		pthisDL->uiFlag |= LRFLAG_SETKEY;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| #if REMOVE
 | |
| BOOL GxDisplay_IsReady(UINT32 LayerID)
 | |
| {
 | |
| 	UINT32 cLayerID = _DL(LayerID);
 | |
| 	DBG_FUNC_BEGIN("\r\n");
 | |
| 
 | |
| 	if (cLayerID < LAYER_NUM) {
 | |
| 		DISPLAY_LAYER *pthisDL = 0;
 | |
| 
 | |
| 		pthisDL = _DL_GetLayer(LayerID);
 | |
| 		if (pthisDL == 0) {
 | |
| 			return FALSE;
 | |
| 		}
 | |
| 
 | |
| 		return ((pthisDL->uiFlag & LRFLAG_SIGN_MASK) == LRFLAG_SIGN);
 | |
| 	} else {
 | |
| 		return TRUE;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| UINT32 _DD_GetLayerEn(UINT32 DevID);
 | |
| void _DD_SetLayerEn(UINT32 DevID, UINT32 EnMask);
 | |
| #endif
 | |
| 
 | |
| void GxDisplay_Set(UINT32 LayerID, UINT16 nState, UINT32 nValue)
 | |
| {
 | |
| 	UINT32 cLayerID = _DL(LayerID);
 | |
| 	UINT32 *pState;
 | |
| 
 | |
| 	DBG_IND("nState 0x%x nValue 0x%x\r\n",nState,nValue);
 | |
| 
 | |
| 	if (cLayerID < LAYER_NUM) {
 | |
| 		DISPLAY_LAYER *pthisDL = 0;
 | |
| 
 | |
| 		pthisDL = _DL_GetLayer(LayerID);
 | |
| 		if (pthisDL == 0) {
 | |
| 			return;
 | |
| 		}
 | |
| 		pState = (UINT32 *)pthisDL;
 | |
| 
 | |
| 		//allow disable even this layer is never initialized.
 | |
| 		if ((nState == LAYER_STATE_ENABLE) && (nValue == 0)) {
 | |
| 			if (!((pthisDL->uiFlag & LRFLAG_SIGN_MASK) == LRFLAG_SIGN)) {
 | |
| 				pthisDL->uiFlag = 0;
 | |
| 			} else {
 | |
| 				//GX_ASSERT((pthisDL->uiFlag & LRFLAG_SIGN_MASK) == LRFLAG_SIGN);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		if (!(nState < LAYER_STATE_NUM)) {
 | |
| 			DBG_WRN("Lyr(0x%02x) - Out of state!\r\n", LayerID);
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		//apply state
 | |
| 		switch (nState) {
 | |
| 		case LAYER_STATE_ENABLE :
 | |
| 			nValue = (nValue != 0);
 | |
| 			{
 | |
| 				pState[nState] = nValue;
 | |
| 				pthisDL->uiFlag |= LRFLAG_SETEN;
 | |
| 
 | |
| 			}
 | |
| 			break;
 | |
| 		case LAYER_STATE_BUFADDR0:
 | |
| 		case LAYER_STATE_BUFADDR1:
 | |
| 		case LAYER_STATE_BUFADDR2:
 | |
| 			//if(pState[nState] != nValue)
 | |
| 			if ((pthisDL->uiSwapEffect & BUFATTR_SWAPEFFECT) == SWAPEFFECT_DISCARD) {
 | |
| 				//allow modify buffer address if swapeffect = DISCARD
 | |
| 				pState[nState] = nValue;
 | |
| 				pthisDL->uiFlag |= LRFLAG_INITDC;
 | |
| 				pthisDL->uiFlag |= LRFLAG_SETWIN;
 | |
| 			}
 | |
| 			break;
 | |
| 		case LAYER_STATE_WINX :
 | |
| 		case LAYER_STATE_WINY :
 | |
| 		case LAYER_STATE_WINW :
 | |
| 		case LAYER_STATE_WINH :
 | |
| 		case LAYER_STATE_WINATTR :
 | |
| 			{
 | |
| 				pState[nState] = nValue;
 | |
| 				pthisDL->uiFlag |= LRFLAG_SETWIN;
 | |
| 			}
 | |
| 			break;
 | |
| 		case LAYER_STATE_BUFATTR :
 | |
| 			{
 | |
| 				pState[nState] = nValue;
 | |
| 				pthisDL->uiFlag |= LRFLAG_SETSWAP;
 | |
| 			}
 | |
| 			break;
 | |
| 		case LAYER_STATE_INFO :
 | |
| 			if (pthisDL->uiFlag & LRFLAG_INITID) { //before init layer flushed
 | |
| 				pState[nState] = nValue; //allow user to modifid show id (only)
 | |
| 			}
 | |
| 			break;
 | |
| 		}
 | |
| 	} else { //control
 | |
| 		DISPLAY_MIXER *pthisDM = 0;
 | |
| 		UINT32 cDevID = _DD(LayerID);
 | |
| 		INT32 iState = (INT32)nState;
 | |
| 
 | |
| 		pthisDM = _DL_GetMixer(LayerID);
 | |
| 		if (pthisDM == 0) {
 | |
| 			return;
 | |
| 		}
 | |
| 		pState = (UINT32 *)pthisDM;
 | |
| 
 | |
| 		if (!(iState < CTRL_STATE_NUM)) {
 | |
| 			DBG_WRN("Lyr(0x%02x) - Out of state!\r\n", LayerID);
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		//apply state
 | |
| 		if ((iState >= CTRL_STATE_BLEND_MIN) && (iState <= CTRL_STATE_BLEND_MAX)) {
 | |
| 			{
 | |
| 				pState[nState] = nValue;
 | |
| 				pthisDM->uiFlag |= LRFLAG_SETCTRL;
 | |
| 				if(iState == CTRL_STATE_ALLENABLE) {
 | |
| 					if(cDevID == 0) {
 | |
| 						_DD_SetLayerEn(DOUT1, nValue);
 | |
| 					} else if(cDevID == 1) {
 | |
| 						_DD_SetLayerEn(DOUT2, nValue);
 | |
| 					}
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| 		if ((iState >= CTRL_STATE_OSD_MIN) && (iState <= CTRL_STATE_OSD_MAX)) {
 | |
| 			if (pthisDM->uiFlag & LRFLAG_SETCTRL) {
 | |
| 				pState[nState] = nValue;
 | |
| 				pthisDM->uiFlag |= LRFLAG_SETOSDMIX;
 | |
| 			}
 | |
| 		}
 | |
| 		if ((iState >= CTRL_STATE_VDO_MIN) && (iState <= CTRL_STATE_VDO_MAX)) {
 | |
| 			if (pthisDM->uiFlag & LRFLAG_SETCTRL) {
 | |
| 				pState[nState] = nValue;
 | |
| 				pthisDM->uiFlag |= LRFLAG_SETVDOMIX;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| UINT32 GxDisplay_Get(UINT32 LayerID, UINT16 nState)
 | |
| {
 | |
| 	UINT32 cLayerID = _DL(LayerID);
 | |
| 	UINT32 *pState;
 | |
| 
 | |
| 	DBG_FUNC_BEGIN("\r\n");
 | |
| 
 | |
| 	if (cLayerID < LAYER_NUM) {
 | |
| 		DISPLAY_LAYER *pthisDL = 0;
 | |
| 
 | |
| 		pthisDL = _DL_GetLayer(LayerID);
 | |
| 		if (pthisDL == 0) {
 | |
| 			return 0;
 | |
| 		}
 | |
| 		pState = (UINT32 *)pthisDL;
 | |
| 
 | |
| 		if (!(nState < LAYER_STATE_NUM)) {
 | |
| 			DBG_WRN("Lyr(0x%02x) - Out of state!\r\n", LayerID);
 | |
| 			return 0;
 | |
| 		}
 | |
| 
 | |
| 		if (nState == LAYER_STATE_ENABLE) {
 | |
| 			pState[nState] = (_DL_GetEnable(LayerID) != 0); //update state from h/w
 | |
| 		}
 | |
| 	} else { //control
 | |
| 		DISPLAY_MIXER *pthisDM = 0;
 | |
| 		UINT32 cDevID = _DD(LayerID);
 | |
| 
 | |
| 		pthisDM = _DL_GetMixer(LayerID);
 | |
| 		if (pthisDM == 0) {
 | |
| 			return 0;
 | |
| 		}
 | |
| 		pState = (UINT32 *)pthisDM;
 | |
| 		if(nState == CTRL_STATE_ALLENABLE) {
 | |
| 			if(cDevID == 0) {
 | |
| 				pState[nState] = _DD_GetLayerEn(DOUT1);
 | |
| 			} else if(cDevID == 1) {
 | |
| 				pState[nState] = _DD_GetLayerEn(DOUT2);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		if (!(nState < CTRL_STATE_NUM)) {
 | |
| 			DBG_WRN("Lyr(0x%02x) - Out of state!\r\n", LayerID);
 | |
| 			return 0;
 | |
| 		}
 | |
| 	}
 | |
| 	return pState[nState];
 | |
| }
 | |
| 
 | |
| static void _GxDisplay_Flush(UINT32 LayerID)
 | |
| {
 | |
| 	UINT32 cLayerID = _DL(LayerID);
 | |
| 	//BOOL bDirty = FALSE;
 | |
| 	DBG_FUNC_BEGIN("\r\n");
 | |
| 
 | |
| 	if (cLayerID < LAYER_NUM) {
 | |
| 		DISPLAY_LAYER *pthisDL = 0;
 | |
| 		BOOL bDelayEnable = FALSE;
 | |
| 
 | |
| 		pthisDL = _DL_GetLayer(LayerID);
 | |
| 		if (pthisDL == 0) {
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		if (!((pthisDL->uiFlag & LRFLAG_SIGN_MASK) == LRFLAG_SIGN)) {
 | |
| 			//allow disable even this layer is never initialized.
 | |
| 			if ((pthisDL->uiFlag == LRFLAG_SETEN) && (pthisDL->uiEnable == 0)) {
 | |
| 				//allow
 | |
| 			} else {
 | |
| 				DBG_IND("Lyr(0x%02x) - layer not init yet, ignore.\r\n", LayerID);
 | |
| 				return; //ignore
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		//apply state
 | |
| 		if (pthisDL->uiFlag & LRFLAG_SETEN) {
 | |
| 			if (pthisDL->uiEnable == 0) {
 | |
| 				DBG_IND("set disable\r\n");
 | |
| 				_DL_SetEnable(LayerID, pthisDL->uiEnable);
 | |
| 
 | |
| 				pthisDL->uiFlag &= ~LRFLAG_SETEN;
 | |
| 			} else {
 | |
| 				bDelayEnable = TRUE;
 | |
| 			}
 | |
| 		}
 | |
| 		if (pthisDL->uiFlag & LRFLAG_SETSWAP) {
 | |
| 			if (pthisDL->uiBufCount > 0) {
 | |
| 				if ((pthisDL->uiSwapEffect & BUFATTR_SWAPEFFECT) == SWAPEFFECT_DISCARD) {
 | |
| 					pthisDL->uiBufDrawID = pthisDL->uiBufShowID;
 | |
| 				} else {
 | |
| 					pthisDL->uiBufDrawID = _GxDisplay_GetNextBufID(LayerID, pthisDL->uiBufShowID);
 | |
| 				}
 | |
| 			}
 | |
| 			DBG_IND("swap uiBufDrawID %x\r\n",pthisDL->uiBufDrawID);
 | |
| 			pthisDL->uiFlag &= ~LRFLAG_SETSWAP;
 | |
| 		}
 | |
| 		if (pthisDL->uiFlag & LRFLAG_INITID) {
 | |
| 			//init buffer state
 | |
| 			if ((pthisDL->uiSwapEffect & BUFATTR_SWAPEFFECT) == SWAPEFFECT_DISCARD) {
 | |
| 				pthisDL->uiBufDrawID = pthisDL->uiBufShowID;
 | |
| 			} else {
 | |
| 				pthisDL->uiBufDrawID = _GxDisplay_GetNextBufID(LayerID, pthisDL->uiBufShowID);
 | |
| 			}
 | |
| 			DBG_IND("init uiBufDrawID %x\r\n",pthisDL->uiBufDrawID);
 | |
| 			pthisDL->uiFlag &= ~LRFLAG_INITID;
 | |
| 		}
 | |
| 		if (pthisDL->uiFlag & LRFLAG_INITDC) {
 | |
| 			LAYER_BUFMAN *pthisBM = 0;
 | |
| 			register INT8 i;
 | |
| 			//UINT16 w,h;
 | |
| 			//UINT16 fmt;
 | |
| 			DBG_IND("init DC\r\n");
 | |
| 
 | |
| 			pthisBM = _DL_GetBufMan(LayerID);
 | |
| 			if (pthisBM == 0) {
 | |
| 				DBG_ERR("Lyr(0x%02x) - Buffer manager is not registered!\r\n", LayerID);
 | |
| 				return;
 | |
| 			}
 | |
| 
 | |
| 			if (pthisDL->uiFlag & LRFLAG_DRAW) {
 | |
| 				//if DC is on drawing, cannot change window immediately
 | |
| 				DBG_ERR("Lyr(0x%02x) - Still under drawing, cannot init DC!\r\n", LayerID);
 | |
| 				goto _close_initdc;
 | |
| 			}
 | |
| 
 | |
| 			//w = (UINT16)pthisDL->uiWidth;
 | |
| 			//h = (UINT16)pthisDL->uiHeight;
 | |
| 			//fmt = pthisDL->uiPxlfmt;
 | |
| 
 | |
| 			//init DC
 | |
| 			for (i = 0; i <= pthisDL->uiBufCount; i++) {
 | |
| 				//create DC at buffer
 | |
| 				pthisBM->attach(_DL_GetBufferDC(LayerID, i), (LAYER_INIT *)pthisDL, i);
 | |
| 
 | |
| 				if (pthisDL->uiFlag & LRFLAG_CLEAR) {
 | |
| 					//clear DC
 | |
| 					pthisBM->clear(_DL_GetBufferDC(LayerID, i));
 | |
| 				}
 | |
| 			}
 | |
| _close_initdc:
 | |
| 			pthisDL->uiFlag &= ~LRFLAG_INITDC;
 | |
| 			pthisDL->uiFlag &= ~LRFLAG_CLEAR;
 | |
| 		}
 | |
|         //not only discard should set addr, after init GxDisplay_InitLayer flush should set
 | |
| 		//if ((pthisDL->uiSwapEffect & BUFATTR_SWAPEFFECT) == SWAPEFFECT_DISCARD) {
 | |
| 		{
 | |
| 			DBG_IND("set win & buf\r\n");
 | |
| 			//do window setup (first time)
 | |
| 			if (pthisDL->uiFlag & LRFLAG_SETWIN) {
 | |
| 				UINT32 w, h;
 | |
| 				UINT32 fmt;
 | |
| 				UINT8 *pBufAddr;
 | |
| 				IRECT rwin;
 | |
| 
 | |
| 
 | |
| 				if(pthisDL->uiSwapEffect & SWAPEFFECT_XY) {
 | |
| 				h = pthisDL->uiWidth;
 | |
| 				w = pthisDL->uiHeight;
 | |
| 				rwin.x = pthisDL->win.y;
 | |
| 				rwin.y = pthisDL->win.x;
 | |
| 				rwin.w = pthisDL->win.h;
 | |
| 				rwin.h = pthisDL->win.w;
 | |
| 				} else {
 | |
| 				w = pthisDL->uiWidth;
 | |
| 				h = pthisDL->uiHeight;
 | |
| 				rwin.x = pthisDL->win.x;
 | |
| 				rwin.y = pthisDL->win.y;
 | |
| 				rwin.w = pthisDL->win.w;
 | |
| 				rwin.h = pthisDL->win.h;
 | |
| 				}
 | |
| 
 | |
| 
 | |
| 				fmt = pthisDL->uiPxlfmt;
 | |
| 				pBufAddr = pthisDL->pBufAddr[(UINT8)pthisDL->uiBufShowID];
 | |
| 
 | |
| 				//destroy buffer
 | |
| 				_DL_BufferExit(LayerID);
 | |
| 				//create buffer
 | |
| 				_DL_BufferInit(LayerID,
 | |
| 							   w, h, fmt,
 | |
| 							   (UINT32)pBufAddr,
 | |
| 							   &rwin,
 | |
| 							   pthisDL->uiWinAttr);
 | |
|             #if !defined(__FREERTOS)
 | |
|             {
 | |
|                 UINT8 *fb_buf=0;
 | |
|                 HD_RESULT ERcode=0;
 | |
|                 HD_COMMON_MEM_VIRT_INFO vir_meminfo = {0};
 | |
| 
 | |
|                 vir_meminfo.va = (void *)(pthisDL->pBufAddr[0]);
 | |
|                 ERcode = hd_common_mem_get(HD_COMMON_MEM_PARAM_VIRT_INFO, &vir_meminfo);
 | |
|             	if ( ERcode != HD_OK) {
 | |
|                 	DBG_ERR("map fail %d\n",ERcode);
 | |
|                     return ;
 | |
|             	}
 | |
| 
 | |
|                 fb_buf = GxDisplay_InitFB(LayerID,(UINT32)vir_meminfo.pa,pthisDL->uiBufSize,pthisDL->uiBufCount);
 | |
|                 if(fb_buf) {
 | |
|                     pthisDL->pBufAddr[0] = fb_buf;
 | |
|                     if(pthisDL->uiBufCount) {
 | |
|                         pthisDL->pBufAddr[1] = fb_buf+pthisDL->uiBufSize;
 | |
|                     }
 | |
|                 } else {
 | |
|                     DBG_ERR("fb init fail\r\n");
 | |
|                 }
 | |
|             }
 | |
|             #endif
 | |
| 				pthisDL->uiFlag &= ~LRFLAG_SETWIN;
 | |
| 			}
 | |
| 		}
 | |
| 		if (pthisDL->uiFlag & LRFLAG_SETEN) {
 | |
| 			if (bDelayEnable) {
 | |
| 				DBG_IND("set enable\r\n");
 | |
| 				_DL_SetEnable(LayerID, pthisDL->uiEnable);
 | |
| 
 | |
| 				pthisDL->uiFlag &= ~LRFLAG_SETEN;
 | |
| 			}
 | |
| 		}
 | |
| 	} else { //control
 | |
| 		DISPLAY_MIXER *pthisDM = 0;
 | |
| 
 | |
| 		pthisDM = _DL_GetMixer(LayerID);
 | |
| 		if (pthisDM == 0) {
 | |
| 			return;
 | |
| 		}
 | |
|         #if REMOVE
 | |
| 		if (pthisDM->uiFlag & LRFLAG_SETOSDMIX) {
 | |
| 			UINT32 O1KeyColor, O2KeyColor;
 | |
| 			DISPLAY_LAYER *pthisDL = 0;
 | |
| 			UINT32 O1Fmt, O2Fmt;
 | |
| 			DBG_IND("set osd mix\r\n");
 | |
| 			O1KeyColor = 0;
 | |
| 			pthisDL = _DL_GetLayer(LAYER_OSD1);
 | |
| 			if(pthisDL) {
 | |
| 				O1Fmt = pthisDL->uiPxlfmt;
 | |
| 				switch(O1Fmt) {
 | |
| 				//case DISP_PXLFMT_INDEX1 :
 | |
| 				//case DISP_PXLFMT_INDEX2 :
 | |
| 				//case DISP_PXLFMT_INDEX4 :
 | |
| 				case DISP_PXLFMT_INDEX8 :
 | |
| 					//it is a index value
 | |
| 					O1KeyColor = pthisDM->Pal[LAYER_OSD1][(UINT8)pthisDM->uiOSD1KeyColor];
 | |
| 					break;
 | |
| 				case DISP_PXLFMT_ARGB1555_PK :
 | |
| 					//it is a 16bits RGB value
 | |
| 					O1KeyColor = pthisDM->uiOSD1KeyColor & 0x0000ffff;
 | |
| 					O1KeyColor = _DL_GetOSDCk(LayerID, DISP_PXLFMT_ARGB1555_PK, O1KeyColor);
 | |
| 					break;
 | |
| 				case DISP_PXLFMT_ARGB4444_PK :
 | |
| 					//it is a 16bits RGB value
 | |
| 					O1KeyColor = pthisDM->uiOSD1KeyColor & 0x0000ffff;
 | |
| 					O1KeyColor = _DL_GetOSDCk(LayerID, DISP_PXLFMT_ARGB4444_PK, O1KeyColor);
 | |
| 					break;
 | |
| 				//case DISP_PXLFMT_ARGB4565_PK :
 | |
| 				case DISP_PXLFMT_ARGB8565_PK :
 | |
| 					//it is a 16bits RGB value
 | |
| 					O1KeyColor = pthisDM->uiOSD1KeyColor & 0x0000ffff;
 | |
| 					O1KeyColor = _DL_GetOSDCk(LayerID, DISP_PXLFMT_ARGB8565_PK, O1KeyColor);
 | |
| 					break;
 | |
| 				case DISP_PXLFMT_ARGB8888_PK :
 | |
| 					//it is a 24bits RGB value
 | |
| 					O1KeyColor = pthisDM->uiOSD1KeyColor & 0x00ffffff;
 | |
| 					O1KeyColor = _DL_GetOSDCk(LayerID, DISP_PXLFMT_ARGB8888_PK, O1KeyColor);
 | |
| 					break;
 | |
| 				default:
 | |
| 					break;
 | |
| 				}
 | |
| 			}
 | |
| 			O2KeyColor = 0;
 | |
| 			pthisDL = _DL_GetLayer(LAYER_OSD2);
 | |
| 			if(pthisDL) {
 | |
| 				O2Fmt = pthisDL->uiPxlfmt;
 | |
| 				switch(O2Fmt) {
 | |
| 				//case DISP_PXLFMT_INDEX1 :
 | |
| 				//case DISP_PXLFMT_INDEX2 :
 | |
| 				//case DISP_PXLFMT_INDEX4 :
 | |
| 				case DISP_PXLFMT_INDEX8 :
 | |
| 					//it is a index value
 | |
| 					O2KeyColor = pthisDM->Pal[LAYER_OSD2][(UINT8)pthisDM->uiOSD2KeyColor];
 | |
| 					break;
 | |
| 				default:
 | |
| 					break;
 | |
| 				}
 | |
| 			}
 | |
| 			_DL_SetOSDMix(LayerID, pthisDM->uiAllCtrl,
 | |
| 						  (UINT8)pthisDM->uiOSD1KeyOp, O1KeyColor, (UINT8)pthisDM->uiOSD1BlendOp, (UINT8)pthisDM->uiOSD1ConstAlpha,
 | |
| 						  (UINT8)pthisDM->uiOSD2KeyOp, O2KeyColor, (UINT8)pthisDM->uiOSD2BlendOp, (UINT8)pthisDM->uiOSD2ConstAlpha
 | |
| 						 );
 | |
| 
 | |
| 			pthisDM->uiFlag &= ~LRFLAG_SETOSDMIX;
 | |
| 		}
 | |
| 		if (pthisDM->uiFlag & LRFLAG_SETVDOMIX) {
 | |
| 			DBG_IND("set vdo mix\r\n");
 | |
| 			_DL_SetVDOMix(LayerID, pthisDM->uiAllCtrl,
 | |
| 						  (UINT8)pthisDM->uiVDO1KeyOp, pthisDM->uiVDO1KeyColor, (UINT8)pthisDM->uiVDO1BlendOp, (UINT8)pthisDM->uiVDO1ConstAlpha,
 | |
| 						  (UINT8)pthisDM->uiVDO2KeyOp, pthisDM->uiVDO2KeyColor, (UINT8)pthisDM->uiVDO2BlendOp, (UINT8)pthisDM->uiVDO2ConstAlpha
 | |
| 						 );
 | |
| 
 | |
| 			pthisDM->uiFlag &= ~LRFLAG_SETVDOMIX;
 | |
| 		}
 | |
|         #endif
 | |
| 		if (pthisDM->uiFlag & LRFLAG_SETCTRL) {
 | |
| 			DBG_IND("set ctrl\r\n");
 | |
| 			_DL_SetCtrl(LayerID, pthisDM->uiAllCtrl,
 | |
| 						pthisDM->uiBackColor
 | |
| 					   );
 | |
| 
 | |
| 			pthisDM->uiFlag &= ~LRFLAG_SETCTRL;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| #if 0
 | |
| 	if (bDirty) {
 | |
| 		_DL_UpdateOutput(LayerID);
 | |
| 		//bDirty = FALSE;
 | |
| 	}
 | |
| #endif
 | |
| }
 | |
| 
 | |
| void  *GxDisplay_BeginDraw(UINT32 LayerID)
 | |
| {
 | |
| 	DISPLAY_LAYER *pthisDL = 0;
 | |
| 	LAYER_BUFMAN *pthisBM = 0;
 | |
| 	BOOL bCopy;
 | |
| 
 | |
| 	DBG_FUNC_BEGIN("\r\n");
 | |
| 
 | |
| 	pthisDL = _DL_GetLayer(LayerID);
 | |
| 	if (pthisDL == 0) {
 | |
| 		return NULL;
 | |
| 	}
 | |
| 	pthisBM = _DL_GetBufMan(LayerID);
 | |
| 	if (pthisBM == 0) {
 | |
| 		return NULL;
 | |
| 	}
 | |
| 	//deal with BeginDraw re-entry case
 | |
| 	if (pthisDL->uiFlag & LRFLAG_DRAW) {
 | |
| 		DBG_ERR("Lyr(0x%02x) - BeginDraw before EndDraw!\r\n", LayerID);
 | |
| 		return _DL_GetBufferDC(LayerID, pthisDL->uiBufDrawID);
 | |
| 	}
 | |
| 	//do copy effect
 | |
| 	bCopy = 0;
 | |
|     DBG_IND("uiSwapEffect %x\r\n",pthisDL->uiSwapEffect);
 | |
| 	switch (pthisDL->uiSwapEffect & BUFATTR_SWAPEFFECT) {
 | |
| 	case SWAPEFFECT_DISCARD :
 | |
| 		bCopy = 0;
 | |
| 		break;
 | |
| 	case SWAPEFFECT_COPY :
 | |
| 	case SWAPEFFECT_ROTATE:
 | |
| 		bCopy = 1;
 | |
| 		break;
 | |
| 	case SWAPEFFECT_FLIP :
 | |
| 		bCopy = 0;
 | |
| 		break;
 | |
| 	}
 | |
| 
 | |
| 	if (bCopy) {
 | |
| 		DBG_IND("copy buf uiBufShowID:%x to uiBufShowID:%x uiSwapEffect:%x\r\n",pthisDL->uiBufShowID,pthisDL->uiBufDrawID,pthisDL->uiSwapEffect);
 | |
| 		//copy show buffer to draw buffer
 | |
| 		pthisBM->copy(
 | |
| 			_DL_GetBufferDC(LayerID, pthisDL->uiBufDrawID),
 | |
| 			_DL_GetBufferDC(LayerID, pthisDL->uiBufShowID),pthisDL->uiSwapEffect,0
 | |
| 		);
 | |
| 
 | |
| 	}
 | |
| 
 | |
| 	pthisDL->uiFlag |= LRFLAG_DRAW;
 | |
| 
 | |
| 	//return DC of drawing buffer
 | |
| 	return _DL_GetBufferDC(LayerID, pthisDL->uiBufDrawID);
 | |
| }
 | |
| void GxDisplay_EndDraw(UINT32 LayerID, void *pLayerBuf)
 | |
| {
 | |
| 	DISPLAY_LAYER *pthisDL = 0;
 | |
| 	DBG_FUNC_BEGIN("\r\n");
 | |
| 
 | |
| 	pthisDL = _DL_GetLayer(LayerID);
 | |
| 	//GX_ASSERT((pthisDL->uiFlag & LRFLAG_SIGN_MASK) == LRFLAG_SIGN);
 | |
| 	if (pthisDL == 0) {
 | |
| 		return;
 | |
| 	}
 | |
| 	if (pLayerBuf == NULL) {
 | |
| 		DBG_ERR("Lyr(0x%02x) - EndDraw without buf!\r\n", LayerID);
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	//deal with BeginDraw re-entry case
 | |
| 	if (!(pthisDL->uiFlag & LRFLAG_DRAW)) {
 | |
| 		DBG_ERR("Lyr(0x%02x) - EndDraw before BeginDraw!\r\n", LayerID);
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	pthisDL->uiFlag &= ~LRFLAG_DRAW;
 | |
| 	pthisDL->uiFlag |= LRFLAG_FLIP;
 | |
| 
 | |
| 	_DL_Dirty(LayerID, TRUE);
 | |
| }
 | |
| #if REMOVE
 | |
| void GxDisplay_ForceFlip(UINT32 LayerID)
 | |
| {
 | |
| 	DISPLAY_LAYER *pthisDL = 0;
 | |
| 
 | |
| 	DBG_FUNC_BEGIN("\r\n");
 | |
| 
 | |
| 	pthisDL = _DL_GetLayer(LayerID);
 | |
| 	//GX_ASSERT((pthisDL->uiFlag & LRFLAG_SIGN_MASK) == LRFLAG_SIGN);
 | |
| 	if (pthisDL == 0) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	pthisDL->uiFlag |= LRFLAG_FLIP;
 | |
| 
 | |
| 	_DL_Dirty(LayerID, TRUE);
 | |
| }
 | |
| #endif
 | |
| static void _GxDisplay_Flip(UINT32 LayerID)
 | |
| {
 | |
| 	UINT32 cLayerID = _DL(LayerID);
 | |
| 	DISPLAY_LAYER *pthisDL = 0;
 | |
| 	DISPLAY_MIXER *pthisDM = 0;
 | |
| 	BOOL bSwap;
 | |
| 
 | |
| 
 | |
| 
 | |
| 	pthisDL = _DL_GetLayer(LayerID);
 | |
| 	if (pthisDL == 0) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	DBG_IND("uiFlag  %x\r\n",pthisDL->uiFlag);
 | |
| 
 | |
| 	pthisDM = _DL_GetMixer(LayerID);
 | |
| 	if (pthisDM == 0) {
 | |
| 		return;
 | |
| 	}
 | |
| 	//check palette flag
 | |
| 	if (pthisDL->uiFlag & LRFLAG_SETPAL) {
 | |
| 		if ((cLayerID == LAYER_OSD1)
 | |
| 			|| (cLayerID == LAYER_OSD2)) {
 | |
|     	    DBG_IND("set pal \r\n");
 | |
| 			_DL_SetPalette(LayerID,
 | |
| 						   pthisDM->PalStart[cLayerID],
 | |
| 						   pthisDM->PalCount[cLayerID],
 | |
| 						   pthisDM->Pal[cLayerID] + pthisDM->PalStart[cLayerID]);
 | |
| 		}
 | |
| 		pthisDL->uiFlag &= ~LRFLAG_SETPAL;
 | |
| 	}
 | |
| 
 | |
|     //check key flag,should be set format first
 | |
| 	if (pthisDL->uiFlag & LRFLAG_SETKEY) {
 | |
| 		if ((cLayerID == LAYER_OSD1)
 | |
| 			|| (cLayerID == LAYER_OSD2)) {
 | |
|     	    DBG_IND("set color key %x \r\n",pthisDM->uiOSD1KeyColor);
 | |
| 			_DL_SetColorKey(LayerID,
 | |
|                            pthisDL->uiPxlfmt,
 | |
| 						   pthisDM->uiOSD1KeyOp,
 | |
| 						   pthisDM->uiOSD1KeyColor);
 | |
| 		}
 | |
| 		pthisDL->uiFlag &= ~LRFLAG_SETKEY;
 | |
| 	}
 | |
| 
 | |
| 	//check draw flag
 | |
| 	if (pthisDL->uiFlag & LRFLAG_DRAW) {
 | |
| 		DBG_WRN("Lyr(0x%02x) - Flip before EndDraw, ignore this Flip.\r\n", LayerID);
 | |
| 		return; //cannot flip when drawing
 | |
| 	}
 | |
| 	//check draw flag
 | |
| 	if (!(pthisDL->uiFlag & LRFLAG_FLIP) && !(pthisDL->uiFlag & LRFLAG_SETWIN)) {
 | |
| 		if (pthisDL->uiEnable) {
 | |
| 			DBG_WRN("Lyr(0x%02x) - No BeginDraw~EndDraw, ignore this Flip.\r\n", LayerID);
 | |
| 		}
 | |
| 		return; //not need to flip
 | |
| 	}
 | |
| 
 | |
| 	//do swap effect
 | |
| 	bSwap = 0;
 | |
| 
 | |
| 	switch (pthisDL->uiSwapEffect & BUFATTR_SWAPEFFECT) {
 | |
| 	case SWAPEFFECT_DISCARD :
 | |
| 		bSwap = 0;
 | |
| 		break;
 | |
| 	case SWAPEFFECT_COPY :
 | |
| 	case SWAPEFFECT_ROTATE:
 | |
| 		bSwap = 1;
 | |
| 		break;
 | |
| 	case SWAPEFFECT_FLIP :
 | |
| 		bSwap = 1;
 | |
| 		break;
 | |
| 	}
 | |
| 
 | |
| 	if (bSwap) {
 | |
| 		//change new show buffer to old draw buffer
 | |
| 		pthisDL->uiBufShowID = pthisDL->uiBufDrawID;
 | |
| 		//change old draw buffer to new draw buffer
 | |
| 		pthisDL->uiBufDrawID = _GxDisplay_GetNextBufID(LayerID, pthisDL->uiBufDrawID);
 | |
| 	    DBG_IND("swap uiBufShowID: %x uiBufDrawID: %x \r\n",pthisDL->uiBufShowID,pthisDL->uiBufDrawID);
 | |
| 
 | |
| 		//do window setup (first time)
 | |
| 		if (pthisDL->uiFlag & LRFLAG_SETWIN) {
 | |
| 			UINT16 w, h;
 | |
| 			UINT16 fmt;
 | |
| 			UINT8 *pBufAddr;
 | |
| 			IRECT rwin;
 | |
| 
 | |
| 			DBG_IND("set win & buf\r\n");
 | |
| 
 | |
| 			if(pthisDL->uiSwapEffect & SWAPEFFECT_XY) {
 | |
| 				h = (UINT16)pthisDL->uiWidth;
 | |
| 				w = (UINT16)pthisDL->uiHeight;
 | |
| 				rwin.x = pthisDL->win.y;
 | |
| 				rwin.y = pthisDL->win.x;
 | |
| 				rwin.w = pthisDL->win.h;
 | |
| 				rwin.h = pthisDL->win.w;
 | |
| 				} else {
 | |
| 				w = (UINT16)pthisDL->uiWidth;
 | |
| 				h = (UINT16)pthisDL->uiHeight;
 | |
| 				rwin.x = pthisDL->win.x;
 | |
| 				rwin.y = pthisDL->win.y;
 | |
| 				rwin.w = pthisDL->win.w;
 | |
| 				rwin.h = pthisDL->win.h;
 | |
| 			}
 | |
| 
 | |
| 
 | |
| 			fmt = pthisDL->uiPxlfmt;
 | |
| 			pBufAddr = pthisDL->pBufAddr[(UINT8)pthisDL->uiBufShowID];
 | |
| 
 | |
| 			//destroy buffer
 | |
| 			_DL_BufferExit(LayerID);
 | |
| 			//create buffer
 | |
| 			_DL_BufferInit(LayerID,
 | |
| 						   w, h, fmt,
 | |
| 						   (UINT32)pBufAddr,
 | |
| 						   &rwin,
 | |
| 						   pthisDL->uiWinAttr);
 | |
| 
 | |
| 			pthisDL->uiFlag &= ~LRFLAG_SETWIN;
 | |
| 		} else { //do buffer swap
 | |
| 			UINT16 w, h;
 | |
| 			UINT16 fmt;
 | |
| 			UINT8 *pBufAddr;
 | |
| 
 | |
| 			if(pthisDL->uiSwapEffect & SWAPEFFECT_XY) {
 | |
| 			h = (UINT16)pthisDL->uiWidth;
 | |
| 			w = (UINT16)pthisDL->uiHeight;
 | |
| 			} else {
 | |
| 			w = (UINT16)pthisDL->uiWidth;
 | |
| 			h = (UINT16)pthisDL->uiHeight;
 | |
| 			}
 | |
| 			fmt = pthisDL->uiPxlfmt;
 | |
| 			pBufAddr = pthisDL->pBufAddr[(UINT8)pthisDL->uiBufShowID];
 | |
| 			DBG_IND("set uiBufShowID:%d addr:%x \r\n",pthisDL->uiBufShowID,pBufAddr);
 | |
| 
 | |
| 			//swap display layer buffer to new show buffer
 | |
| 
 | |
| 			_DL_BufferSwitch(LayerID,
 | |
| 							 w, h, fmt,
 | |
| 							 (UINT32)pBufAddr);
 | |
| 
 | |
| #if !defined(__FREERTOS)
 | |
|             if(fb_fd)
 | |
|             {
 | |
| 
 | |
|                 if (ioctl(fb_fd, FBIOGET_VSCREENINFO, &vinfo)) {
 | |
|                     DBG_ERR("Error reading variable information\n");
 | |
|                 }
 | |
| 
 | |
|                 vinfo.xoffset = 0;
 | |
|                 if(pthisDL->uiBufShowID)
 | |
|         			vinfo.yoffset = vinfo.yres;
 | |
|                 else
 | |
|                     vinfo.yoffset =0;
 | |
| 
 | |
|     			if (ioctl(fb_fd, FBIOPAN_DISPLAY, &vinfo)) {
 | |
|     				DBG_ERR("Error to do pan display. %s\n",strerror(errno));
 | |
| 			    }
 | |
|             }
 | |
| #endif
 | |
| 		}
 | |
| 	} else {
 | |
| 		//do window setup (first time)
 | |
| 		if (pthisDL->uiFlag & LRFLAG_SETWIN) {
 | |
| 			UINT16 w, h;
 | |
| 			UINT16 fmt;
 | |
| 			UINT8 *pBufAddr;
 | |
| 			IRECT rwin;
 | |
| 
 | |
| 			DBG_IND("set win & buf\r\n");
 | |
| 
 | |
| 			if(pthisDL->uiSwapEffect & SWAPEFFECT_XY) {
 | |
| 			h = (UINT16)pthisDL->uiWidth;
 | |
| 			w = (UINT16)pthisDL->uiHeight;
 | |
| 
 | |
| 			} else {
 | |
| 			w = (UINT16)pthisDL->uiWidth;
 | |
| 			h = (UINT16)pthisDL->uiHeight;
 | |
| 			}
 | |
| 			rwin.y = pthisDL->win.x;
 | |
| 			rwin.x = pthisDL->win.y;
 | |
| 			rwin.w = pthisDL->win.w;
 | |
| 			rwin.h = pthisDL->win.h;
 | |
| 			fmt = pthisDL->uiPxlfmt;
 | |
| 			pBufAddr = pthisDL->pBufAddr[(UINT8)pthisDL->uiBufShowID];
 | |
| 
 | |
| 			//destroy buffer
 | |
| 			_DL_BufferExit(LayerID);
 | |
| 			//create buffer
 | |
| 			_DL_BufferInit(LayerID,
 | |
| 						   w, h, fmt,
 | |
| 						   (UINT32)pBufAddr,
 | |
| 						   &rwin,
 | |
| 						   pthisDL->uiWinAttr);
 | |
| 
 | |
| 			pthisDL->uiFlag &= ~LRFLAG_SETWIN;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	pthisDL->uiFlag &= ~LRFLAG_FLIP;
 | |
| }
 | |
| 
 | |
| void GxDisplay_FlipEx(UINT32 LayerID, BOOL bWait)
 | |
| {
 | |
| 	UINT32 cDevID = _DD(LayerID);
 | |
| 
 | |
| 	DBG_FUNC_BEGIN("\r\n");
 | |
| 
 | |
| 	if (cDevID == 0) {
 | |
| 		//begin send Command
 | |
| 		_GxDisplay_Flip(_LayerID(cDevID, LAYER_OSD1));
 | |
| 		_GxDisplay_Flip(_LayerID(cDevID, LAYER_OSD2));
 | |
| 		_GxDisplay_Flip(_LayerID(cDevID, LAYER_VDO1));
 | |
| 		_GxDisplay_Flip(_LayerID(cDevID, LAYER_VDO2));
 | |
| 		_DL_UpdateOutput(LayerID);
 | |
| 		//end send Command
 | |
| 
 | |
| 		_DL_Dirty(_LayerID(cDevID, LAYER_OSD1), FALSE);
 | |
| 		_DL_Dirty(_LayerID(cDevID, LAYER_OSD2), FALSE);
 | |
| 		_DL_Dirty(_LayerID(cDevID, LAYER_VDO1), FALSE);
 | |
| 		_DL_Dirty(_LayerID(cDevID, LAYER_VDO2), FALSE);
 | |
| 	}
 | |
| #if (DEVICE_COUNT >= 2)
 | |
| 	if (cDevID == 1) {
 | |
| 		//begin send Command
 | |
| 		_GxDisplay_Flip(_LayerID(cDevID, LAYER_OSD1));
 | |
| 		_GxDisplay_Flip(_LayerID(cDevID, LAYER_VDO1));
 | |
| 		_DL_UpdateOutput(LayerID);
 | |
| 		//end send Command
 | |
| 
 | |
| 		_DL_Dirty(_LayerID(cDevID, LAYER_OSD1), FALSE);
 | |
| 		_DL_Dirty(_LayerID(cDevID, LAYER_VDO1), FALSE);
 | |
| 	}
 | |
| #endif
 | |
| 	if (bWait) {
 | |
| 		//WAIT
 | |
| 
 | |
| 		_DL_Wait_Load(LayerID); //Wait until last command is loaded completely.
 | |
| 		//_DL_Wait_VSync(LayerID); //Wait until last frame is updated completely.
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void GxDisplay_WaitVDEx(UINT32 LayerID)
 | |
| {
 | |
| 	DBG_FUNC_BEGIN("\r\n");
 | |
| 	//_DL_Wait_VSync(LayerID);
 | |
| }
 | |
| #if REMOVE
 | |
| 
 | |
| /////////////////////////////////////
 | |
| // Macro function
 | |
| 
 | |
| 
 | |
| //void GxDisplay_SetSrcWindow(UINT32 LayerID, LVALUE x, LVALUE y, LVALUE w, LVALUE h)
 | |
| void GxDisplay_SetSrcWindow(UINT32 LayerID, INT32 x, INT32 y, INT32 w, INT32 h)
 | |
| {
 | |
| }
 | |
| 
 | |
| //void GxDisplay_SetDestWindow(UINT32 LayerID, LVALUE x, LVALUE y, LVALUE w, LVALUE h, UINT32 uiMirror)
 | |
| void GxDisplay_SetDestWindow(UINT32 LayerID, INT32 x, INT32 y, INT32 w, INT32 h, UINT32 uiMirror)
 | |
| {
 | |
| 	GxDisplay_Set(LayerID, LAYER_STATE_WINX, x);
 | |
| 	GxDisplay_Set(LayerID, LAYER_STATE_WINY, y);
 | |
| 	GxDisplay_Set(LayerID, LAYER_STATE_WINW, w);
 | |
| 	GxDisplay_Set(LayerID, LAYER_STATE_WINH, h);
 | |
| 	GxDisplay_Set(LayerID, LAYER_STATE_WINATTR, uiMirror);
 | |
| }
 | |
| 
 | |
| void GxDisplay_SetSwapEffect(UINT32 LayerID, UINT32 uiSwapEffect)
 | |
| {
 | |
| 	UINT32 v, v2;
 | |
| 	v = GxDisplay_Get(LayerID, LAYER_STATE_BUFATTR);
 | |
| 	v2 = BUFATTR_MAKE(uiSwapEffect, BUFATTR_GET_BUFCOUNT(v));
 | |
| 	GxDisplay_Set(LayerID, LAYER_STATE_BUFATTR, v2);
 | |
| }
 | |
| #endif
 | |
| void GxDisplay_FlushEx(UINT32 LayerID, BOOL bWait)
 | |
| {
 | |
| 	UINT32 cDevID = _DD(LayerID);
 | |
| 	UINT32 cLayerID = _DL(LayerID);
 | |
| 
 | |
| 	DBG_FUNC_BEGIN("\r\n");
 | |
| 	if (cLayerID == LAYER_ALL) {
 | |
| 		if (!bWait) {
 | |
| 			_DL_SetAutoWait(LayerID, FALSE);
 | |
| 		}
 | |
| 		if (cDevID == 0) {
 | |
| //			_GxDisplay_Flush(_LayerID(cDevID, LAYER_OUTPUT)); //not support control
 | |
| 			_GxDisplay_Flush(_LayerID(cDevID, LAYER_VDO1));
 | |
| 			_GxDisplay_Flush(_LayerID(cDevID, LAYER_VDO2));
 | |
| 			_GxDisplay_Flush(_LayerID(cDevID, LAYER_OSD1));
 | |
| 			_GxDisplay_Flush(_LayerID(cDevID, LAYER_OSD2));
 | |
| 		}
 | |
| #if (DEVICE_COUNT >= 2)
 | |
| 		if (cDevID == 1) {
 | |
| //			_GxDisplay_Flush(_LayerID(cDevID, LAYER_OUTPUT)); //not support control
 | |
| 			_GxDisplay_Flush(_LayerID(cDevID, LAYER_VDO1));
 | |
| 			_GxDisplay_Flush(_LayerID(cDevID, LAYER_OSD1));
 | |
| 		}
 | |
| #endif
 | |
| 		if (!bWait) {
 | |
| 			_DL_SetAutoWait(LayerID, TRUE);
 | |
| 		}
 | |
| 	} else { //Only 1 LAYER
 | |
| 		if (!bWait) {
 | |
| 			_DL_SetAutoWait(LayerID, FALSE);
 | |
| 		}
 | |
| 		_GxDisplay_Flush(LayerID);
 | |
| 		if (!bWait) {
 | |
| 			_DL_SetAutoWait(LayerID, TRUE);
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| //--------------------------------------------------------------------------------------
 | |
| //  function - others (internal render function)
 | |
| //--------------------------------------------------------------------------------------
 | |
| UINT32 GxRender_GetRenderObject(void)
 | |
| {
 | |
| 	return _gDisp_RenderOBJ;
 | |
| }
 | |
| 
 | |
| void GxRender_SetScale(int scale)
 | |
| {
 | |
| }
 | |
| #if REMOVE
 | |
| 
 | |
| void GxRender_TriggerInput(UINT32 LayerID)
 | |
| {
 | |
| 	_DL_Dirty(LayerID, TRUE);
 | |
| 	//_GxDisplay_Flip(LayerID);
 | |
| }
 | |
| void GxRender_SetInputCB(UINT32 LayerID, GXRENDER_INPUT_CB pfInputCB)
 | |
| {
 | |
| }
 | |
| #endif
 | |
| //thread-safe API
 | |
| void GxRender_Reflash(void)
 | |
| {
 | |
| 	_DL_UpdateOutput(DOUT1);
 | |
| }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | 
