Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

323 lines
10 KiB

#pragma once
//==========================================================================;
//
// Decoder - Main decoder declarations
//
// $Date: 21 Aug 1998 21:46:28 $
// $Revision: 1.1 $
// $Author: Tashjian $
//
// $Copyright: (c) 1997 - 1998 ATI Technologies Inc. All Rights Reserved. $
//
//==========================================================================;
#include "viddefs.h"
#include "retcode.h"
#include "capmain.h"
#include "register.h"
/////////////////////////////////////////////////////////////////////////////
// CLASS CRegInfo
//
// Description:
// Provides min, max, and default values for a register. To use this class,
// user will declare an object of this class and provide min, max and default
// values of the register.
//
// Attributes:
// int intMin - minumum value
// int intMax - maximum value
// int intDefault - default value
//
// Methods:
// Min() : return minimum value of the register
// Max() : return maximum value of the register
// Default(): return default value of the register
// OutOfRange() : check if an value is out of range
//
/////////////////////////////////////////////////////////////////////////////
class CRegInfo
{
int intMin; // minumum value
int intMax; // maximum value
int intDefault; // default value
public:
CRegInfo()
{
intMin = 0;
intMax = 0;
intDefault = 0;
}
CRegInfo(int min, int max, int def)
{
intMin = min;
intMax = max;
intDefault = def;
}
// return min, max and default value of a register
inline int Min() const { return intMin; }
inline int Max() const { return intMax; }
inline int Default() const { return intDefault; }
// check if an value is out of range of a register
inline BOOL OutOfRange(int x)
{
if((x > intMax) || (x < intMin))
return TRUE;
return FALSE;
}
};
/////////////////////////////////////////////////////////////////////////////
// CLASS Decoder
//
// Description:
// This class encapsulates the register fields in the decoder portion of
// the Bt848.
// A complete set of functions are developed to manipulate all the
// register fields in the decoder for the Bt848.
// For Read-Write register field, "Set..." function is provided to modify
// the content of the reigster field. And either "Get..." (for more
// than 1 bit) or "Is..." (for 1 bit) function is provided to obtain the
// value of the register field.
// For Read-Only register field, only "Get..." (for more than 1 bit) or
// "Is..." (for 1 bit) function is provided to obtain the content of the
// register field.
// When there are odd-field complements to the even-field register field,
// same value is set to both odd and even register fields.
// Several direct register content modifying/retrieval functions are
// implemented for direct access to the register contents. They were
// originally developed for testing purpose only. They are retained in the
// class for convenience only and usage of these functions must be very cautious.
//
// Methods:
// See below
//
// Note: 1) Scaling registers are not implemented.
// 2) Odd-fields are set to the same value as the even-field registers
/////////////////////////////////////////////////////////////////////////////
class Decoder
{
protected:
RegisterB decRegSTATUS;
RegField decFieldHLOC;
RegField decFieldNUML;
RegField decFieldCSEL;
RegField decFieldSTATUS_RES;
RegField decFieldLOF;
RegField decFieldCOF;
RegisterB decRegIFORM;
RegField decFieldHACTIVE;
RegField decFieldMUXSEL;
RegField decFieldXTSEL;
RegField decFieldFORMAT;
RegisterB decRegTDEC;
RegField decFieldDEC_FIELD;
RegField decFieldDEC_FIELDALIGN;
RegField decFieldDEC_RAT;
RegisterB decRegBRIGHT;
RegisterB decRegMISCCONTROL;
RegField decFieldLNOTCH;
RegField decFieldCOMP;
RegField decFieldLDEC;
RegField decFieldMISCCONTROL_RES;
RegField decFieldCON_MSB;
RegField decFieldSAT_U_MSB;
RegField decFieldSAT_V_MSB;
RegisterB decRegCONTRAST_LO;
RegisterB decRegSAT_U_LO;
RegisterB decRegSAT_V_LO;
RegisterB decRegHUE;
RegisterB decRegSCLOOP;
RegField decFieldCAGC;
RegField decFieldCKILL;
RegisterB decRegWC_UP;
RegisterB decRegOFORM;
RegField decFieldVBI_FRAME;
RegField decFieldCODE;
RegField decFieldLEN;
RegisterB decRegVSCALE_HI;
RegField decFieldYCOMB;
RegField decFieldCOMB;
RegField decFieldINT;
RegisterB decRegTEST;
RegisterB decRegVPOLE;
RegField decFieldOUT_EN;
RegField decFieldDVALID;
RegField decFieldVACTIVE;
RegField decFieldCBFLAG;
RegField decFieldFIELD;
RegField decFieldACTIVE;
RegField decFieldHRESET;
RegField decFieldVRESET;
RegisterB decRegADELAY;
RegisterB decRegBDELAY;
RegisterB decRegADC;
RegField decFieldCLK_SLEEP;
RegField decFieldC_SLEEP;
RegField decFieldCRUSH;
RegisterB decRegVTC;
RegField decFieldHSFMT;
RegisterB decRegWC_DN;
RegisterB decRegSRESET;
RegisterB decRegODD_MISCCONTROL;
RegField decFieldODD_LNOTCH;
RegField decFieldODD_COMP;
RegField decFieldODD_LDEC;
RegField decFieldODD_CBSENSE;
RegField decFieldODD_MISCCONTROL_RES;
RegField decFieldODD_CON_MSB;
RegField decFieldODD_SAT_U_MSB;
RegField decFieldODD_SAT_V_MSB;
RegisterB decRegODD_SCLOOP;
RegField decFieldODD_CAGC;
RegField decFieldODD_CKILL;
RegField decFieldODD_HFILT;
RegisterB decRegODD_VSCALE_HI;
RegField decFieldODD_YCOMB;
RegField decFieldODD_COMB;
RegField decFieldODD_INT;
RegisterB decRegODD_VTC;
RegField decFieldODD_HSFMT;
// used for checking if parameter out of register's range
CRegInfo m_regHue, m_regSaturationNTSC, m_regSaturationSECAM,
m_regContrast, m_regBrightness;
// used for checking parameter range
CRegInfo m_param;
// value set to after calculations
WORD m_satParam, m_conParam, m_hueParam, m_briParam;
// to be used to adjust contrast
int regBright; // brightness register value before adjustment
WORD regContrast; // contrast register value before adjustment
// for 829 vs 829a setup
unsigned m_outputEnablePolarity;
DWORD m_videoStandard; //Paul
DWORD m_supportedVideoStandards; //Paul: The standards supported by the decoder AND'd with standards supported by Crystal
public:
// constructor and destructor
Decoder(PDEVICE_PARMS);
virtual ~Decoder();
void * operator new(size_t size, void * pAllocation) { return(pAllocation);}
void operator delete(void * pAllocation) {}
void GetVideoDecoderCaps(PKSPROPERTY_VIDEODECODER_CAPS_S caps);
void GetVideoDecoderStatus(PKSPROPERTY_VIDEODECODER_STATUS_S status);
DWORD GetVideoDecoderStandard();
ULONG GetVideoDeocderStandardsSupportedInThisConfiguration()
{ return m_supportedVideoStandards; }
BOOL SetVideoDecoderStandard(DWORD standard);
// Device Status register (DSTATUS)
virtual BOOL Is525LinesVideo();
virtual BOOL IsCrystal0Selected();
virtual BOOL IsLumaOverflow();
virtual void ResetLumaOverflow();
virtual BOOL IsChromaOverflow();
virtual void ResetChromaOverflow();
// Input Format register (IFORM)
virtual ErrorCode SetVideoInput(Connector);
virtual Connector GetVideoInput();
virtual ErrorCode SetCrystal(Crystal);
virtual int GetCrystal();
virtual ErrorCode SetVideoFormat(VideoFormat);
virtual int GetVideoFormat();
// Temporal Decimation register (TDEC)
virtual ErrorCode SetRate(BOOL, VidField, int);
// Brightness Control register (BRIGHT)
virtual ErrorCode SetBrightness(int);
virtual int GetBrightness();
// Miscellaneous Control register (E_CONTROL, O_CONTROL)
virtual void SetLumaNotchFilter(BOOL);
virtual BOOL IsLumaNotchFilter();
virtual void SetCompositeVideo(BOOL);
virtual void SetLumaDecimation(BOOL);
// Luma Gain register (CON_MSB, CONTRAST_LO)
virtual ErrorCode SetContrast(int);
virtual int GetContrast();
// Chroma Gain register (SAT_U_MSB, SAT_V_MSB, SAT_U_LO, SAT_V_LO)
virtual ErrorCode SetSaturation(int);
virtual int GetSaturation();
// Hue Control register (HUE)
virtual ErrorCode SetHue(int);
virtual int GetHue();
// SC Loop Control register (E_SCLOOP, O_SCLOOP)
virtual void SetChromaAGC(BOOL);
virtual BOOL IsChromaAGC();
virtual void SetLowColorAutoRemoval(BOOL);
// Output Format register (OFORM)
virtual void SetVBIFrameMode(BOOL);
virtual BOOL IsVBIFrameMode();
virtual void SetCodeInsertionEnabled(BOOL);
virtual BOOL IsCodeInsertionEnabled();
virtual void Set16BitDataStream(BOOL);
virtual BOOL Is16BitDataStream();
// Vertical Scaling register (E_VSCALE_HI, O_VSCALE_HI)
virtual void SetChromaComb(BOOL);
virtual BOOL IsChromaComb();
virtual void SetInterlaced(BOOL);
virtual BOOL IsInterlaced();
// VPOLE register
void SetOutputEnablePolarity(int i)
{m_outputEnablePolarity = i;}
int GetOutputEnablePolarity()
{return m_outputEnablePolarity;}
virtual void SetOutputEnabled(BOOL);
virtual BOOL IsOutputEnabled();
virtual void SetHighOdd(BOOL);
virtual BOOL IsHighOdd();
// ADC Interface register (ADC)
virtual void PowerDown(BOOL);
virtual BOOL IsPowerDown();
virtual void SetChromaADC(BOOL);
virtual void SetAdaptiveAGC(BOOL);
virtual BOOL IsAdaptiveAGC();
// Software Reset register (SRESET)
virtual void SoftwareReset();
// Test Control register (TEST)
virtual void AdjustInertialDampener(BOOL);
protected:
// mapping function
virtual ErrorCode Mapping(int, CRegInfo, int *, CRegInfo);
// check registry key value to determine if contrast should be adjusted
virtual BOOL IsAdjustContrast();
private:
void SelectCrystal(char);
};