video_common: Added a function to check if a given resolution is supported.

Only checking established timings for now.

Signed-off-by: Andrei-Liviu Simion <andrei.simion@xilinx.com>
This commit is contained in:
Andrei-Liviu Simion 2014-12-11 17:52:32 -08:00 committed by Nava kishore Manne
parent 1c1725f010
commit 5ea8a4237e
2 changed files with 110 additions and 0 deletions

View file

@ -56,6 +56,7 @@
/**************************** Function Prototypes *****************************/ /**************************** Function Prototypes *****************************/
static u32 XEdid_IsVideoTimingSupportedEstablishedTimings(u8 *EdidRaw, XVid_VideoTimingMode *VtMode);
static float XVid_CalculatePower(float Base, u8 Power); static float XVid_CalculatePower(float Base, u8 Power);
static float XVid_CalculateBinaryFraction(u16 Val, u8 DecPtIndex); static float XVid_CalculateBinaryFraction(u16 Val, u8 DecPtIndex);
@ -186,6 +187,110 @@ u16 XEDID_GET_STD_TIMINGS_V(u8 *EdidRaw, u8 StdTimingsNum)
return V; return V;
} }
u32 XEdid_IsVideoTimingSupported(u8 *EdidRaw, XVid_VideoTimingMode *VtMode)
{
u32 Status;
/* First, check established timings I, II, and III. */
Status = XEdid_IsVideoTimingSupportedEstablishedTimings(EdidRaw, VtMode);
return Status;
}
static u32 XEdid_IsVideoTimingSupportedEstablishedTimings(u8 *EdidRaw, XVid_VideoTimingMode *VtMode)
{
u32 Status = XST_FAILURE;
/* First, check established timings I, II, and III. */
if ((VtMode->Timing.HActive == 800) && (VtMode->Timing.VActive == 640) &&
(VtMode->FrameRate == XVID_FR_56HZ) &&
XEDID_SUPP_EST_TIMINGS_800x600_56(EdidRaw)) {
Status = XST_SUCCESS;
}
else if ((VtMode->Timing.HActive == 640) && (VtMode->Timing.VActive == 480) &&
(VtMode->FrameRate == XVID_FR_60HZ) &&
XEDID_SUPP_EST_TIMINGS_640x480_60(EdidRaw)) {
Status = XST_SUCCESS;
}
else if ((VtMode->Timing.HActive == 800) && (VtMode->Timing.VActive == 600) &&
(VtMode->FrameRate == XVID_FR_60HZ) &&
XEDID_SUPP_EST_TIMINGS_800x600_60(EdidRaw)) {
Status = XST_SUCCESS;
}
else if ((VtMode->Timing.HActive == 1024) && (VtMode->Timing.VActive == 768) &&
(VtMode->FrameRate == XVID_FR_60HZ) &&
XEDID_SUPP_EST_TIMINGS_1024x768_60(EdidRaw)) {
Status = XST_SUCCESS;
}
else if ((VtMode->Timing.HActive == 640) && (VtMode->Timing.VActive == 480) &&
(VtMode->FrameRate == XVID_FR_67HZ) &&
XEDID_SUPP_EST_TIMINGS_640x480_67(EdidRaw)) {
Status = XST_SUCCESS;
}
else if ((VtMode->Timing.HActive == 720) && (VtMode->Timing.VActive == 400) &&
(VtMode->FrameRate == XVID_FR_70HZ) &&
XEDID_SUPP_EST_TIMINGS_720x400_70(EdidRaw)) {
Status = XST_SUCCESS;
}
else if ((VtMode->Timing.HActive == 1024) && (VtMode->Timing.VActive == 768) &&
(VtMode->FrameRate == XVID_FR_70HZ) &&
XEDID_SUPP_EST_TIMINGS_1024x768_70(EdidRaw)) {
Status = XST_SUCCESS;
}
else if ((VtMode->Timing.HActive == 640) && (VtMode->Timing.VActive == 480) &&
(VtMode->FrameRate == XVID_FR_72HZ) &&
XEDID_SUPP_EST_TIMINGS_640x480_72(EdidRaw)) {
Status = XST_SUCCESS;
}
else if ((VtMode->Timing.HActive == 800) && (VtMode->Timing.VActive == 600) &&
(VtMode->FrameRate == XVID_FR_72HZ) &&
XEDID_SUPP_EST_TIMINGS_800x600_72(EdidRaw)) {
Status = XST_SUCCESS;
}
else if ((VtMode->Timing.HActive == 640) && (VtMode->Timing.VActive == 480) &&
(VtMode->FrameRate == XVID_FR_75HZ) &&
XEDID_SUPP_EST_TIMINGS_640x480_75(EdidRaw)) {
Status = XST_SUCCESS;
}
else if ((VtMode->Timing.HActive == 800) && (VtMode->Timing.VActive == 600) &&
(VtMode->FrameRate == XVID_FR_75HZ) &&
XEDID_SUPP_EST_TIMINGS_800x600_75(EdidRaw)) {
Status = XST_SUCCESS;
}
else if ((VtMode->Timing.HActive == 832) && (VtMode->Timing.VActive == 624) &&
(VtMode->FrameRate == XVID_FR_75HZ) &&
XEDID_SUPP_EST_TIMINGS_832x624_75(EdidRaw)) {
Status = XST_SUCCESS;
}
else if ((VtMode->Timing.HActive == 1024) && (VtMode->Timing.VActive == 768) &&
(VtMode->FrameRate == XVID_FR_75HZ) &&
XEDID_SUPP_EST_TIMINGS_1024x768_75(EdidRaw)) {
Status = XST_SUCCESS;
}
else if ((VtMode->Timing.HActive == 1152) && (VtMode->Timing.VActive == 870) &&
(VtMode->FrameRate == XVID_FR_75HZ) &&
XEDID_SUPP_EST_TIMINGS_1152x870_75(EdidRaw)) {
Status = XST_SUCCESS;
}
else if ((VtMode->Timing.HActive == 1280) && (VtMode->Timing.VActive == 1024) &&
(VtMode->FrameRate == XVID_FR_75HZ) &&
XEDID_SUPP_EST_TIMINGS_1280x1024_75(EdidRaw)) {
Status = XST_SUCCESS;
}
else if ((VtMode->Timing.HActive == 1024) && (VtMode->Timing.VActive == 768) &&
(VtMode->FrameRate == XVID_FR_87HZ) &&
XEDID_SUPP_EST_TIMINGS_1024x768_87(EdidRaw)) {
Status = XST_SUCCESS;
}
else if ((VtMode->Timing.HActive == 720) && (VtMode->Timing.VActive == 400) &&
(VtMode->FrameRate == XVID_FR_88HZ) &&
XEDID_SUPP_EST_TIMINGS_720x400_88(EdidRaw)) {
Status = XST_SUCCESS;
}
return Status;
}
/******************************************************************************/ /******************************************************************************/
/** /**
* Perform a power operation. * Perform a power operation.

View file

@ -58,6 +58,8 @@
/******************************* Include Files ********************************/ /******************************* Include Files ********************************/
#include "xil_types.h" #include "xil_types.h"
#include "xstatus.h"
#include "xvid.h"
/************************** Constant Definitions ******************************/ /************************** Constant Definitions ******************************/
@ -368,4 +370,7 @@ u16 XEDID_GET_STD_TIMINGS_V(u8 *EdidRaw, u8 StdTimingsNum);
/* Checksum. */ /* Checksum. */
#define XEDID_GET_CHECKSUM(E) (E[XEDID_CHECKSUM]) #define XEDID_GET_CHECKSUM(E) (E[XEDID_CHECKSUM])
/* Utility functions. */
u32 XEdid_IsVideoTimingSupported(u8 *EdidRaw, XVid_VideoTimingMode *VtMode);
#endif /* XEDID_H_ */ #endif /* XEDID_H_ */