#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); };