146 lines
3.9 KiB
C
Executable File
146 lines
3.9 KiB
C
Executable File
/**
|
|
* @file fbindex.c
|
|
*
|
|
*/
|
|
|
|
/*********************
|
|
* INCLUDES
|
|
*********************/
|
|
#include "fbdev.h"
|
|
#include "hd_gfx.h"
|
|
#include "hd_common.h"
|
|
#include "Utility/Color.h"
|
|
|
|
extern const uint32_t gDemoKit_Palette_Palette[256];
|
|
|
|
lv_color8_t gDemoKit_Palette_RGB332[256];
|
|
uint32_t gDemoKit_Palette_BGRA8888[256];
|
|
|
|
#define icst_prom0 103
|
|
#define icst_prom1 88
|
|
#define icst_prom2 183
|
|
#define icst_prom3 198
|
|
typedef UINT8 CVALUE; ///< single color value
|
|
|
|
#define COLOR_YUVA_GET_V(c) (CVALUE)(((c) & 0x00ff0000) >> 16) ///< get V channel value of YUVA color
|
|
#define COLOR_YUVA_GET_U(c) (CVALUE)(((c) & 0x0000ff00) >> 8) ///< get U channel value of YUVA color
|
|
#define COLOR_YUVA_GET_Y(c) (CVALUE)(((c) & 0x000000ff) >> 0) ///< get Y channel value of YUVA color
|
|
|
|
#define YUV_GET_R(y,u,v) ( ((INT32)y) + ((INT32)(v)-128) + ((icst_prom0*((INT32)(v)-128))>>8) )
|
|
#define YUV_GET_G(y,u,v) ( ((INT32)y) - ((icst_prom1*((INT32)(u)-128))>>8) - ((icst_prom2*((INT32)(v)-128))>>8) )
|
|
#define YUV_GET_B(y,u,v) ( ((INT32)y) + ((INT32)(u)-128) + ((icst_prom3*((INT32)(u)-128))>>8) )
|
|
#define CLAMP_TO_BYTE(v) (((v) < 0)?0:((v>255)?255:(v)))
|
|
#define YUV_GET_RGB(y,u,v,r,g,b) \
|
|
{ \
|
|
r = YUV_GET_R(y,u,v); r = CLAMP_TO_BYTE(r); \
|
|
g = YUV_GET_G(y,u,v); g = CLAMP_TO_BYTE(g); \
|
|
b = YUV_GET_B(y,u,v); b = CLAMP_TO_BYTE(b); \
|
|
}
|
|
|
|
|
|
#define COLOR_MAKE_BGRA(r,g,b,a) \
|
|
(((uint32_t)(b)&0x000000ff)|\
|
|
(((uint32_t)(g)&0x000000ff)<<8)|\
|
|
(((uint32_t)(r)&0x000000ff)<<16)|\
|
|
(((uint32_t)(a)&0x000000ff)<<24)) ///< make RGBA color by R,G,B,A channel value
|
|
|
|
|
|
UINT32 COLOR_YUV_2_BGRA8888(UINT32 yuv, UINT32 a)
|
|
{
|
|
INT32 r, g, b;
|
|
UINT32 argb888;
|
|
INT32 y, u, v;
|
|
|
|
v = COLOR_YUVA_GET_V(yuv);
|
|
u = COLOR_YUVA_GET_U(yuv);
|
|
y = COLOR_YUVA_GET_Y(yuv);
|
|
|
|
YUV_GET_RGB(y, u, v, r, g, b);
|
|
argb888 = COLOR_MAKE_BGRA(r, g, b, a);
|
|
return argb888;
|
|
}
|
|
|
|
|
|
static inline lv_color8_t fb_color_to8(lv_color32_t color)
|
|
{
|
|
lv_color8_t ret;
|
|
LV_COLOR_SET_R8(ret, LV_COLOR_GET_R(color) >> 5); /* 8 - 3 = 5*/
|
|
LV_COLOR_SET_G8(ret, LV_COLOR_GET_G(color) >> 5); /* 8 - 3 = 5*/
|
|
LV_COLOR_SET_B8(ret, LV_COLOR_GET_B(color) >> 6); /* 8 - 2 = 6*/
|
|
//printf("%x %x \r\n",ret.full,color.full);
|
|
return ret;
|
|
}
|
|
#if 0
|
|
void PALETTE_PREPARE(void)
|
|
{
|
|
UINT32 i = 0;
|
|
|
|
for (i = 0; i < 256; i++) {
|
|
if(i==0) {
|
|
gDemoKit_Palette_BGRA8888[i] = COLOR_YUV_2_BGRA8888(gDemoKit_Palette_Palette[i], 0x00);
|
|
} else {
|
|
gDemoKit_Palette_BGRA8888[i] = COLOR_YUV_2_BGRA8888(gDemoKit_Palette_Palette[i], 0xff);
|
|
}
|
|
|
|
gDemoKit_Palette_RGB332[i] = fb_color_to8((lv_color32_t)gDemoKit_Palette_BGRA8888[i]);
|
|
}
|
|
}
|
|
#endif
|
|
UINT8 color8_toI8(lv_color8_t color)
|
|
{
|
|
UINT8 i=0;
|
|
printf("color %x \r\n",color.full);
|
|
for(i=0;i<256;i++) {
|
|
if((color.full==0xff)||(color.full==0x24)) {
|
|
printf(" %x index %d \r\n",gDemoKit_Palette_RGB332[i].full,i);
|
|
}
|
|
if(color.full==gDemoKit_Palette_RGB332[i].full){
|
|
//printf("find %x index %d \r\n",color.full,i);
|
|
return i;
|
|
}
|
|
break;
|
|
}
|
|
if(color.full==0xb){
|
|
return 0xe;
|
|
}else {
|
|
printf("%x not in palette table \r\n",color.full);
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
UINT32 COLOR_YUV_2_RGB(UINT32 yuv, UINT32 a)
|
|
{
|
|
INT32 r, g, b;
|
|
UINT32 argb888;
|
|
INT32 y, u, v;
|
|
|
|
v = COLOR_YUVA_GET_V(yuv);
|
|
u = COLOR_YUVA_GET_U(yuv);
|
|
y = COLOR_YUVA_GET_Y(yuv);
|
|
|
|
YUV_GET_RGB(y, u, v, r, g, b);
|
|
argb888 = COLOR_MAKE_RGBA(r, g, b, a);
|
|
return argb888;
|
|
}
|
|
|
|
|
|
#if 0
|
|
void PALETTE_PREPARE_DATA(void)
|
|
{
|
|
UINT32 i = 0;
|
|
uint32_t gDemoKit_Palette_Index8[256];
|
|
|
|
for (i = 0; i < 256; i++) {
|
|
gDemoKit_Palette_Index8[i] = COLOR_YUV_2_RGB(gDemoKit_Palette_Palette[i], 0xff);
|
|
//DBG_DUMP("%d %x \r\n",i,gDemoKit_Palette_Index8[i]);
|
|
}
|
|
gDemoKit_Palette_Index8[0] = COLOR_YUV_2_RGB(gDemoKit_Palette_Palette[0], 0);
|
|
|
|
//copy convert palette to org palette table
|
|
memcpy((void *)gDemoKit_Palette_Palette,(void *)gDemoKit_Palette_Index8,sizeof(UINT32)*256);
|
|
}
|
|
#endif
|
|
|
|
|