580.94.16

This commit is contained in:
russellcnv
2026-01-22 14:46:29 -08:00
parent a3af2867b7
commit c273d84a8b
68 changed files with 160855 additions and 160151 deletions

View File

@@ -1265,6 +1265,8 @@ void updateColorFormatAndBpcTiming(NVT_EDID_INFO *pInfo)
// DisplayId2.0 spec has its own way of determining color format support which includes bpc + color format
updateColorFormatForDisplayId20ExtnTimings(pInfo, i);
}
updateBpcForYuv420OnlyTiming(&pInfo->timing[i], &pInfo->ext861);
}
// Go through all the timings and set CTA format accordingly. If a timing is a CTA 861b timing, store the

View File

@@ -284,7 +284,8 @@ static const NVT_TIMING EIA861B[]=
// the end
EIA_TIMING(0,0,0,0,'-',0,0,0,0,'-',0,'p',4:3,0,0)
};
static NvU32 MAX_CEA861B_FORMAT = sizeof(EIA861B)/sizeof(EIA861B[0]) - 1;
static const NvU32 MAX_CEA861B_FORMAT = sizeof(EIA861B)/sizeof(EIA861B[0]) - 1;
static const NvU32 EIA861B_DUAL_ASPECT_VICS[][2] =
{
@@ -972,6 +973,40 @@ void parse861bShortYuv420Timing(NVT_EDID_CEA861_INFO *pExt861,
}
}
// If a timing is present in the YUV420 VDB, consider it
// incompatible with other sampling modes
CODE_SEGMENT(PAGE_DD_CODE)
void updateBpcForYuv420OnlyTiming(NVT_TIMING *pT,
const NVT_EDID_CEA861_INFO *p861Info)
{
NvU32 i;
const NvU8 *pYuv420Vic = p861Info->svd_y420vdb;
NvBool yuv420Only = NV_FALSE;
for (i = 0; i < p861Info->total_y420vdb; i++)
{
NVT_TIMING y420vdbTiming;
NvU8 vic = NVT_GET_CTA_8BIT_VIC(pYuv420Vic[i]);
if (vic == 0 || vic > MAX_CEA861B_FORMAT)
continue;
y420vdbTiming = EIA861B[vic-1];
if (NvTiming_IsTimingExactEqual(pT, &y420vdbTiming))
{
yuv420Only = NV_TRUE;
break;
}
}
if (yuv420Only)
{
pT->etc.rgb444.bpcs = 0;
pT->etc.yuv444.bpcs = 0;
pT->etc.yuv422.bpcs = 0;
}
}
// Currently, the SVR both used in the NVRDB and VFPDB.
// "One particular application is a Sink that prefers a Video Format that is not listed as an SVD in a VDB
// but instead listed in a YCBCR 4:2:0 Video Data Block"

View File

@@ -77,6 +77,7 @@ NVT_STATUS parseCta861DataBlockInfo(NvU8 *pEdid, NvU32 size, NVT_EDID_CEA861_INF
void parse861ExtDetailedTiming(NvU8 *pEdidExt, NvU8 basicCaps, NVT_EDID_INFO *pInfo);
void parse861bShortTiming(NVT_EDID_CEA861_INFO *pExt861, void *pRawInfo, NVT_CTA861_ORIGIN flag);
void parse861bShortYuv420Timing(NVT_EDID_CEA861_INFO *pExt861, void *pRawInfo, NVT_CTA861_ORIGIN flag);
void updateBpcForYuv420OnlyTiming(NVT_TIMING *pT, const NVT_EDID_CEA861_INFO *p861Info);
void parseCta861VideoFormatDataBlock(NVT_EDID_CEA861_INFO *pExt861, void *pRawInfo);
void parseCta861NativeOrPreferredTiming(NVT_EDID_CEA861_INFO *pExt861, void *pRawInfo, NVT_CTA861_ORIGIN flag);
void parseCta861VsdbBlocks(NVT_EDID_CEA861_INFO *pExt861, void *pRawInfo, NVT_CTA861_ORIGIN flag);