📄 saa7112.c
字号:
extern tmLibdevErr_t
saa7112SetBrightness(UInt val)
{
return saa7112SetBrightnessM(&defaultVD[0], val);
}
/******************************************************************************/
extern tmLibdevErr_t
saa7112GetContrastM(pboardVIDec_t pVD, UInt * val)
{
if(gAdapterType == vaaNone)
{
return TMLIBDEV_OK;
}
return iicReadReg(pVD->slaveAddr, SAA711_CONTRAST_REG, val);
}
extern tmLibdevErr_t
saa7112GetContrast(UInt * val)
{
return saa7112GetContrastM(&defaultVD[0], val);
}
/******************************************************************************/
extern tmLibdevErr_t
saa7112SetContrastM(pboardVIDec_t pVD, UInt val)
{
if(gAdapterType == vaaNone)
{
return TMLIBDEV_OK;
}
if (val > 127)
return BOARD_ERR_VAL_OUT_OF_RANGE;
return iicWriteReg(pVD->slaveAddr, SAA711_CONTRAST_REG, val);
}
extern tmLibdevErr_t
saa7112SetContrast(UInt val)
{
return saa7112SetContrastM(&defaultVD[0], val);
}
/******************************************************************************/
extern tmLibdevErr_t
saa7112GetSaturationM(pboardVIDec_t pVD, UInt * val)
{
if(gAdapterType == vaaNone)
{
return TMLIBDEV_OK;
}
return iicReadReg(pVD->slaveAddr, SAA711_SATURATION_REG, val);
}
extern tmLibdevErr_t
saa7112GetSaturation(UInt * val)
{
return saa7112GetSaturationM(&defaultVD[0], val);
}
/******************************************************************************/
extern tmLibdevErr_t
saa7112SetSaturationM(pboardVIDec_t pVD, UInt val)
{
if(gAdapterType == vaaNone)
{
return TMLIBDEV_OK;
}
if (val > 127)
return BOARD_ERR_VAL_OUT_OF_RANGE;
return iicWriteReg(pVD->slaveAddr, SAA711_SATURATION_REG, val);
}
extern tmLibdevErr_t
saa7112SetSaturation(UInt val)
{
return saa7112SetSaturationM(&defaultVD[0], val);
}
/******************************************************************************/
extern tmLibdevErr_t
saa7112GetHueM(pboardVIDec_t pVD, UInt * val)
{
if(gAdapterType == vaaNone)
{
return TMLIBDEV_OK;
}
return iicReadReg(pVD->slaveAddr, SAA711_HUE_REG, val);
}
extern tmLibdevErr_t
saa7112GetHue(UInt * val)
{
return saa7112GetHueM(&defaultVD[0], val);
}
/******************************************************************************/
extern tmLibdevErr_t
saa7112SetHueM(pboardVIDec_t pVD, UInt val)
{
if(gAdapterType == vaaNone)
{
return TMLIBDEV_OK;
}
if (val > 255)
return BOARD_ERR_VAL_OUT_OF_RANGE;
return iicWriteReg(pVD->slaveAddr, SAA711_HUE_REG, val);
}
extern tmLibdevErr_t
saa7112SetHue(UInt val)
{
return saa7112SetHueM(&defaultVD[0], val);
}
/******************************************************************************/
/* Helper functions for video decoder HAL functionality */
static Bool /* Successful or not */
SetReg( /* Set a register value */
pboardVIDec_t pVD, /* Pointer to I2C access structure */
UInt8 bReg, /* Subaddress of the register */
UInt8 bData) /* Value to be written */
{
lastI2cError = 0;
return ((lastI2cError = iicWriteReg(pVD->slaveAddr, bReg, bData)) == TMLIBDEV_OK);
}
static Bool /* Successful or not */
GetReg( /* Get a register value */
pboardVIDec_t pVD, /* Pointer to I2C access structure */
UInt8 bReg, /* Subaddress of the register */
UInt8 * pbData) /* Pointer to variable to recieve value */
{
UInt data;
Bool retVal;
lastI2cError = 0;
if (retVal = ((lastI2cError = iicReadReg (pVD->slaveAddr, bReg, &data)) == TMLIBDEV_OK))
*pbData = data;
else
*pbData = 0;
return retVal;
}
/***************************************************************************/
extern tmLibdevErr_t
saa7112GetVSyncFallingEdge(pboardVIDec_t pVD, UInt *lineNumber)
{
// Equivalent to Video DecHAL VideoDecGetDefaultAcquisitionWnd
switch (pVD->curVideoStandard)
{
case vasNTSC:
/* First line seen by TM */
*lineNumber = 10;
break;
case vasPAL:
*lineNumber = 23;
break;
default:
return BOARD_ERR_COLOR_STANDARD_NOT_DETECTED;
}
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112GetSlicedData(pboardVIDec_t pVD, UInt8 *Y, UInt8 *U, UInt8 *V, tmVideoDataService_t service, UInt size, UInt8 *data, UInt8 *dataSize)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112GetStatus(pboardVIDec_t pVD, tmVideoStatusType_t type, UInt *state)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112GetSupportedDataServices(tmVideoDataService_t fieldOne[], tmVideoDataService_t fieldTwo[], UInt8 tblSize)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112SetDataServices(pboardVIDec_t pVD, tmVideoDataService_t fieldOne[], tmVideoDataService_t fieldTwo[], UInt8 tblSize)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112GetSlicerLineFlags(pboardVIDec_t pVD, Bool fieldOne[], Bool fieldTwo[], UInt8 tblSize)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112EnableSlicing(pboardVIDec_t pVD, Bool enable)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112SetSlicerVideoStandard(pboardVIDec_t pVD, tmVideoAnalogStandard_t standard)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112GetSlicerVideoStandard(pboardVIDec_t pVD, tmVideoAnalogStandard_t *standard)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112ToggleFieldID(pboardVIDec_t pVD, Bool toggle)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112SetSlicerInput(pboardVIDec_t pVD, UInt num)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112GetSlicerInput(pboardVIDec_t pVD, UInt *num)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112SetVideoColor(pboardVIDec_t pVD, tmVideoColor_t color, UInt val)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112GetVideoColor(pboardVIDec_t pVD, tmVideoColor_t color, UInt *val)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112SetAnalogInput(pboardVIDec_t pVD, UInt num)
{
/* Similar to Video DecHAL VideoDecSetVideoSource */
UInt8 ucVal;
/* Set Input mode ------------------------------------------------------------*/
/* Check only first access */
if (!GetReg(pVD, AnalogInputControl1, &ucVal))
return (tmLibdevErr_t) lastI2cError; /* Switch input mode (line) */
SetReg(pVD, AnalogInputControl1, ucVal & ~0x0f | (num & 0x0f));
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112GetAnalogInput(pboardVIDec_t pVD, UInt *num)
{
/* Similar to Video DecHAL VideoDecGetVideoSource */
UInt8 ucVal;
/* Read video input source from decoder */
if (!GetReg(pVD, AnalogInputControl1, &ucVal))
return (tmLibdevErr_t) lastI2cError;
*num = ucVal & 0x0F;
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112SetStandard(pboardVIDec_t pVD, tmVideoAnalogStandard_t standard)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112SetSourceType(pboardVIDec_t pVD, tmVideoSourceType_t type)
{
/* Equivalent to Video DecHAL VideoDecSetSourceType */
UInt8 ucVal;
/* Check only forst access */
if (GetReg(pVD, SyncControl, &ucVal)) /* Read old value */
{
if (type == vsoVCR)
SetReg(pVD, SyncControl, ucVal & ~0x18 | 0x18); /* Set bit, if VCR */
else
SetReg(pVD, SyncControl, ucVal & ~0x18 | 0x00); /* else, clear bit */
}
else
return (tmLibdevErr_t) lastI2cError;
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112GetSourceType(pboardVIDec_t pVD, tmVideoSourceType_t *type)
{
/* Equivalent to Video DecHAL VideoDecGetSourceType */
UInt8 ucVal;
/* Check only forst access */
if (GetReg(pVD, SyncControl, &ucVal)) /* Read old value */
{
if (ucVal & 0x18 == 0x18)
*type = vsoVCR;
else
*type = vsoTV;
}
else
return (tmLibdevErr_t) lastI2cError;
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112SetOutputFormat(pboardVIDec_t pVD, tmVideoRGBYUVFormat_t format)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112GetOutputFormat(pboardVIDec_t pVD, tmVideoRGBYUVFormat_t *format)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112SetAcquisitionWnd(pboardVIDec_t pVD, UInt beginX, UInt beginY, UInt endX, UInt endY)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112GetAcquisitionWnd(pboardVIDec_t pVD, UInt *beginX, UInt *beginY, UInt *endX, UInt *endY)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112GetDefaultAcquisitionWnd(pboardVIDec_t pVD, UInt *beginX, UInt *beginY, UInt *endX, UInt *endY)
{
// Equivalent to Video DecHAL VideoDecGetDefaultAcquisitionWnd
switch (pVD->curVideoStandard)
{
case vasNTSC:
/* Set default acquisition window for NTSC */
*beginX = 6;
*beginY = 12;
*endX = *beginX + 719;
*endY = *beginY + 239;
break;
case vasPAL:
/* Set default acquisition window for PAL */
*beginX = 6;
*beginY = 1;
*endX = *beginX + 719;
*endY = *beginY + 287;
break;
default:
return BOARD_ERR_COLOR_STANDARD_NOT_DETECTED;
}
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112SetOutputSize(pboardVIDec_t pVD, UInt width, UInt height)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112SetInterlaceMode(pboardVIDec_t pVD, Bool interlace)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112DisableDecoder(pboardVIDec_t pVD, Bool disable)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112EnablePowerSaveMode(pboardVIDec_t pVD, Bool enable)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112GetGPIOCount(pboardVIDec_t pVD, UInt *num)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112SetGPIOState(pboardVIDec_t pVD, UInt pin, UInt state)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112GetGPIOState(pboardVIDec_t pVD, UInt pin, UInt *state)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112OpenVBI(pboardVIDec_t pVD, UInt sampleFreq, UInt startLine, UInt numLines)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112EnableVBI(pboardVIDec_t pVD, Bool enable)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112SetVBIMode(pboardVIDec_t pVD, tmVideoVBIMode_t mode)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112SetSlicerMode(pboardVIDec_t pVD, tmVideoSlicerMode_t mode)
{
return TMLIBDEV_OK;
}
extern tmLibdevErr_t
saa7112CloseVBI(pboardVIDec_t pVD)
{
return TMLIBDEV_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -