322 lines
12 KiB
C
322 lines
12 KiB
C
|
|
/************************************************************************/
|
|
/* */
|
|
/* CVTVDIF.H */
|
|
/* */
|
|
/* July 12 1995 (c) 1993, 1995 ATI Technologies Incorporated. */
|
|
/************************************************************************/
|
|
|
|
/********************** PolyTron RCS Utilities
|
|
|
|
$Revision: 1.3 $
|
|
$Date: 11 Jan 1996 19:40:34 $
|
|
$Author: RWolff $
|
|
$Log: S:/source/wnt/ms11/miniport/archive/cvtvdif.h_v $
|
|
*
|
|
* Rev 1.3 11 Jan 1996 19:40:34 RWolff
|
|
* Added field for maximum supported pixel clock frequency to VDIFInputs
|
|
* structure.
|
|
*
|
|
* Rev 1.2 30 Oct 1995 12:11:56 MGrubac
|
|
* Fixed bug in calculating CRTC parameters based on read in data from VDIF files.
|
|
*
|
|
* Rev 1.1 26 Jul 1995 12:54:54 mgrubac
|
|
* Changed members of stVDIFCallbackData structure.
|
|
*
|
|
* Rev 1.0 20 Jul 1995 18:23:32 mgrubac
|
|
* Initial revision.
|
|
|
|
|
|
End of PolyTron RCS section *****************/
|
|
|
|
|
|
|
|
/*
|
|
* Prototypes for functions supplied by CVTVDIF.C
|
|
*/
|
|
|
|
extern void SetOtherModeParameters( WORD PixelDepth,
|
|
WORD Pitch,
|
|
WORD Multiplier,
|
|
struct st_mode_table *pmode);
|
|
|
|
#define CARRETURN '\x0D' /* Carriage return */
|
|
#define TIMINGSECTION "PREADJUSTED_TIMING"
|
|
#define HORPIXEL "HORPIXEL"
|
|
#define VERPIXEL "VERPIXEL"
|
|
#define VERFREQUENCY "VERFREQUENCY"
|
|
#define HORFREQUENCY "HORFREQUENCY"
|
|
#define SCANTYPE "SCANTYPE"
|
|
#define PIXELCLOCK "PIXELCLOCK"
|
|
#define HORSYNCTIME "HORSYNCTIME"
|
|
#define HORADDRTIME "HORADDRTIME"
|
|
#define HORBLANKTIME "HORBLANKTIME"
|
|
#define HORBLANKSTART "HORBLANKSTART"
|
|
#define VERSYNCTIME "VERSYNCTIME"
|
|
#define VERADDRTIME "VERADDRTIME"
|
|
#define VERBLANKTIME "VERBLANKTIME"
|
|
#define VERBLANKSTART "VERBLANKSTART"
|
|
#define HORSYNCSTART "HORSYNCSTART"
|
|
#define VERSYNCSTART "VERSYNCSTART"
|
|
#define HORSYNCPOLARITY "HORSYNCPOLARITY"
|
|
#define VERSYNCPOLARITY "VERSYNCPOLARITY"
|
|
|
|
/*
|
|
* Structure for passing arguments and returned values between
|
|
* SetFixedModes() and VDIFCallback()
|
|
*/
|
|
struct stVDIFCallbackData
|
|
{
|
|
/*
|
|
* Input and Outputs are from perspective of VDIFCallback()
|
|
*/
|
|
|
|
/*
|
|
* FreeTables; Input : number of free tables
|
|
* Output: number of free tables after VDIFCallback routine
|
|
*/
|
|
short FreeTables;
|
|
/*
|
|
* NumModes; Input and output: Number of mode tables added to list.
|
|
* Incremented every time a new mode table is added to the list, in
|
|
* SetFixedModes() and in VDIFCallback()
|
|
*/
|
|
WORD NumModes;
|
|
WORD Index; /* Input: First entry from "book" tables to use */
|
|
WORD EndIndex; /* Input: Last entry from "book" tables to use */
|
|
WORD LowBound; /* Input and output: The lowest frame rate */
|
|
WORD Multiplier; /* Input Argument from SetFixedModes */
|
|
WORD HorRes; /* Input Argument from SetFixedModes */
|
|
WORD VerRes; /* Input Argument from SetFixedModes */
|
|
WORD PixelDepth; /* Input Argument from SetFixedModes */
|
|
WORD Pitch; /* Input Argument from SetFixedModes */
|
|
ULONG MaxDotClock; /* Maximum supported pixel clock frequency */
|
|
/*
|
|
* ppFreeTables; Input and output: Pointer to pointer to the next free mode
|
|
* table. Incremented every time a new mode table is added to the list, in
|
|
* SetFixedModes() and in VDIFCallback()
|
|
*/
|
|
struct st_mode_table **ppFreeTables;
|
|
};
|
|
|
|
/*
|
|
* Structure for AlterTables[] to contain information we need to extract
|
|
* from VDIF file for each mode table
|
|
*/
|
|
struct VDIFInputs
|
|
{
|
|
short MinFrameRate;
|
|
BOOL Interlaced;
|
|
ULONG PixelClock;
|
|
ULONG HorFrequency;
|
|
ULONG VerFrequency;
|
|
ULONG HorSyncStart;
|
|
ULONG VerSyncStart;
|
|
ULONG HorBlankStart;
|
|
ULONG VerBlankStart;
|
|
ULONG HorAddrTime;
|
|
ULONG VerAddrTime;
|
|
ULONG HorBlankTime;
|
|
ULONG VerBlankTime;
|
|
ULONG HorSyncTime;
|
|
ULONG VerSyncTime;
|
|
ULONG HorPolarity;
|
|
ULONG VerPolarity;
|
|
};
|
|
|
|
|
|
/*
|
|
* Pointer for passing parameters to callback functions by pointing
|
|
* (after casting) to a structure containing input (and possibly output)
|
|
* variables for a callback function. Originally intended for use with
|
|
* SetFixedModes() and VDIFCallback().
|
|
*/
|
|
extern void *pCallbackArgs;
|
|
|
|
/*
|
|
* VDIF Macros
|
|
*/
|
|
#define OPER_LIMITS(vdif) \
|
|
((VDIFLimitsRec *)((char *)(vdif) + (vdif)->OffsetOperationalLimits))
|
|
#define NEXT_OPER_LIMITS(limits) \
|
|
((VDIFLimitsRec *)((char *)(limits) + (limits)->OffsetNextLimits))
|
|
#define PREADJ_TIMING(limits) \
|
|
((VDIFTimingRec *)((char *)(limits) + (limits)->Header.ScnLength))
|
|
#define NEXT_PREADJ_TIMING(timing) \
|
|
((VDIFTimingRec *)((char *)(timing) + (timing)->Header.ScnLength))
|
|
|
|
/*
|
|
* Binary VDIF file defines
|
|
*/
|
|
#define VDIF_MONITOR_MONOCHROME 0
|
|
#define VDIF_MONITOR_COLOR 1
|
|
|
|
#define VDIF_VIDEO_TTL 0
|
|
#define VDIF_VIDEO_ANALOG 1
|
|
#define VDIF_VIDEO_ECL 2
|
|
#define VDIF_VIDEO_DECL 3
|
|
#define VDIF_VIDEO_OTHER 4
|
|
|
|
#define VDIF_SYNC_SEPARATE 0
|
|
#define VDIF_SYNC_C 1
|
|
#define VDIF_SYNC_CP 2
|
|
#define VDIF_SYNC_G 3
|
|
#define VDIF_SYNC_GP 4
|
|
#define VDIF_SYNC_OTHER 5
|
|
#define VDIF_EXT_XTAL 6
|
|
|
|
#define VDIF_SCAN_NONINTERLACED 0
|
|
#define VDIF_SCAN_INTERLACED 1
|
|
#define VDIF_SCAN_OTHER 2
|
|
|
|
#define VDIF_POLARITY_NEGATIVE 0
|
|
#define VDIF_POLARITY_POSITIVE 1
|
|
|
|
/*
|
|
* We must force byte alignment of structures used in binary VDIF files,
|
|
* since structures contained in binary files are already byte aligned
|
|
*/
|
|
|
|
#pragma pack(1)
|
|
|
|
struct _VDIF /* Monitor Description: */
|
|
{
|
|
UCHAR VDIFId[4]; /* Always "VDIF" */
|
|
ULONG FileLength; /* Lenght of the whole file */
|
|
ULONG Checksum; /* Sum of all bytes in the file after */
|
|
/* This feeld */
|
|
USHORT VDIFVersion; /* Structure version number */
|
|
USHORT VDIFRevision; /* Structure revision number */
|
|
USHORT Date[3]; /* File date Year/Month/Day */
|
|
USHORT DateManufactured[3]; /* Date Year/Month/Day */
|
|
ULONG FileRevision; /* File revision string */
|
|
ULONG Manufacturer; /* ASCII ID of the manufacturer */
|
|
ULONG ModelNumber; /* ASCII ID of the model */
|
|
ULONG MinVDIFIndex; /* ASCII ID of Minimum VDIF index */
|
|
ULONG Version; /* ASCII ID of the model version */
|
|
ULONG SerialNumber; /* ASCII ID of the serial number */
|
|
UCHAR MonitorType; /* Monochrome or Color */
|
|
UCHAR CRTSize; /* Inches */
|
|
UCHAR BorderRed; /* Percent */
|
|
UCHAR BorderGreen; /* Percent */
|
|
UCHAR BorderBlue; /* Percent */
|
|
UCHAR Reserved1; /* Padding */
|
|
USHORT Reserved2; /* Padding */
|
|
ULONG RedPhosphorDecay; /* Microseconds */
|
|
ULONG GreenPhosphorDecay; /* Microseconds */
|
|
ULONG BluePhosphorDecay; /* Microseconds */
|
|
USHORT WhitePoint_x; /* WhitePoint in CIExyY (scale 1000) */
|
|
USHORT WhitePoint_y;
|
|
USHORT WhitePoint_Y;
|
|
USHORT RedChromaticity_x; /* Red chromaticity in x,y */
|
|
USHORT RedChromaticity_y;
|
|
USHORT GreenChromaticity_x; /* Green chromaticity in x,y */
|
|
USHORT GreenChromaticity_y;
|
|
USHORT BlueChromaticity_x; /* Blue chromaticity in x,y */
|
|
USHORT BlueChromaticity_y;
|
|
USHORT RedGamma; /* Gamme curve exponent (scale 1000) */
|
|
USHORT GreenGamma;
|
|
USHORT BlueGamma;
|
|
ULONG NumberOperationalLimits;
|
|
ULONG OffsetOperationalLimits;
|
|
ULONG NumberOptions; /* Optional sections (gamma table) */
|
|
ULONG OffsetOptions;
|
|
ULONG OffsetStringTable;
|
|
};
|
|
#pragma pack()
|
|
|
|
typedef struct _VDIF VDIFRec;
|
|
|
|
#pragma pack(1)
|
|
struct _VDIFScnHdr /* Generic Section Header: */
|
|
{
|
|
ULONG ScnLength; /* Lenght of section */
|
|
ULONG ScnTag; /* Tag for section identification */
|
|
};
|
|
#pragma pack()
|
|
typedef struct _VDIFScnHdr VDIFScnHdrRec;
|
|
|
|
#pragma pack(1)
|
|
struct _VDIFLimits /* Operational Limits: */
|
|
{
|
|
VDIFScnHdrRec Header; /* Common section info */
|
|
USHORT MaxHorPixel; /* Pixels */
|
|
USHORT MaxVerPixel; /* Lines */
|
|
USHORT MaxHorAddrLength; /* Millimeters */
|
|
USHORT MaxVerAddrHeight; /* Millimeters */
|
|
UCHAR VideoType; /* TTL / Analog / ECL / DECL */
|
|
UCHAR SyncType; /* TTL / Analog / ECL / DECL */
|
|
UCHAR SyncConfiguration; /* Separate / C / CP / G / GP */
|
|
UCHAR Reserved1; /* Padding */
|
|
USHORT Reserved2; /* Padding */
|
|
USHORT TerminationResistance;
|
|
USHORT WhiteLevel; /* Millivolts */
|
|
USHORT BlackLevel; /* Millivolts */
|
|
USHORT BlankLevel; /* Millivolts */
|
|
USHORT SyncLevel; /* Millivolts */
|
|
ULONG MaxPixelClock; /* KiloHertz */
|
|
ULONG MinHorFrequency; /* Hertz */
|
|
ULONG MaxHorFrequency; /* Hertz */
|
|
ULONG MinVerFrequency; /* MilliHertz */
|
|
ULONG MaxVerFrequency; /* MilliHertz */
|
|
USHORT MinHorRetrace; /* Nanoseconds */
|
|
USHORT MinVerRetrace; /* Microseconds */
|
|
ULONG NumberPreadjustedTimings;
|
|
ULONG OffsetNextLimits;
|
|
};
|
|
#pragma pack()
|
|
typedef struct _VDIFLimits VDIFLimitsRec;
|
|
|
|
#pragma pack(1)
|
|
struct _VDIFTiming /* Preadjusted Timing: */
|
|
{
|
|
VDIFScnHdrRec Header; /* Common section info */
|
|
ULONG PreadjustedTimingName; /* SVGA/SVPMI mode number */
|
|
USHORT HorPixel; /* Pixels */
|
|
USHORT VerPixel; /* Lines */
|
|
USHORT HorAddrLength; /* Millimeters */
|
|
USHORT VerAddrHeight; /* Millimeters */
|
|
UCHAR PixelWidthRatio; /* Gives H:V */
|
|
UCHAR PixelHeightRatio;
|
|
UCHAR Reserved1; /* Padding */
|
|
UCHAR ScanType; /* Noninterlaced / interlaced */
|
|
UCHAR HorSyncPolarity; /* Negative / positive */
|
|
UCHAR VerSyncPolarity; /* Negative / positive */
|
|
USHORT CharacterWidth; /* Pixels */
|
|
ULONG PixelClock; /* KiloHertz */
|
|
ULONG HorFrequency; /* Hertz */
|
|
ULONG VerFrequency; /* MilliHertz */
|
|
ULONG HorTotalTime; /* Nanoseconds */
|
|
ULONG VerTotalTime; /* Microseconds */
|
|
USHORT HorAddrTime; /* Nanoseconds */
|
|
USHORT HorBlankStart; /* Nanoseconds */
|
|
USHORT HorBlankTime; /* Nanoseconds */
|
|
USHORT HorSyncStart; /* Nanoseconds */
|
|
USHORT HorSyncTime; /* Nanoseconds */
|
|
USHORT VerAddrTime; /* Microseconds */
|
|
USHORT VerBlankStart; /* Microseconds */
|
|
USHORT VerBlankTime; /* Microseconds */
|
|
USHORT VerSyncStart; /* Microseconds */
|
|
USHORT VerSyncTime; /* Microseconds */
|
|
};
|
|
#pragma pack()
|
|
typedef struct _VDIFTiming VDIFTimingRec;
|
|
|
|
#pragma pack(1)
|
|
struct _VDIFGamma /* Gamma Table: */
|
|
{
|
|
VDIFScnHdrRec Header; /* Common sectio info */
|
|
USHORT GammaTableEntries; /* Count of grays or RGB 3-tuples */
|
|
USHORT Unused1;
|
|
};
|
|
#pragma pack()
|
|
typedef struct _VDIFGamma VDIFGammaRec;
|
|
|
|
typedef enum /* Tags for section identification */
|
|
{
|
|
VDIF_OPERATIONAL_LIMITS_TAG = 1,
|
|
VDIF_PREADJUSTED_TIMING_TAG,
|
|
VDIF_GAMMA_TABLE_TAG
|
|
} VDIFScnTag;
|
|
|