📄 cquasar.h
字号:
/****************************************************************************** CQuasar.h : Implementation of Quasar interface* REALmagic Quasar Hardware Library* Created by Aurelia Popa-Radu* Copyright Sigma Designs Inc* Sigma Designs Proprietary and confidential* Created on 8/27/99* Description:*****************************************************************************/#ifndef __CQUASAR_H__#define __CQUASAR_H__#include "cobject.h"#include "ci2c.h" // for I2Cparamsvoid CQuasar__InitVtable(IDecoder* pIDecoder);extern DWORD TMaxSDRAM[18];#define Q3CTRL1_VIDEO_VALID_ENABLE BIT15#define Q3CTRL1_PIXEL_DATA_ENABLE BIT12#define Q3CTRL1_VVLDHS_ENABLE BIT11#define Q3CTRL1_8BITS BIT10#define Q3CTRL1_HORZ_DOWN_FILT_ENABLE BIT7#define Q3CTRL1_VIDEO_ENABLE BIT1#define Q3CTRL1_FILTER_MASK (BIT7 | BIT6 | BIT5 | BIT4| BIT3 | BIT2)#define Q3CTRL2_TOP_FIELD_OFFSET BIT15#define Q3CTRL2_BOTTOM_FIELD_OFFSET BIT14#define Q3CTRL2_NOINTERLACED 0x0000#define Q3CTRL2_CCIR_656 BIT13#define Q3CTRL2_CCIR_601 0x0000#define Q3CTRL2_VIDEO_CLIP_ENABLE BIT12#define Q3CTRL2_PIXCLK_POLARITY BIT9#define Q3CTRL2_Q3MASTER BIT2#define Q3CTRL3_HS_ON_VACTIVE 0x0400#define Q3CTRL3_TVSYNCS_ENABLE 0x0200#define Q3CTRL3_VS_ENABLE 0x0080#define Q3CTRL3_HS_ENABLE 0x0040#define QSR_INVERT_FIELD 0x8000#define QSR_INTERLACED 0x4000#define QSR_NOINTERLACED 0x0000//////////////////////////////////////////////////////////////////////////////// CQuasar Implementation#define DM_SIZE 0x0800 #define Q3_ASctrl0_I2SAlign1 0x0001#define Q3_ASctrl0_I2SAlign30 0x001E#define Q3_ASctrl0_I2SAlign31 0x001F#define Q3_ASctrl0_MSbitfirst 0x0020#define Q3_ASctrl0_CkoutInverted 0x0040#define Q3_ASctrl0_FrameInverted 0x0080#define Q3_ASctrl0_DataInverted 0x0100#define Q3_ASctrl0_384divider 0x0200#define Q3_ASctrl0_I2SMask 0x0C00#define Q3_ASctrl0_I2SActive 0x0C00#define Q3_ASctrl0_I2SActiveData0 0x0800#define Q3_ASctrl0_I2SDisabled 0x0000#define Q3_ASctrl0_SpdifMask 0x3000#define Q3_ASctrl0_SpdifActive 0x3000#define Q3_ASctrl0_SpdifActiveData0 0x1000#define Q3_ASctrl0_SpdifDisabled 0x0000#define Q3_ASctrl1_BypassJ1Core 0x0001#define Q3_ASctrl1_24bit 0x0000#define Q3_ASctrl1_20bit 0x0002#define Q3_ASctrl1_18bit 0x0004#define Q3_ASctrl1_16bit 0x0006#define Q3_ASctrl1_Irclkin 0x0008#define Q3_ASctrl1_GainEnable 0x0010#define Q3_ASpdifStat1_rate 0x0F000000#define Q3_ASpdifStat1_32k 0x03000000#define Q3_ASpdifStat1_44k 0x00000000#define Q3_ASpdifStat1_48k 0x02000000// Following were found in ek41171.pdf page 13#define Q3_ASpdifStat1_88k 0x08000000#define Q3_ASpdifStat1_96k 0x0A000000#define Q3_ASpdifStat1_176k 0x0C000000#define Q3_ASpdifStat1_192k 0x0E000000#define Q3_ASpdifStat0_digital 0x00000002#define Q3_ASpdifStat0_DVD 0x00001900#define Q3_APcmConfig0_Pcm 0x0000#define Q3_APcmConfig0_Dts 0x2800#define Q3_APcmConfig0_NoDownSample 0x0000#define Q3_APcmConfig0_DownSample2 0x0200#define Q3_APcmConfig0_DownSample4 0x0400#define Q3_APcmConfig0_1chan 0x0000#define Q3_APcmConfig0_2chan 0x0010#define Q3_APcmConfig0_3chan 0x0020#define Q3_APcmConfig0_4chan 0x0030#define Q3_APcmConfig0_5chan 0x0040#define Q3_APcmConfig0_6chan 0x0050#define Q3_APcmConfig0_7chan 0x0060#define Q3_APcmConfig0_8chan 0x0070#define Q3_APcmConfig0_48kHz 0x0000#define Q3_APcmConfig0_96kHz 0x0004#define Q3_APcmConfig0_192kHz 0x0008#define Q3_APcmConfig0_16bits 0x0000#define Q3_APcmConfig0_20bits 0x0001#define Q3_APcmConfig0_24bits 0x0002#define Q3_AUDIO_DECODE 0#define Q3_AUDIO_NODECODE 4#define Q3_MPEG 0#define Q3_AC3 1#define Q3_PCM 2// real pain because of J1 core// 0000XXYY_000000ZZ - for Ac3// 00000000_000000YY - for Mpeg#define Q3_COMPR_DEFAULT 0x8000 // program Q3_COMPR_LINEOUT for Ac3 and Q3_COMPR_OFF for Mpeg// XX in J1 spec - use Q3_COMPR_LINEOUT for Ac3, else Q3_COMPR_OFF#define Q3_COMPR_MASK 0x0C00#define Q3_COMPR_OFF 0x0000#define Q3_COMPR_ON 0x0400//0x0004#define Q3_COMPR_LINEOUT 0x0800//0x0008#define Q3_COMPR_RF 0x0C00//0x000C// YY in J1 spec - The 2 bits affecting the mode are on 0x0300 for Ac3 and on 0x0003 for mpeg !// next defines for AC3 - take care in code to swap them for Mpeg#define Q3_AUDIOMODE_MASK 0x0300#define Q3_STEREO 0x0000#define Q3_MONO1 0x0100#define Q3_MONO2 0x0200#define Q3_MONOMIX 0x0300// ZZ in J1 spec - The 2 bits affecting the speakers are on 0x0003 for Ac3, else not used// next defines for AC3 - take care in code to swap them for Mpeg#define Q3_SPEAKER_MASK 0x0003#define Q3_SPEAKER_SURROUND 0x0000#define Q3_SPEAKER_1 0x0001#define Q3_SPEAKER_2 0x0002typedef struct tagCAPTURE{ BYTE* Y; BYTE* Ypack; BYTE* UV; BYTE* UVpack; DWORD LumaStart, ChromaStart; DWORD LumaStart1, ChromaStart1; DWORD DispWidth, DispHeight, Pitch, Packed, Hmax, Frame; BOOL SplitBuffer;}CAPTURE, *PCAPTURE;/* !!ASSUMES that an ISetI2CPIOVtbl is right after the pointer which points to the CProxyFilter (m_This)*/#define GET_CQUASAR_FROM_ISETI2CPIO(address)\ (*((CQuasar**)((DWORD)(address->lpVtbl) - 4)))#define CQuasar_MEMBER\ IDecoderVtbl VTable;\ DWORD m_ulMemAddress; /* linear address of Quasar PCI */\ DWORD QuasarVersion; /* Quasar chip Version: 1, 2, 3*/\ void* pContext;\ BYTE *pUCode;\ DWORD UCodeSize;\ void* pQ;\ DWORD SymbolTableSize;\ DWORD Pio07DirReg; /* address of Quasar PIO0..7 direction register */\ DWORD Pio07DataReg; /* address of Quasar PIO0..7 data register */\ DWORD Pio8fDirReg; /* address of Quasar PIO8..f direction register */\ DWORD Pio8fDataReg; /* address of Quasar PIO8..f data register */\ WORD PIO_I2C_Data; /* what PIO is connected to I2C_data */\ WORD PIO_I2C_Clk; /* what PIO is connected to I2C_clock */\ DWORD Dram_ConfigReg;\ DWORD RISC_TimDivReg;\ DWORD RISC_Clock;\ I2CPARAMS m_I2Cparams;\ void* m_this; /* points to itself */\ ISetI2CpIOVtbl m_ISetI2CpIOVtbl;\ ISetI2CpIO m_ISetI2CpIO;\ DATA_FIFO Fifo[4];\ PACKETS_FIFO PacketsFifo[5];\ PTS_FIFO PtsFifo[3];\ DWORD LumaStart;\ DWORD ChromaStart;\ DWORD BlackFrameWidth;\ DWORD BlackFrameHeight;\ DWORD BlackFramePitch;\ DWORD VolumeRight;\ DWORD VolumeLeft;\ DWORD AudioMode;\ WORD wAc3RepeatCounter;\ WORD wAc3HiLoDynamicRange;\ DWORD AudioFormat;\ DWORD AudioOutput;\ DWORD AudioOutputEnable;\ DWORD AudioNumChannels;\ DWORD AudioNumBitsPerSample;\ DWORD CurrentAudioRate;\ DWORD AudioDacBitsPerSample;\ DWORD SerialCtrl0Config;\ DWORD SerialCtrl1Config;\ BYTE RemainedByte; /* Used for Wave format-mp3 to swap bytes */\ BOOL IsOneByteRemained; /* Used for Wave format-mp3 to swap bytes */\ BYTE CCTopFieldId; /* Close Caption */\ BYTE* CCBuf;\ LONG CCSize;\ LONG CCToSend;\ BOOL CCIndex;\ BYTE CCBuffer[2][128];\ LONG CCBufferSize[2];\ DWORD CurrentIrqMask;\ LONG Brightness;\ LONG Contrast;\ LONG Saturation;\ DWORD ForcedProgressive;\ REGISTRY_TABLE* pRegistry;\ DWORD InvertField;\ edecCSSChlg2_type edecCSSChlg2_value; \ PROPERTY_ITEM DecoderPropertyList[edecMax];\ evCaptureFormat_type CaptureFormat;\ HWLIB_PENDING_STACK* pPendingStack;\ DWORD FixedVopTimeIncrVal; /**/\ DWORD FixedTimeIncrResVal; /**/\ DWORD ChannelStatus;\ DWORD AudioSampleRateSupport_96kHz;\ BOOL Initialized;\ DWORD LastError;\ DWORD Dram_PllReg;\ DWORD DramSize;\ DWORD DramFreq;\ BYTE HorizontalFilter;\ BYTE VerticalFilter;\ char Horizontal4tapLumaCoef[32];\ char Horizontal4tapChromaCoef[32];\ char Vertical2tapLumaCoef[32];\ char Vertical2tapChromaCoef[32];\ char Vertical4tapLumaCoef[32];\ char Vertical4tapChromaCoef[32];\typedef struct tagCQuasarMember{ COBJECT_MEMBER CQuasar_MEMBER} CQuasarMember;typedef struct tagCQuasar{ struct tagIDecoderVtbl *lpVtbl; COBJECT_MEMBER CQuasar_MEMBER} CQuasar;///////////////////////////////////////////////////////////////////////////////// public interfacevoid CQuasar__New ( CQuasar** ppCQuasar, TCHAR *pName, BOOL bAllocate, DWORD dwInstance);void CQuasar__Delete(IDecoder* pIDecoder, BOOL bDeleteObject);void CQuasar__Init(IDecoder* pIDecoder, void* pHwLibConf, DWORD* pQuasarVersion);void CQuasar__SetRegistry(IDecoder* pIDecoder, REGISTRY_TABLE* pRegistry);QRESULT CQuasar__WriteNReg(IDecoder* pIDecoder, DWORD StartAddr, DWORD* pData, DWORD n);QRESULT CQuasar__ReadNReg(IDecoder* pIDecoder, DWORD StartAddr, DWORD* pData, DWORD n);void CQuasar__WriteReg(IDecoder* pIDecoder, DWORD RegAddr, DWORD Data);DWORD CQuasar__ReadReg(IDecoder* pIDecoder, DWORD RegAddr);#define CQuasar__ReadDM(this, RegAddr) CQuasar__ReadReg(this, 0x1000 + RegAddr)#define CQuasar__WriteDM(this, RegAddr, Data) CQuasar__WriteReg(this, 0x1000 + RegAddr, Data)QRESULT CQuasar__SetPIODir(IDecoder* pIDecoder, DWORD PIONumber, DWORD Dir);QRESULT CQuasar__WritePIO (IDecoder* pIDecoder, DWORD PIONumber, DWORD Data);QRESULT CQuasar__ReadPIO(IDecoder* pIDecoder, DWORD PIONumber, DWORD* pData);BOOL CQuasar__WriteDramSlave(IDecoder* pIDecoder, IN DWORD addr, IN DWORD* pData, IN DWORD nbytes );BOOL CQuasar__FillDramSlave(IDecoder* pIDecoder, IN DWORD addr,IN DWORD nbytes, DWORD value);BOOL CQuasar__WriteDramMaster(IDecoder* pIDecoder, IN DWORD addr, IN DWORD PhysAddr, IN DWORD nbytes, IN DWORD reverse);QRESULT CQuasar__WriteSCR(IDecoder* pIDecoder, MPEG_SCR SCR);MPEG_SCR CQuasar__ReadSCR(IDecoder* pIDecoder);DWORD CQuasar__ReadHwPts45k(IDecoder* pIDecoder);void CQuasar__SetSpeed(IDecoder* pIDecoder, DWORD Speed);void CQuasar__SetFrameEvent(IDecoder* pIDecoder, DWORD nFrame);DWORD CQuasar__GetFrameEvent(IDecoder* pIDecoder);DWORD CQuasar__GetFrameCounter (IDecoder* pIDecoder);void CQuasar__SetBrightness(IDecoder* pIDecoder, LONG Brightness);DWORD CQuasar__GetBrightness(IDecoder* pIDecoder);void CQuasar__SetContrast(IDecoder* pIDecoder, LONG Contrast);DWORD CQuasar__GetContrast(IDecoder* pIDecoder);void CQuasar__SetSaturation(IDecoder* pIDecoder, LONG Saturation);DWORD CQuasar__GetSaturation(IDecoder* pIDecoder);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -