Int32 grpx_link_scale_demo() { UInt32 devId; UInt32 outWidth, outHeight; UInt32 startX, startY; UInt32 offsetX, offsetY; UInt32 loopCount, i; UInt32 runCount; devId = VDIS_DEV_SD; runCount = 10000; loopCount = 100; offsetX = offsetY = 1; /* putting in a loop for test */ while(runCount--) { /* putting in another loop to change size and position every few msecs */ for(i=1; i<=loopCount; i++) { Demo_swMsGetOutSize(Vdis_getResolution(devId), &outWidth, &outHeight); startX = offsetX*i; startY = offsetY*i; outWidth -= startX*2; outHeight -= startY*2; grpx_link_scale(devId, startX, startY, outWidth, outHeight); OSA_waitMsecs(17); } for(i=loopCount; i>=1; i--) { Demo_swMsGetOutSize(Vdis_getResolution(devId), &outWidth, &outHeight); startX = offsetX*i; startY = offsetY*i; outWidth -= startX*2; outHeight -= startY*2; grpx_link_scale(devId, startX, startY, outWidth, outHeight); OSA_waitMsecs(17); } /* restore to original */ Demo_swMsGetOutSize(Vdis_getResolution(devId), &outWidth, &outHeight); dprintf("[reset] %d x %d\n", outWidth, outHeight); grpx_link_scale(devId, 0, 0, outWidth, outHeight); OSA_waitMsecs(17); } return 0; }
/*---------------------------------------------------------------------------- grpx_fb init/exit function -----------------------------------------------------------------------------*/ int grpx_fb_start(grpx_plane_type planeType) { int fd=0; struct fb_var_screeninfo varinfo; UInt32 outWidth, outHeight; app_grpx_t *grpx = &grpx_obj; int hdbuf_size, i; dprintf("\n"); dprintf("FB0: Starting !!!\n") memset(grpx, 0, sizeof(app_grpx_t)); if(planeType >= GRPX_FORMAT_MAX) { return -1; } else { grpx->planeType = planeType; } //# Open the display device fd = open(FBDEV_NAME_0, O_RDWR); if (fd <= 0) { eprintf("FB0: Could not open device [%s] !!! \n",FBDEV_NAME_0); return -1; } grpx->curWidth = GRPX_PLANE_WIDTH; grpx->curHeight = GRPX_PLANE_HEIGHT; dprintf("FB2: Opened device [%s] (fd=%d) !!!\n",FBDEV_NAME_0,fd); if (ioctl(fd, FBIOGET_VSCREENINFO, &varinfo) < 0) { eprintf("FB0: FBIOGET_VSCREENINFO !!!\n"); } varinfo.xres = grpx->curWidth; varinfo.yres = grpx->curHeight; varinfo.xres_virtual = grpx->curWidth; varinfo.yres_virtual = grpx->curHeight; if (grpx->planeType == GRPX_FORMAT_RGB565) { varinfo.bits_per_pixel = 16; varinfo.red.length = 5; varinfo.green.length = 6; varinfo.blue.length = 5; varinfo.red.offset = 11; varinfo.green.offset = 5; varinfo.blue.offset = 0; } if (ioctl(fd, FBIOPUT_VSCREENINFO, &varinfo) < 0) { eprintf("FB0: FBIOPUT_VSCREENINFO !!!\n"); } grpx->bytes_per_pixel = (varinfo.bits_per_pixel / 8); hdbuf_size = disp_fbinfo(fd); if(hdbuf_size < 0) { eprintf("FB0: disp_fbinfo() !!!\n"); return -1; } grpx->buf[0] = (unsigned char *)mmap (0, hdbuf_size*NUM_GRPX_DISPLAYS, (PROT_READ|PROT_WRITE), MAP_SHARED, fd, 0); if (grpx->buf[0] == MAP_FAILED) { eprintf("FB0: mmap() failed !!!\n"); return -1; } grpx->buf_size = hdbuf_size; for(i=1; i<NUM_GRPX_DISPLAYS; i++) { grpx->buf[i] = grpx->buf[i-1] + (grpx->curWidth*grpx->curHeight*grpx->bytes_per_pixel); } grpx->fd = fd; Demo_swMsGetOutSize(Vdis_getResolution(VDIS_DEV_HDMI), &outWidth, &outHeight); grpx_fb_scale(VDIS_DEV_HDMI, 0, 0, outWidth, outHeight); disp_fbinfo(fd); dprintf("FB0: Start DONE !!!\n"); dprintf("\n"); return 0; }
/*---------------------------------------------------------------------------- grpx_link init/exit function -----------------------------------------------------------------------------*/ int grpx_link_init(grpx_plane_type planeType) { UInt32 outWidth, outHeight; VGRPX_CREATE_PARAM_S createPrm; VGRPX_BUFFER_INFO_S bufInfo; app_grpx_t *grpx = &grpx_obj; dprintf("\n"); dprintf("Starting !!!\n") memset(grpx, 0, sizeof(app_grpx_t)); if(planeType >= GRPX_FORMAT_MAX) { return -1; } else { grpx->planeType = planeType; } grpx->bytes_per_pixel = 4; if(planeType==GRPX_FORMAT_RGB565) grpx->bytes_per_pixel = 2; grpx->curWidth = GRPX_PLANE_WIDTH; grpx->curHeight = GRPX_PLANE_HEIGHT; Demo_swMsGetOutSize(Vdis_getResolution(VDIS_DEV_HDMI), &outWidth, &outHeight); createPrm.grpxId = HDMI_GRPX_ID; createPrm.bufferInfo.bufferPhysAddr = 0; createPrm.bufferInfo.bufferPitch = 0; createPrm.bufferInfo.bufferWidth = grpx->curWidth; createPrm.bufferInfo.bufferHeight = grpx->curHeight; if(planeType==GRPX_FORMAT_RGB565) createPrm.bufferInfo.dataFormat = VGRPX_DATA_FORMAT_RGB565; else createPrm.bufferInfo.dataFormat = VGRPX_DATA_FORMAT_ARGB888; createPrm.bufferInfo.scanFormat = VGRPX_SF_PROGRESSIVE; createPrm.dynPrm.scaleEnable = TRUE; createPrm.dynPrm.transperencyEnable = TRUE; createPrm.dynPrm.transperencyColor = RGB_KEY_24BIT_GRAY; createPrm.dynPrm.inWidth = grpx->curWidth; createPrm.dynPrm.inHeight = grpx->curHeight; createPrm.dynPrm.displayWidth = outWidth; createPrm.dynPrm.displayHeight = outHeight; createPrm.dynPrm.displayStartX = 0; createPrm.dynPrm.displayStartY = 0; Vgrpx_create(HDMI_GRPX_ID, &createPrm); Vgrpx_getInfo(HDMI_GRPX_ID, &bufInfo); grpx->buf_size = bufInfo.bufferPitch*bufInfo.bufferHeight; grpx->buf[0] = (unsigned char *)Vgrpx_mmap(bufInfo.bufferPhysAddr, grpx->buf_size, FALSE); if (grpx->buf[0] == NULL) { eprintf("GRPX0: mmap() failed !!!\n"); return -1; } Demo_swMsGetOutSize(Vdis_getResolution(VDIS_DEV_SD), &outWidth, &outHeight); createPrm.grpxId = SDTV_GRPX_ID; createPrm.bufferInfo.bufferPhysAddr = bufInfo.bufferPhysAddr; createPrm.bufferInfo.bufferPitch = bufInfo.bufferPitch; createPrm.bufferInfo.bufferWidth = bufInfo.bufferWidth; createPrm.bufferInfo.bufferHeight = bufInfo.bufferHeight; createPrm.bufferInfo.dataFormat = bufInfo.dataFormat; createPrm.bufferInfo.scanFormat = bufInfo.scanFormat; createPrm.dynPrm.scaleEnable = TRUE; createPrm.dynPrm.transperencyEnable = TRUE; createPrm.dynPrm.transperencyColor = RGB_KEY_24BIT_GRAY; createPrm.dynPrm.inWidth = grpx->curWidth; createPrm.dynPrm.inHeight = grpx->curHeight; createPrm.dynPrm.displayWidth = outWidth; createPrm.dynPrm.displayHeight = outHeight; createPrm.dynPrm.displayStartX = 0; createPrm.dynPrm.displayStartY = 0; Vgrpx_create(SDTV_GRPX_ID, &createPrm); Vgrpx_enable(HDMI_GRPX_ID, TRUE); Vgrpx_enable(SDTV_GRPX_ID, TRUE); { UInt32 curTime = OSA_getCurTimeInMsec(); //# init fb - fill RGB_KEY draw_fill_color(grpx->buf[0]); curTime = OSA_getCurTimeInMsec() - curTime; dprintf("### Memfill time = %d msecs\n", curTime); } dprintf("Start DONE !!!\n"); dprintf("\n"); return 0; }
int grpx_fb_start2() { int fd2 = 0; struct fb_var_screeninfo varinfo; app_grpx_t *grpx = &grpx_obj; int hdbuf_size; UInt32 outWidth, outHeight; dprintf("\n"); dprintf("FB2: Starting !!!\n") fd2 = open(FBDEV_NAME_2, O_RDWR); if (fd2 <= 0) { eprintf("FB2: Could not open device [%s] !!! \n",FBDEV_NAME_2); return -1; } dprintf("FB2: Opened device [%s] (fd=%d) !!!\n",FBDEV_NAME_2,fd2); grpx->fd2 = fd2; if (ioctl(fd2, FBIOGET_VSCREENINFO, &varinfo) < 0) { eprintf("FB2: FBIOGET_VSCREENINFO !!!\n"); } if (grpx->planeType == GRPX_FORMAT_RGB565) { varinfo.bits_per_pixel = 16; varinfo.red.length = 5; varinfo.green.length = 6; varinfo.blue.length = 5; varinfo.red.offset = 11; varinfo.green.offset = 5; varinfo.blue.offset = 0; if(ioctl(fd2, FBIOPUT_VSCREENINFO, &varinfo) < 0) { eprintf("FB2: FBIOPUT_VSCREENINFO !!!\n"); } } hdbuf_size = disp_fbinfo(fd2); if(hdbuf_size < 0) { eprintf("FB2: disp_fbinfo() !!!\n"); } Demo_swMsGetOutSize(Vdis_getResolution(VDIS_DEV_SD), &outWidth, &outHeight); grpx_fb_scale(VDIS_DEV_SD, 0, 0, outWidth, outHeight); if (ioctl(fd2, FBIOGET_VSCREENINFO, &varinfo) < 0) { eprintf("FB2: FBIOGET_VSCREENINFO !!!\n"); } varinfo.xres = grpx->curWidth; varinfo.yres = grpx->curHeight; varinfo.xres_virtual = grpx->curWidth; varinfo.yres_virtual = grpx->curHeight; if(ioctl(fd2, FBIOPUT_VSCREENINFO, &varinfo) < 0) { eprintf("FB2: FBIOPUT_VSCREENINFO !!!\n"); } disp_fbinfo(fd2); dprintf("FB2: Start DONE !!!\n") dprintf("\n"); return 0; }