123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341 |
- #include "drv_types.h"
- #include "hdmi_dbg.h"
- #include "hdmi_hw.h"
- #include "hdmi_notice.h"
- #include "hdmi_xvycc.h"
- #include <drv_vip_internal.h>
- #ifdef SUPPORT_XVYCC
- void hdmi_handler_xvycc(void)
- {
- VIP_xvYccData XVYccData;
- UINT8 GBG_Profile;
- UINT8 GBD_Color_Space = 0;
- UINT8 GBD_Color_Precision;
- UINT8 Format_Flag;
- UINT32 ulGBD_data[8];
- UINT8 *pubGBD_data;
- ulGBD_data[0] = HDMI_RegisterRead(HDMIRX_0224_DW_0224); //224
- ulGBD_data[1] = HDMI_RegisterRead(HDMIRX_GBD_data_31_0_); //228
- ulGBD_data[2] = HDMI_RegisterRead(HDMIRX_GBD_data_63_32_);
- ulGBD_data[3] = HDMI_RegisterRead(HDMIRX_GBD_data_95_64_);
- ulGBD_data[4] = HDMI_RegisterRead(HDMIRX_GBD_data_127_96_);
- ulGBD_data[5] = HDMI_RegisterRead(HDMIRX_GBD_data_159_128_);
- ulGBD_data[6] = HDMI_RegisterRead(HDMIRX_GBD_data_191_160_);
- ulGBD_data[7] = HDMI_RegisterRead(HDMIRX_GBD_data_223_192_);
- pubGBD_data = (UINT8*)(&ulGBD_data[0]);
-
- GBG_Profile = HDMI_RegisterRead(HDMIRX_GBD_profile_2_0_);
- switch (GBG_Profile)
- {
- case 0:
- hdmidbg(">>xvYCC Profile=0(P0)\n");
- GBD_Color_Space = pubGBD_data[3] & 0x07;//0xbe0e0226[2:0]
- GBD_Color_Precision = (pubGBD_data[3] & 0x18) >> 3; //0xbe0e0226[4:3]
- Format_Flag = (pubGBD_data[3] & 0x80) >> 7; //0xbe0e0226[7]
- if (Format_Flag == 0)
- {
- XVYccData.ucFormat = VERTICES;
- hdmidbg(">>xvYCC Format_Flag=vertices/facets.ucFormat=%d\n", XVYccData.ucFormat);
- switch (GBD_Color_Precision)
- {
- case 0: // 8bits
- XVYccData.ucGBD_Color_Precision = 8;
- //hdmidbg(">>xvYCC GBD_Color_Precision= 8bits. ucGBD_Color_Precision=%d\n", XVYccData.ucGBD_Color_Precision);
- //{0xbe0e022c[0],0xbe0e022b[0],0,0xbe0e022a[1:0],0xbe0e0229[2:0]}
- XVYccData.Vertices.usBlack_MAP_Y = ((((UINT16) pubGBD_data[9]) & 0x01) << 7) | ((((UINT16) pubGBD_data[8]) & 0x01) << 6) | ((((UINT16) pubGBD_data[7]) & 0x03) << 3) | (((UINT16) pubGBD_data[6]) & 0x07);
- XVYccData.Vertices.usBlack_MAP_Cb = ((UINT16) pubGBD_data[10]) & 0xff; // 0xbe0e022d[7:0]
- XVYccData.Vertices.usBlack_MAP_Cr = ((UINT16) pubGBD_data[11]) & 0xff; // 0xbe0e022e[7:0]
- XVYccData.Vertices.usRed_MAP_Y = ((UINT16) pubGBD_data[12]) & 0xff; // 0xbe0e022f[7:0]
- XVYccData.Vertices.usRed_MAP_Cb = ((UINT16) pubGBD_data[13]) & 0xff; // 0xbe0e0230[7:0]
- XVYccData.Vertices.usRed_MAP_Cr = ((UINT16) pubGBD_data[14]) & 0xff; // 0xbe0e0231[7:0]
- XVYccData.Vertices.usGreen_MAP_Y = ((UINT16) pubGBD_data[15]) & 0xff; // 0xbe0e0232[7:0]
- XVYccData.Vertices.usGreen_MAP_Cb = ((UINT16) pubGBD_data[16]) & 0xff; // 0xbe0e0233[7:0]
- XVYccData.Vertices.usGreen_MAP_Cr = ((UINT16) pubGBD_data[17]) & 0xff; // 0xbe0e0234[7:0]
- XVYccData.Vertices.usBlue_MAP_Y = ((UINT16) pubGBD_data[18]) & 0xff; // 0xbe0e0235[7:0]
- XVYccData.Vertices.usBlue_MAP_Cb = ((UINT16) pubGBD_data[19]) & 0xff; // 0xbe0e0236[7:0]
- XVYccData.Vertices.usBlue_MAP_Cr = ((UINT16) pubGBD_data[20]) & 0xff; // 0xbe0e0237[7:0]
- break;
- case 1: // 10bits
- XVYccData.ucGBD_Color_Precision = 10;
- //hdmidbg(">>xvYCC Data Received: GBD_Color_Precision= 10bits. ucGBD_Color_Precision=%d\n", XVYccData.ucGBD_Color_Precision);
- XVYccData.Vertices.usBlack_MAP_Y = ((((UINT16) pubGBD_data[9]) & 0x01) << 9) | ((((UINT16) pubGBD_data[8]) & 0x01) << 8) | ((((UINT16) pubGBD_data[7]) & 0x03) << 5) | ((((UINT16) pubGBD_data[6]) & 0x07) << 2) | ((((UINT16) pubGBD_data[10]) & 0xc0) >> 6);
- XVYccData.Vertices.usBlack_MAP_Cb = ((((UINT16) pubGBD_data[10]) & 0x3f) << 4) | ((((UINT16) pubGBD_data[11]) & 0xf0) >> 4);
- XVYccData.Vertices.usBlack_MAP_Cr = ((((UINT16) pubGBD_data[11]) & 0x0f) << 6) | ((((UINT16) pubGBD_data[12]) & 0xfc) >> 2);
- XVYccData.Vertices.usRed_MAP_Y = ((((UINT16) pubGBD_data[12]) & 0x03) << 8) | (((UINT16) pubGBD_data[13]) & 0xff);
- XVYccData.Vertices.usRed_MAP_Cb = ((((UINT16) pubGBD_data[14]) & 0xff) << 2) | ((((UINT16) pubGBD_data[15]) & 0xc0) >> 6);
- XVYccData.Vertices.usRed_MAP_Cr = ((((UINT16) pubGBD_data[15]) & 0x3f) << 4) | ((((UINT16) pubGBD_data[16]) & 0xf0) >> 4);
- XVYccData.Vertices.usGreen_MAP_Y = ((((UINT16) pubGBD_data[16]) & 0x0f) << 6) | ((((UINT16) pubGBD_data[17]) & 0xfc) >> 2);
- XVYccData.Vertices.usGreen_MAP_Cb = ((((UINT16) pubGBD_data[17]) & 0x03) << 8) | (((UINT16) pubGBD_data[18]) & 0xff);
- XVYccData.Vertices.usGreen_MAP_Cr = ((((UINT16) pubGBD_data[19]) & 0xff) << 2) | ((((UINT16) pubGBD_data[20]) & 0xc0) >> 2);
- XVYccData.Vertices.usBlue_MAP_Y = ((((UINT16) pubGBD_data[20]) & 0x3f) << 4) | ((((UINT16) pubGBD_data[21]) & 0xf0) >> 4);
- XVYccData.Vertices.usBlue_MAP_Cb = ((((UINT16) pubGBD_data[21]) & 0x0f) << 6) | ((((UINT16) pubGBD_data[22]) & 0xfc) >> 2);
- XVYccData.Vertices.usBlue_MAP_Cr = ((((UINT16) pubGBD_data[22]) & 0x03) << 8) | (((UINT16) pubGBD_data[23]) & 0xff);
- break;
- case 2: // 12bits
- XVYccData.ucGBD_Color_Precision = 12;
- //hdmidbg(">>xvYCC Data Received: GBD_Color_Precision= 12bits. ucGBD_Color_Precision=%d\n", XVYccData.ucGBD_Color_Precision);
- XVYccData.Vertices.usBlack_MAP_Y = ((((UINT16) pubGBD_data[9]) & 0x01) << 11) | ((((UINT16) pubGBD_data[8]) & 0x01) << 10) | ((((UINT16) pubGBD_data[7]) & 0x03) << 7) | ((((UINT16) pubGBD_data[6]) & 0x07) << 4) | ((((UINT16) pubGBD_data[10]) & 0xf0) >> 4);
- XVYccData.Vertices.usBlack_MAP_Cb = ((((UINT16) pubGBD_data[10]) & 0x0f) << 8) | (((UINT16) pubGBD_data[11]) & 0xff);
- XVYccData.Vertices.usBlack_MAP_Cr = ((((UINT16) pubGBD_data[12]) & 0xff) << 4) | ((((UINT16) pubGBD_data[13]) & 0xf0) >> 4);
- XVYccData.Vertices.usRed_MAP_Y = ((((UINT16) pubGBD_data[13]) & 0x0f) << 8) | (((UINT16) pubGBD_data[14]) & 0xff);
- XVYccData.Vertices.usRed_MAP_Cb = ((((UINT16) pubGBD_data[15]) & 0xff) << 4) | ((((UINT16) pubGBD_data[16]) & 0xf0) >> 4);
- XVYccData.Vertices.usRed_MAP_Cr = ((((UINT16) pubGBD_data[16]) & 0x0f) << 8) | (((UINT16) pubGBD_data[17]) & 0xff);
- XVYccData.Vertices.usGreen_MAP_Y = ((((UINT16) pubGBD_data[18]) & 0xff) << 4) | ((((UINT16) pubGBD_data[19]) & 0xf0) >> 4);
- XVYccData.Vertices.usGreen_MAP_Cb = ((((UINT16) pubGBD_data[19]) & 0x0f) << 8) | (((UINT16) pubGBD_data[20]) & 0xff);
- XVYccData.Vertices.usGreen_MAP_Cr = ((((UINT16) pubGBD_data[21]) & 0xff) << 4) | ((((UINT16) pubGBD_data[22]) & 0xf0) >> 4);
- XVYccData.Vertices.usBlue_MAP_Y = ((((UINT16) pubGBD_data[22]) & 0x0f) << 8) | (((UINT16) pubGBD_data[23]) & 0xff);
- XVYccData.Vertices.usBlue_MAP_Cb = ((((UINT16) pubGBD_data[24]) & 0xff) << 4) | ((((UINT16) pubGBD_data[25]) & 0xf0) >> 4);
- XVYccData.Vertices.usBlue_MAP_Cr = ((((UINT16) pubGBD_data[25]) & 0x0f) << 8) | (((UINT16) pubGBD_data[26]) & 0xff);
- break;
- default: // Unkown
- hdmidbg(">>xvYCC Data Received: GBD_Color_Precision= Unknow\n");
- break;
- }
- hdmidbg(">>xvYCC GBD Color_Precision=%d\n", XVYccData.ucGBD_Color_Precision);
- hdmidbg(">>usBlack_MAP_Y=0x%x. usBlack_MAP_Cb=0x%x. usBlack_MAP_Cr=0x%x\n", XVYccData.Vertices.usBlack_MAP_Y, XVYccData.Vertices.usBlack_MAP_Cb, XVYccData.Vertices.usBlack_MAP_Cr);
- hdmidbg(">>usRed_MAP_Y=0x%x. usRed_MAP_Cb=0x%x. usRed_MAP_Cr=0x%x\n", XVYccData.Vertices.usRed_MAP_Y, XVYccData.Vertices.usRed_MAP_Cb, XVYccData.Vertices.usRed_MAP_Cr);
- hdmidbg(">>usGreen_MAP_Y=0x%x. usGreen_MAP_Cb=0x%x. usGreen_MAP_Cr=0x%x\n", XVYccData.Vertices.usGreen_MAP_Y, XVYccData.Vertices.usGreen_MAP_Cb, XVYccData.Vertices.usGreen_MAP_Cr);
- hdmidbg(">>usBlue_MAP_Y=0x%x. usBlue_MAP_Cb=0x%x. usBlue_MAP_Cr=0x%x\n", XVYccData.Vertices.usBlue_MAP_Y, XVYccData.Vertices.usBlue_MAP_Cb, XVYccData.Vertices.usBlue_MAP_Cr);
- }
- else if (Format_Flag == 1)
- {
- XVYccData.ucFormat = GAMUT_RANGE;
- hdmidbg(">>xvYCC Format_Flag=gamut range.ucFormat=%d\n", XVYccData.ucFormat);
- switch (GBD_Color_Precision)
- {
- case 0: // 8bits
- XVYccData.ucGBD_Color_Precision = 8;
- //hdmidbg(">>xvYCC Data Received: GBD_Color_Precision= 8bits. ucGBD_Color_Precision=%d\n", XVYccData.ucGBD_Color_Precision);
- XVYccData.GamutRange.usMin_Red_data = ((UINT16) pubGBD_data[4]) & 0xff;// {0xbe0e0227[7:0]}
- XVYccData.GamutRange.usMax_Red_data = ((UINT16) pubGBD_data[5]) & 0xff;// {0xbe0e0228[7:0]}
- XVYccData.GamutRange.usMin_Green_data = ((((UINT16) pubGBD_data[9]) & 0x01) << 7) | ((((UINT16) pubGBD_data[8]) & 0x01) << 6) | ((((UINT16) pubGBD_data[7]) & 0x03) << 3) | (((UINT16) pubGBD_data[6]) & 0x07);
- XVYccData.GamutRange.usMax_Green_data = ((UINT16) pubGBD_data[10]) & 0xff; // 0xbe0e022d[7:0]
- XVYccData.GamutRange.usMin_Blue_data = ((UINT16) pubGBD_data[11]) & 0xff; // 0xbe0e022e[7:0]
- XVYccData.GamutRange.usMax_Blue_data = ((UINT16) pubGBD_data[12]) & 0xff; // 0xbe0e022f[7:0]
- break;
- case 1: // 10bits
- XVYccData.ucGBD_Color_Precision = 10;
- //hdmidbg(">>xvYCC Data Received: GBD_Color_Precision= 10bits. ucGBD_Color_Precision=%d\n", XVYccData.ucGBD_Color_Precision);
- XVYccData.GamutRange.usMin_Red_data = ((((UINT16) pubGBD_data[4]) & 0xff) << 2) | ((((UINT16) pubGBD_data[5]) & 0xc0) >> 6);
- XVYccData.GamutRange.usMax_Red_data = ((((UINT16) pubGBD_data[5]) & 0x3f) << 4) | ((((UINT16) pubGBD_data[9]) & 0x01) << 3) | ((((UINT16) pubGBD_data[8]) & 0x01) << 2) | ((((UINT16) pubGBD_data[7]) & 0x2) >> 1);
- XVYccData.GamutRange.usMin_Green_data = ((((UINT16) pubGBD_data[7]) & 0x01) << 9) | ((((UINT16) pubGBD_data[6]) & 0x07) << 6) | ((((UINT16) pubGBD_data[10]) & 0xf3) >> 2);
- XVYccData.GamutRange.usMax_Green_data = ((((UINT16) pubGBD_data[10]) & 0x03) << 8) | (((UINT16) pubGBD_data[11]) & 0xff);
- XVYccData.GamutRange.usMin_Blue_data = ((((UINT16) pubGBD_data[12]) & 0xff) << 2) | ((((UINT16) pubGBD_data[13]) & 0xc0) >> 6);
- XVYccData.GamutRange.usMax_Blue_data = ((((UINT16) pubGBD_data[13]) & 0x3f) << 4) | ((((UINT16) pubGBD_data[14]) & 0xf0) >> 4);
- break;
- case 2: // 12bits
- XVYccData.ucGBD_Color_Precision = 12;
- //hdmidbg(">>xvYCC Data Received: GBD_Color_Precision= 12bits. ucGBD_Color_Precision=%d\n", XVYccData.ucGBD_Color_Precision);
- XVYccData.GamutRange.usMin_Red_data = ((((UINT16) pubGBD_data[4]) & 0xff) << 4) | ((((UINT16) pubGBD_data[5]) & 0xf0) >> 4);
- XVYccData.GamutRange.usMax_Red_data = ((((UINT16) pubGBD_data[5]) & 0x0f) << 8) | ((((UINT16) pubGBD_data[9]) & 0x01) << 7) | ((((UINT16) pubGBD_data[8]) & 0x01) << 6) | ((((UINT16) pubGBD_data[7]) & 0x03) << 3) | (((UINT16) pubGBD_data[6]) & 0x07);
- XVYccData.GamutRange.usMin_Green_data = ((((UINT16) pubGBD_data[10]) & 0xff) << 4) | ((((UINT16) pubGBD_data[11]) & 0xf0) >> 4);
- XVYccData.GamutRange.usMax_Green_data = ((((UINT16) pubGBD_data[11]) & 0x0f) << 8) | (((UINT16) pubGBD_data[12]) & 0xff);
- XVYccData.GamutRange.usMin_Blue_data = ((((UINT16) pubGBD_data[13]) & 0xff) << 4) | ((((UINT16) pubGBD_data[14]) & 0xf0) >> 4);
- XVYccData.GamutRange.usMax_Blue_data = ((((UINT16) pubGBD_data[14]) & 0x0f) << 8) | (((UINT16) pubGBD_data[15]) & 0xff);
- break;
- default: // Unkown
- hdmidbg(">>xvYCC GBD_Color_Precision= Unknow\n");
- break;
- }
- hdmidbg(">>xvYCC GBD_Color_Precision=%d\n", XVYccData.ucGBD_Color_Precision);
- hdmidbg(">>usMin_Red_data=0x%x. usMax_Red_data=0x%x\n", XVYccData.GamutRange.usMin_Red_data, XVYccData.GamutRange.usMax_Red_data);
- hdmidbg(">>usMin_Green_data=0x%x. usMax_Green_data=0x%x\n", XVYccData.GamutRange.usMin_Green_data, XVYccData.GamutRange.usMax_Green_data);
- hdmidbg(">>usMin_Blue_data=0x%x. usMax_Blue_data=0x%x\n", XVYccData.GamutRange.usMin_Blue_data, XVYccData.GamutRange.usMax_Blue_data);
- }
- else
- {
- hdmidbg(">>xvYCC Error: Format_Flag=Unkown\n");
- }
- break;
- case 1:
- case 2:
- case 3:
- hdmidbg(">>xvYCC Profile=%d(P%d)\n", GBG_Profile, GBG_Profile);
- GBD_Color_Space = pubGBD_data[6] & 0x07;//0xbe0e0229[2:0]
- GBD_Color_Precision = (pubGBD_data[7] & 0x18) >> 3; //0xbe0e022a[4:3]
- Format_Flag = pubGBD_data[9] & 0x01;//0xbe0e022c[0]
- if (Format_Flag == 0)
- {
- XVYccData.ucFormat = VERTICES;
- hdmidbg(">>xvYCC Format_Flag=vertices/facets.ucFormat=%d\n", XVYccData.ucFormat);
- switch (GBD_Color_Precision)
- {
- case 0: // 8bits
- XVYccData.ucGBD_Color_Precision = 8;
- //hdmidbg(">>xvYCC Data Received: GBD_Color_Precision= 8bits. ucGBD_Color_Precision=%d\n", XVYccData.ucGBD_Color_Precision);
- XVYccData.Vertices.usBlack_MAP_Y = ((UINT16) pubGBD_data[10]) & 0xff; // 0xbe0e022d[7:0]
- XVYccData.Vertices.usBlack_MAP_Cb = ((UINT16) pubGBD_data[11]) & 0xff ; // 0xbe0e022e[7:0]
- XVYccData.Vertices.usBlack_MAP_Cr = ((UINT16) pubGBD_data[12]) & 0xff; // 0xbe0e022f[7:0]
- XVYccData.Vertices.usRed_MAP_Y = ((UINT16) pubGBD_data[13]) & 0xff; // 0xbe0e0230[7:0]
- XVYccData.Vertices.usRed_MAP_Cb = ((UINT16) pubGBD_data[14]) & 0xff; // 0xbe0e0231[7:0]
- XVYccData.Vertices.usRed_MAP_Cr = ((UINT16) pubGBD_data[15]) & 0xff; // 0xbe0e0232[7:0]
- XVYccData.Vertices.usGreen_MAP_Y = ((UINT16) pubGBD_data[16]) & 0xff; // 0xbe0e0233[7:0]
- XVYccData.Vertices.usGreen_MAP_Cb = ((UINT16) pubGBD_data[17]) & 0xff; // 0xbe0e0234[7:0]
- XVYccData.Vertices.usGreen_MAP_Cr = ((UINT16) pubGBD_data[18]) & 0xff; // 0xbe0e0235[7:0]
- XVYccData.Vertices.usBlue_MAP_Y = ((UINT16) pubGBD_data[19]) & 0xff; // 0xbe0e0236[7:0]
- XVYccData.Vertices.usBlue_MAP_Cb = ((UINT16) pubGBD_data[20]) & 0xff; // 0xbe0e0237[7:0]
- XVYccData.Vertices.usBlue_MAP_Cr = ((UINT16) pubGBD_data[21]) & 0xff; // 0xbe0e0238[7:0]
- break;
- case 1: // 10bits
- XVYccData.ucGBD_Color_Precision = 10;
- //hdmidbg(">>xvYCC Data Received: GBD_Color_Precision= 10bits. ucGBD_Color_Precision=%d\n", XVYccData.ucGBD_Color_Precision);
- XVYccData.Vertices.usBlack_MAP_Y = ((((UINT16) pubGBD_data[10]) & 0xff) << 2) | ((((UINT16) pubGBD_data[11]) & 0xc0) >> 6);
- XVYccData.Vertices.usBlack_MAP_Cb = ((((UINT16) pubGBD_data[11]) & 0x3f) << 4) | ((((UINT16) pubGBD_data[12]) & 0xf0) >> 4);
- XVYccData.Vertices.usBlack_MAP_Cr = ((((UINT16) pubGBD_data[12]) & 0x0f) << 6) | ((((UINT16) pubGBD_data[13]) & 0xfc) >> 2);
- XVYccData.Vertices.usRed_MAP_Y = ((((UINT16) pubGBD_data[13]) & 0x03) << 8) | (((UINT16) pubGBD_data[14]) & 0xff);
- XVYccData.Vertices.usRed_MAP_Cb = ((((UINT16) pubGBD_data[15]) & 0xff) << 2) | ((((UINT16) pubGBD_data[16]) & 0xc0) >> 6);;
- XVYccData.Vertices.usRed_MAP_Cr = ((((UINT16) pubGBD_data[16]) & 0x3f) << 4) | ((((UINT16) pubGBD_data[17]) & 0xf0) >> 4);
- XVYccData.Vertices.usGreen_MAP_Y = ((((UINT16) pubGBD_data[17]) & 0x0f) << 6) | ((((UINT16) pubGBD_data[18]) & 0xfc) >> 2);
- XVYccData.Vertices.usGreen_MAP_Cb = ((((UINT16) pubGBD_data[18]) & 0x03) << 8) | (((UINT16) pubGBD_data[19]) & 0xff);
- XVYccData.Vertices.usGreen_MAP_Cr = ((((UINT16) pubGBD_data[20]) & 0xff) << 2) | ((((UINT16) pubGBD_data[21]) & 0xc0) >> 6);
- XVYccData.Vertices.usBlue_MAP_Y = ((((UINT16) pubGBD_data[21]) & 0x3f) << 4) | ((((UINT16) pubGBD_data[22]) & 0xf0) >> 4);
- XVYccData.Vertices.usBlue_MAP_Cb = ((((UINT16) pubGBD_data[22]) & 0x0f) << 6) | ((((UINT16) pubGBD_data[23]) & 0xfc) >> 2);
- XVYccData.Vertices.usBlue_MAP_Cr = ((((UINT16) pubGBD_data[23]) & 0x03) << 8) | (((UINT16) pubGBD_data[24]) & 0xff);
- break;
- case 2: // 12bits
- XVYccData.ucGBD_Color_Precision = 12;
- //hdmidbg(">>xvYCC Data Received: GBD_Color_Precision= 12bits. ucGBD_Color_Precision=%d\n", XVYccData.ucGBD_Color_Precision);
- XVYccData.Vertices.usBlack_MAP_Y = ((((UINT16) pubGBD_data[10]) & 0xff) << 4) | ((((UINT16) pubGBD_data[11]) & 0xf0) >> 4);
- XVYccData.Vertices.usBlack_MAP_Cb = ((((UINT16) pubGBD_data[11]) & 0x0f) << 8) | (((UINT16) pubGBD_data[12]) & 0xff);
- XVYccData.Vertices.usBlack_MAP_Cr = ((((UINT16) pubGBD_data[13]) & 0xff) << 4) | ((((UINT16) pubGBD_data[14]) & 0xf0) >> 4);
- XVYccData.Vertices.usRed_MAP_Y = ((((UINT16) pubGBD_data[14]) & 0x0f) << 8) | (((UINT16) pubGBD_data[15]) & 0xff);
- XVYccData.Vertices.usRed_MAP_Cb = ((((UINT16) pubGBD_data[16]) & 0xff) << 4) | ((((UINT16) pubGBD_data[17]) & 0xf0) >> 4);
- XVYccData.Vertices.usRed_MAP_Cr = ((((UINT16) pubGBD_data[17]) & 0x0f) << 8) | (((UINT16) pubGBD_data[18]) & 0xff);
- XVYccData.Vertices.usGreen_MAP_Y = ((((UINT16) pubGBD_data[19]) & 0xff) << 4) | ((((UINT16) pubGBD_data[20]) & 0xf0) >> 4);
- XVYccData.Vertices.usGreen_MAP_Cb = ((((UINT16) pubGBD_data[20]) & 0x0f) << 8) | (((UINT16) pubGBD_data[21]) & 0xff);
- XVYccData.Vertices.usGreen_MAP_Cr = ((((UINT16) pubGBD_data[22]) & 0xff) << 4) | ((((UINT16) pubGBD_data[23]) & 0xf0) >> 4);
- XVYccData.Vertices.usBlue_MAP_Y = ((((UINT16) pubGBD_data[23]) & 0x0f) << 8) | (((UINT16) pubGBD_data[24]) & 0xff);
- XVYccData.Vertices.usBlue_MAP_Cb = ((((UINT16) pubGBD_data[25]) & 0xff) << 4) | ((((UINT16) pubGBD_data[26]) & 0xf0) >> 4);
- XVYccData.Vertices.usBlue_MAP_Cr = ((((UINT16) pubGBD_data[26]) & 0x0f) << 8) | (((UINT16) pubGBD_data[27]) & 0xff);
- break;
- default: // Unkown
- hdmidbg(">>xvYCC Data Received: GBD_Color_Precision= Unknow\n");
- break;
- }
- hdmidbg(">>xvYCC GBD_Color_Precision=%d\n", XVYccData.ucGBD_Color_Precision);
- hdmidbg(">>usBlack_MAP_Y=0x%x. usBlack_MAP_Cb=0x%x. usBlack_MAP_Cr=0x%x\n", XVYccData.Vertices.usBlack_MAP_Y, XVYccData.Vertices.usBlack_MAP_Cb, XVYccData.Vertices.usBlack_MAP_Cr);
- hdmidbg(">>usRed_MAP_Y=0x%x. usRed_MAP_Cb=0x%x. usRed_MAP_Cr=0x%x\n", XVYccData.Vertices.usRed_MAP_Y, XVYccData.Vertices.usRed_MAP_Cb, XVYccData.Vertices.usRed_MAP_Cr);
- hdmidbg(">>usGreen_MAP_Y=0x%x. usGreen_MAP_Cb=0x%x. usGreen_MAP_Cr=0x%x\n", XVYccData.Vertices.usGreen_MAP_Y, XVYccData.Vertices.usGreen_MAP_Cb, XVYccData.Vertices.usGreen_MAP_Cr);
- hdmidbg(">>usBlue_MAP_Y=0x%x. usBlue_MAP_Cb=0x%x. usBlue_MAP_Cr=0x%x\n", XVYccData.Vertices.usBlue_MAP_Y, XVYccData.Vertices.usBlue_MAP_Cb, XVYccData.Vertices.usBlue_MAP_Cr);
- }
- else if (Format_Flag == 1)
- {
- XVYccData.ucFormat = GAMUT_RANGE;
- hdmidbg(">>xvYCC Format_Flag=gamut range.ucFormat=%d\n", XVYccData.ucFormat);
- switch (GBD_Color_Precision)
- {
- case 0: // 8bits
- XVYccData.ucGBD_Color_Precision = 8;
- //hdmidbg(">>xvYCC Data Received: GBD_Color_Precision= 8bits. ucGBD_Color_Precision=%d\n", XVYccData.ucGBD_Color_Precision);
- XVYccData.GamutRange.usMin_Red_data = ((UINT16) pubGBD_data[10]) & 0xff;// {0xbe0e022d[7:0]}
- XVYccData.GamutRange.usMax_Red_data = ((UINT16) pubGBD_data[11]) & 0xff;// {0xbe0e022e[7:0]}
- XVYccData.GamutRange.usMin_Green_data = ((UINT16) pubGBD_data[12]) & 0xff;// {0xbe0e022f[7:0]}
- XVYccData.GamutRange.usMax_Green_data = ((UINT16) pubGBD_data[13]) & 0xff; // 0xbe0e0230[7:0]
- XVYccData.GamutRange.usMin_Blue_data = ((UINT16) pubGBD_data[14]) & 0xff; // 0xbe0e0231[7:0]
- XVYccData.GamutRange.usMax_Blue_data = ((UINT16) pubGBD_data[15]) & 0xff; // 0xbe0e0232[7:0]
- break;
- case 1: // 10bits
- XVYccData.ucGBD_Color_Precision = 10;
- //hdmidbg(">>xvYCC Data Received: GBD_Color_Precision= 10bits. ucGBD_Color_Precision=%d\n", XVYccData.ucGBD_Color_Precision);
- XVYccData.GamutRange.usMin_Red_data = ((((UINT16) pubGBD_data[10]) & 0xff) << 2) | ((((UINT16) pubGBD_data[11]) & 0xfc) >> 2);
- XVYccData.GamutRange.usMax_Red_data = ((((UINT16) pubGBD_data[11]) & 0x3f) << 4) | ((((UINT16) pubGBD_data[12]) & 0xf0) >> 4);
- XVYccData.GamutRange.usMin_Green_data = ((((UINT16) pubGBD_data[12]) & 0x0f) << 8) | (((UINT16) pubGBD_data[13]) & 0xff);
- XVYccData.GamutRange.usMax_Green_data = ((((UINT16) pubGBD_data[13]) & 0x03) << 8) | (((UINT16) pubGBD_data[14]) & 0xff);
- XVYccData.GamutRange.usMin_Blue_data = ((((UINT16) pubGBD_data[15]) & 0xff) << 2) | ((((UINT16) pubGBD_data[16]) & 0xfc) >> 2);
- XVYccData.GamutRange.usMax_Blue_data = ((((UINT16) pubGBD_data[16]) & 0x3f) << 4) | ((((UINT16) pubGBD_data[17]) & 0xf0) >> 4);
- break;
- case 2: // 12bits
- XVYccData.ucGBD_Color_Precision = 12;
- //hdmidbg(">>xvYCC Data Received: GBD_Color_Precision= 12bits. ucGBD_Color_Precision=%d\n", XVYccData.ucGBD_Color_Precision);
- XVYccData.GamutRange.usMin_Red_data = ((((UINT16) pubGBD_data[10]) & 0xff) << 4) | ((((UINT16) pubGBD_data[11]) & 0xf0) >> 4);
- XVYccData.GamutRange.usMax_Red_data = ((((UINT16) pubGBD_data[11]) & 0x0f) << 8) | (((UINT16) pubGBD_data[12]) & 0xff);
- XVYccData.GamutRange.usMin_Green_data = ((((UINT16) pubGBD_data[13]) & 0xff) << 4) | ((((UINT16) pubGBD_data[14]) & 0xf0) >> 4);
- XVYccData.GamutRange.usMax_Green_data = ((((UINT16) pubGBD_data[14]) & 0x0f) << 8) | (((UINT16) pubGBD_data[15]) & 0xff);
- XVYccData.GamutRange.usMin_Blue_data = ((((UINT16) pubGBD_data[16]) & 0xff) << 4) | ((((UINT16) pubGBD_data[17]) & 0xf0) >> 4);
- XVYccData.GamutRange.usMax_Blue_data = ((((UINT16) pubGBD_data[17]) & 0x0f) << 8) | (((UINT16) pubGBD_data[18]) & 0xff);
- break;
- default: // Unkown
- hdmidbg(">>xvYCC GBD_Color_Precision= Unknow\n");
- break;
- }
- hdmidbg(">>xvYCC GBD_Color_Precision=%d\n", XVYccData.ucGBD_Color_Precision);
- hdmidbg(">>usMin_Red_data=0x%x. usMax_Red_data=0x%x\n", XVYccData.GamutRange.usMin_Red_data, XVYccData.GamutRange.usMax_Red_data);
- hdmidbg(">>usMin_Green_data=0x%x. usMax_Green_data=0x%x\n", XVYccData.GamutRange.usMin_Green_data, XVYccData.GamutRange.usMax_Green_data);
- hdmidbg(">>usMin_Blue_data=0x%x. usMax_Blue_data=0x%x\n", XVYccData.GamutRange.usMin_Blue_data, XVYccData.GamutRange.usMax_Blue_data);
- }
- else
- {
- hdmidbg("xvYCC Error: Format_Flag=Unkown\n");
- }
- break;
- case 4:
- case 5:
- case 6:
- case 7:
- hdmidbg("Not defined Profile=%d\n", GBG_Profile);
- break;
- }
- switch (GBD_Color_Space)
- {
- case xvYCC_RGB:
- hdmidbg("xvYCC_RGB\n");
- XVYccData.ucGBD_Color_Space = xvYCC_RGB;
- break;
- case xvYCC601:
- hdmidbg("xvYCC601\n");
- XVYccData.ucGBD_Color_Space = xvYCC601;
- break;
- case xvYCC709:
- hdmidbg("xvYCC709\n");
- XVYccData.ucGBD_Color_Space = xvYCC709;
- break;
- case XYZ:
- hdmidbg("XYZ\n");
- XVYccData.ucGBD_Color_Space = XYZ;
- break;
- default:
- hdmidbg("xvYCC_UNKNOWN_METRY\n");
- XVYccData.ucGBD_Color_Space = xvYCC_UNKNOWN_METRY;
- break;
- }
- }
- #endif
|