windows-nt/Source/XPSP1/NT/drivers/wdm/capture/mini/bt848/decoder.h
2020-09-26 16:20:57 +08:00

230 lines
7.5 KiB
C++

// $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