|
|
// $Header: G:/SwDev/WDM/Video/bt848/rcs/Decoder.h 1.2 1998/04/29 22:43:32 tomz Exp $
#ifndef __DECODER_H
#define __DECODER_H
#include "regField.h"
#include "viddefs.h"
#include "retcode.h"
const int PAL_xtal = 35; const int NTSC_xtal = 28;
/////////////////////////////////////////////////////////////////////////////
// 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( void ) { 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( void ) const { return intMin; } inline int Max( void ) const { return intMax; } inline int Default( void ) 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: #include "Declare.h"
// 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
DWORD Xtals_ [2]; public: // constructor and destructor
Decoder( DWORD *xtals ); ~Decoder();
// Device Status register (DSTATUS)
virtual BYTE GetDeviceStatusReg( void ); virtual bool IsVideoPresent( void ); virtual bool IsDeviceInHLock( void ); virtual bool IsEvenField( void ); virtual bool Is525LinesVideo( void ); virtual bool IsCrystal0Selected( void ); virtual bool IsLumaOverflow( void ); virtual void ResetLumaOverflow( void ); virtual bool IsChromaOverflow( void ); virtual void ResetChromaOverflow( void );
// Input Format register (IFORM)
virtual ErrorCode SetVideoInput( Connector ); virtual int GetVideoInput( void ); virtual ErrorCode SetCrystal( Crystal ); virtual int GetCrystal( void ); virtual ErrorCode SetVideoFormat( VideoFormat ); virtual int GetVideoFormat( void );
// Temporal Decimation register (TDEC)
virtual ErrorCode SetRate( bool, VidField, int );
// Brightness Control register (BRIGHT)
virtual ErrorCode SetBrightness( int ); virtual int GetBrightness( void );
// Miscellaneous Control register (E_CONTROL, O_CONTROL)
virtual void SetLumaNotchFilter( bool ); virtual bool IsLumaNotchFilter( void ); virtual void SetCompositeVideo( bool ); virtual bool IsCompositeVideo( void ); virtual void SetLumaDecimation( bool ); virtual bool IsLumaDecimation( void ); virtual void SetCbFirst( bool ); virtual bool IsCbFirst( void );
// Luma Gain register (CON_MSB, CONTRAST_LO)
virtual ErrorCode SetContrast( int ); virtual int GetContrast( void );
// Chroma Gain register (SAT_U_MSB, SAT_V_MSB, SAT_U_LO, SAT_V_LO)
virtual ErrorCode SetSaturation( int ); virtual int GetSaturation( void );
// Hue Control register (HUE)
virtual ErrorCode SetHue( int ); virtual int GetHue( void );
// SC Loop Control register (E_SCLOOP, O_SCLOOP)
virtual void SetChromaAGC( bool ); virtual bool IsChromaAGC( void ); virtual void SetLowColorAutoRemoval( bool ); virtual bool IsLowColorAutoRemoval( void ); virtual ErrorCode SetHorizontalFilter( HorizFilter ); virtual int GetHorizontalFilter( void );
// Output Format register (OFORM)
virtual void SetFullOutputRange( bool ); virtual bool IsFullOutputRange( void ); virtual ErrorCode SetLumaCoring( CoringLevel ); virtual int GetLumaCoring( void );
// Vertical Scaling register (E_VSCALE_HI, O_VSCALE_HI)
virtual void SetChromaComb( bool ); virtual bool IsChromaComb( void );
// AGC Delay register (ADELAY)
virtual void SetAGCDelay( BYTE ); virtual int GetAGCDelay( void );
// Burst Delay register (BDELAY)
virtual void SetBurstDelay( BYTE ); virtual int GetBurstDelay( void );
// ADC Interface register (ADC)
virtual void SetAnalogThresholdLow( bool ); virtual bool IsAnalogThresholdLow( void ); virtual void SetAGCFunction( bool ); virtual bool IsAGCFunction( void ); virtual void PowerDown( bool ); virtual bool IsPowerDown( void ); virtual void SetLumaADC( bool ); virtual bool IsLumaADC( void ); virtual void SetChromaADC( bool ); virtual bool IsChromaADC( void ); virtual void SetAdaptiveAGC( bool ); virtual bool IsAdaptiveAGC( void );
// Software Reset register (SRESET)
virtual void SoftwareReset( void );
virtual LONG GetSupportedStandards();
protected: // mapping function
virtual ErrorCode Mapping( int, CRegInfo, int *, CRegInfo );
// check registry key value to determine if contrast should be adjusted
virtual bool IsAdjustContrast( void );
private: void SelectCrystal( int );
};
#endif // __DECODER_H
|