123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- /*
- * Copyright 2019 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- #include "vglite_support.h"
- #include "vg_lite_platform.h"
- #include "vglite_window.h"
- /*******************************************************************************
- * Definitions
- ******************************************************************************/
- #if !DEMO_BUFFER_FIXED_ADDRESS
- AT_NONCACHEABLE_SECTION_ALIGN(
- static uint8_t s_frameBuffer[APP_BUFFER_COUNT][DEMO_BUFFER_HEIGHT][DEMO_BUFFER_WIDTH][DEMO_BUFFER_BYTE_PER_PIXEL],
- FRAME_BUFFER_ALIGN);
- #define DEMO_BUFFER0_ADDR (uint32_t) s_frameBuffer[0]
- #if APP_BUFFER_COUNT > 1
- #define DEMO_BUFFER1_ADDR (uint32_t) s_frameBuffer[1]
- #endif
- #if APP_BUFFER_COUNT > 2
- #define DEMO_BUFFER2_ADDR (uint32_t) s_frameBuffer[2]
- #endif
- #endif
- static const uint32_t s_frameBufferAddress[APP_BUFFER_COUNT] = {DEMO_BUFFER0_ADDR,
- #if APP_BUFFER_COUNT > 1
- DEMO_BUFFER1_ADDR,
- #endif
- #if APP_BUFFER_COUNT > 2
- DEMO_BUFFER2_ADDR
- #endif
- };
- /*******************************************************************************
- * Prototypes
- ******************************************************************************/
- /*******************************************************************************
- * Variables
- ******************************************************************************/
- /*******************************************************************************
- * Code
- ******************************************************************************/
- static vg_lite_buffer_format_t video_format_to_vglite(video_pixel_format_t format)
- {
- vg_lite_buffer_format_t fmt;
- switch (format)
- {
- case kVIDEO_PixelFormatRGB565:
- fmt = VG_LITE_BGR565;
- break;
- case kVIDEO_PixelFormatBGR565:
- fmt = VG_LITE_RGB565;
- break;
- case kVIDEO_PixelFormatXRGB8888:
- fmt = VG_LITE_BGRX8888;
- break;
- default:
- fmt = VG_LITE_RGB565;
- break;
- }
- return fmt;
- }
- vg_lite_error_t VGLITE_CreateDisplay(vg_lite_display_t *display)
- {
- if (!display)
- return VG_LITE_INVALID_ARGUMENT;
- FBDEV_Open(&display->g_fbdev, &g_dc, 0);
- return VG_LITE_SUCCESS;
- }
- vg_lite_error_t VGLITE_CreateWindow(vg_lite_display_t *display, vg_lite_window_t *window)
- {
- vg_lite_error_t ret = VG_LITE_SUCCESS;
- status_t status;
- void *buffer;
- vg_lite_buffer_t *vg_buffer;
- fbdev_t *g_fbdev = &(display->g_fbdev);
- fbdev_fb_info_t *g_fbInfo = &(display->g_fbInfo);
- window->bufferCount = APP_BUFFER_COUNT;
- window->display = display;
- window->width = DEMO_BUFFER_WIDTH;
- window->height = DEMO_BUFFER_HEIGHT;
- window->current = -1;
- FBDEV_GetFrameBufferInfo(g_fbdev, g_fbInfo);
- g_fbInfo->bufInfo.pixelFormat = DEMO_BUFFER_PIXEL_FORMAT;
- g_fbInfo->bufInfo.startX = DEMO_BUFFER_START_X;
- g_fbInfo->bufInfo.startY = DEMO_BUFFER_START_Y;
- g_fbInfo->bufInfo.width = window->width;
- g_fbInfo->bufInfo.height = window->height;
- g_fbInfo->bufInfo.strideBytes = DEMO_BUFFER_STRIDE_BYTE;
- g_fbInfo->bufferCount = window->bufferCount;
- for (uint8_t i = 0; i < window->bufferCount; i++)
- {
- vg_buffer = &(window->buffers[i]);
- g_fbInfo->buffers[i] = (void *)s_frameBufferAddress[i];
- vg_buffer->memory = g_fbInfo->buffers[i];
- vg_buffer->address = s_frameBufferAddress[i];
- vg_buffer->width = g_fbInfo->bufInfo.width;
- vg_buffer->height = g_fbInfo->bufInfo.height;
- vg_buffer->stride = g_fbInfo->bufInfo.strideBytes;
- vg_buffer->format = video_format_to_vglite(DEMO_BUFFER_PIXEL_FORMAT);
- }
- status = FBDEV_SetFrameBufferInfo(g_fbdev, g_fbInfo);
- if (status != kStatus_Success)
- {
- while (1)
- ;
- }
- buffer = FBDEV_GetFrameBuffer(g_fbdev, 0);
- assert(buffer != NULL);
- memset(buffer, 0, g_fbInfo->bufInfo.height * g_fbInfo->bufInfo.strideBytes);
- FBDEV_SetFrameBuffer(g_fbdev, buffer, 0);
- FBDEV_Enable(g_fbdev);
- return ret;
- }
- vg_lite_error_t VGLITE_DestoryWindow(void)
- {
- return VG_LITE_SUCCESS;
- }
- vg_lite_error_t VGLITE_DestroyDisplay(void)
- {
- return VG_LITE_SUCCESS;
- }
- vg_lite_buffer_t *VGLITE_GetRenderTarget(vg_lite_window_t *window)
- {
- vg_lite_buffer_t *rt = NULL;
- void *memory = FBDEV_GetFrameBuffer(&window->display->g_fbdev, 0);
- for (uint8_t i = 0; i < window->bufferCount; i++)
- {
- rt = &(window->buffers[i]);
- if (memory == rt->memory)
- {
- window->current = i;
- return rt;
- }
- }
- return NULL;
- }
- void VGLITE_SwapBuffers(vg_lite_window_t *window)
- {
- vg_lite_buffer_t *rt;
- if (window->current >= 0 && window->current < window->bufferCount)
- rt = &(window->buffers[window->current]);
- else
- return;
- vg_lite_finish();
- FBDEV_SetFrameBuffer(&window->display->g_fbdev, rt->memory, 0);
- }
|