📄 tmbslhdmitx_app.c
字号:
);
/*============================================================================*/
/* PUBLIC FUNCTION DEFINITIONS */
/*============================================================================*/
/*============================================================================*/
/* Initialise demo application */
void
appHdmiTx_init(void)
{
EdidVFmtsAvail = 0;
AudioChannelAllocation = 0;
#ifndef NO_HDCP
HdcpKsvDevices = 0;
lAppMemset(HdcpBksv, 0, sizeof(HdcpBksv));
#endif /* NO_HDCP */
}
/*============================================================================*/
/* Set colourbar test pattern on with RGB infoframe */
tmErrorCode_t
appHdmiTx_test_pattern_on
(
tmUnitSelect_t txUnit,
tmbslHdmiTxVidFmt_t voutFmt,
tmbslHdmiTxVoutMode_t voutMode,
tmbslHdmiTxTestPattern_t pattern
)
{
tmErrorCode_t err;
tmbslHdmiTxVoutMode_t infoFrameMode;
err = tmbslHdmiTxTestSetPattern(txUnit, pattern);
RETIF(err != TM_OK, err + 0x100);
/* set infoframe in RGB when pattern is colorbar */
if (pattern>HDMITX_PATTERN_CBAR8)
{
infoFrameMode = voutMode;
}
else
{
infoFrameMode = HDMITX_VOUTMODE_RGB444;
}
/* update videoinfoframe */
err = setVideoInfoframe(
txUnit,
voutFmt,
infoFrameMode
);
return TM_OK;
}
/*============================================================================*/
/* Set colourbar test pattern off with previous infoframe */
tmErrorCode_t
appHdmiTx_test_pattern_off
(
tmUnitSelect_t txUnit,
tmbslHdmiTxVidFmt_t voutFmt,
tmbslHdmiTxVoutMode_t voutMode
)
{
tmErrorCode_t err;
err = tmbslHdmiTxTestSetPattern(txUnit, HDMITX_PATTERN_OFF);
RETIF(err != TM_OK, err + 0x100);
/* Restore vif */
err = setVideoInfoframe(txUnit, voutFmt, voutMode);
RETIF(err != TM_OK, err + 0x200);
return TM_OK;
}
/*============================================================================*/
/* Set input and output formats, modes, sync source, sink type and audio rate */
tmErrorCode_t
appHdmiTx_setInputOutput
(
tmUnitSelect_t txUnit, /* Defaults: */
tmbslHdmiTxVidFmt_t vinFmt, /* HDMITX_VFMT_02_720x480p_60Hz */
tmbslHdmiTxVinMode_t vinMode, /* HDMITX_VINMODE_YUV422 */
tmbslHdmiTxVidFmt_t voutFmt, /* HDMITX_VFMT_04_1280x720p_60Hz etc */
tmbslHdmiTxVoutMode_t voutMode, /* HDMITX_VOUTMODE_YUV422 */
tmbslHdmiTxSyncSource_t syncSource, /* HDMITX_SYNCSRC_EMBEDDED */
tmbslHdmiTxSinkType_t sinkType, /* HDMITX_SINK_HDMI */
tmbslHdmiTxaFmt_t audioFmt, /* HDMITX_AFMT_SPDIF */
tmbslHdmiTxafs_t audioRate, /* HDMITX_AFS_48K */
UInt8 i2sQualifier,/* 0 */
tmbslHdmiTxPixRate_t pixRate, /* HDMITX_PIXRATE_SINGLE */
tmbslHdmiTxPixEdge_t pixelEdge, /* Pixel sampling edge */
Bool *pbVerified /* Returns True if requested combination
* has been verified during testing */
)
{
tmErrorCode_t err; /* Error code from APIs */
UInt8 swapTable[HDMITX_VIN_PORT_MAP_TABLE_LEN];
UInt8 mirrorTable[HDMITX_VIN_PORT_MAP_TABLE_LEN];
UInt16 uRefPix; /* REFPIX for output */
UInt16 uRefLine; /* REFLINE for output */
UInt16 uScRefPix; /* REFPIX for scaler */
UInt16 uScRefLine; /* REFLINE for scaler */
tmbslHdmiTxVsOnce_t once; /* Line/pixel counters sync */
tmbslHdmiTxScaMode_t scalerMode; /* Current scaler mode */
tmbslHdmiTxBlnkSrc_t blankit; /* Blanking */
tmbslHdmiTxPixTogl_t toggle; /* Toggling */
tmbslHdmiTxVoutDbits_t pathBits; /* Data path bit width */
tmbslHdmiTxPixSubpkt_t spSync; /* Subpacket sync */
UInt8 pixRepeat; /* Pixel repetition */
tmbslHdmiTxVsMeth_t syncMethod; /* Sync method */
tmbslHdmiTxTopSel_t topSel; /* Adjustment for interlaced output */
UInt8 syncIn; /* Embedded or external */
tmbslHdmiTxPixRate_t pixRateSingleDouble; /* HDMITX_PIXRATE_SINGLE */
#ifdef TMFL_TDA9981_SUPPORT
UInt8 enaVideoPortTable[HDMITX_ENABLE_VP_TABLE_LEN];
UInt8 gndVideoPortTable[HDMITX_GROUND_VP_TABLE_LEN];
UInt8 enaAudioPortCfg;
UInt8 gndAudioPortCfg;
#endif /* TMFL_TDA9981_SUPPORT */
/* Script: api_output_frame */
/* CHANGE FROM SCRIPT: CR13: Use tmbslHdmiTxTmdsSetOutputs instead */
err = tmbslHdmiTxTmdsSetOutputs(txUnit, HDMITX_TMDSOUT_FORCED0);
RETIF(err != TM_OK, err + 0x100);
#ifdef TMFL_TDA9981_SUPPORT
/* PR456 Modification - use phase2 : 4 - Phase3 : 8 */
err =tmbslHdmiTxTmdsSetSerializer(txUnit,4,8);
RETIF(err != TM_OK, err + 0x200);
#else /* TMFL_TDA9981_SUPPORT */
/* PR46 Modification - use phase2 : 8 - Phase3 : 4 */
err =tmbslHdmiTxTmdsSetSerializer(txUnit,8,4);
RETIF(err != TM_OK, err + 0x200);
#endif /* TMFL_TDA9981_SUPPORT */
if (sinkType == HDMITX_SINK_EDID)
{
/* change sink Type with the currently defined in EDID */
#ifdef __RC51__
#pragma nowarning(C207)
#endif
err = tmbslHdmiTxEdidGetSinkType(txUnit, &sinkType);
#ifdef __RC51__
#pragma warning(C207)
#endif
RETIF(err != TM_OK, err + 0x300);
}
/* Script: api_output_config */
err = tmbslHdmiTxVideoOutSetConfig(txUnit, sinkType, voutMode,
HDMITX_VOUT_PREFIL_OFF, HDMITX_VOUT_YUV_BLNK_16,
HDMITX_VOUT_QRANGE_FS);
RETIF(err != TM_OK, err + 0x400);
/* Set default config */
pixRepeat = HDMITX_PIXREP_DEFAULT;
pathBits = HDMITX_VOUT_DBITS_12;
syncMethod = HDMITX_VSMETH_V_H;
toggle = HDMITX_PIXTOGL_ENABLE;
/* Set sync details */
if (syncSource == HDMITX_SYNCSRC_EMBEDDED)
{
/* Embedded sync */
syncIn = EMB;
spSync = HDMITX_PIXSUBPKT_SYNC_HEMB;
blankit = HDMITX_BLNKSRC_VS_HEMB_VEMB;
/*PR48 mod: change syncMethod value since it is syncSource dependent*/
syncMethod = HDMITX_VSMETH_V_XDE;
}
else
{
/* External sync */
syncIn = EXT;
spSync = HDMITX_PIXSUBPKT_SYNC_DE;
blankit = HDMITX_BLNKSRC_NOT_DE;
}
#ifdef TMFL_TDA9981_SUPPORT
/* Get the configuration file information */
/* Port swap table */
err = tmbslHdmiTxGetSwapTableConfig(txUnit, swapTable, vinMode);
RETIF(err != TM_OK, err + 0x410);
if(vinMode == HDMITX_VINMODE_CCIR656)
pathBits = HDMITX_VOUT_DBITS_8;
/* Port mirror Table */
err = tmbslHdmiTxGetMirrorTableConfig(txUnit, mirrorTable);
RETIF(err != TM_OK, err + 0x420);
/* Video port enable and pulldown table */
err = tmbslHdmiTxGetVideoPortConfig(txUnit, enaVideoPortTable, gndVideoPortTable);
RETIF(err != TM_OK, err + 0x430);
/* Audio port enable and pulldown table */
err = tmbslHdmiTxGetAudioPortConfig(txUnit, &enaAudioPortCfg, &gndAudioPortCfg);
RETIF(err != TM_OK, err + 0x440);
/* Set the audio and video input port configuration */
err = tmbslHdmiTxSetVideoPortConfig(txUnit, enaVideoPortTable, gndVideoPortTable);
RETIF(err != TM_OK, err + 0x450);
err = tmbslHdmiTxSetAudioPortConfig(txUnit, &enaAudioPortCfg, &gndAudioPortCfg);
RETIF(err != TM_OK, err + 0x460);
#else
/* Script: api_set_INPUT_port */
switch (vinMode)
{
case HDMITX_VINMODE_YUV422:
swapTable[0] = 2;
swapTable[1] = 3;
swapTable[2] = 0;
swapTable[3] = 0;
swapTable[4] = 1;
swapTable[5] = 0;
break;
case HDMITX_VINMODE_CCIR656:
swapTable[0] = 4;
swapTable[1] = 5;
swapTable[2] = 0;
swapTable[3] = 0;
swapTable[4] = 0;
swapTable[5] = 0;
pathBits = HDMITX_VOUT_DBITS_8;
break;
case HDMITX_VINMODE_RGB444:
case HDMITX_VINMODE_YUV444:
default:
swapTable[0] = 2;
swapTable[1] = 3;
swapTable[2] = 4;
swapTable[3] = 5;
swapTable[4] = 0;
swapTable[5] = 1;
break;
}
mirrorTable[0] = 0;
mirrorTable[1] = 0;
mirrorTable[2] = 0;
mirrorTable[3] = 0;
mirrorTable[4] = 0;
mirrorTable[5] = 0;
#endif /* TMFL_TDA9981_SUPPORT */
err = tmbslHdmiTxVideoInSetMapping(txUnit, swapTable, mirrorTable);
RETIF(err != TM_OK, err + 0x500);
err = tmbslHdmiTxVideoInSetFine(txUnit, spSync, HDMITX_PIXTOGL_NO_ACTION);
RETIF(err != TM_OK, err + 0x600);
/* Script: api_input_blanking */
err = tmbslHdmiTxVideoInSetBlanking(txUnit,
blankit, HDMITX_BLNKCODE_ALL_0);
RETIF(err != TM_OK, err + 0x700);
/* Script: api_input_config */
err = tmbslHdmiTxVideoInSetConfig(txUnit, vinMode, pixelEdge,
pixRate, HDMITX_UPSAMPLE_AUTO);
RETIF(err != TM_OK, err + 0x800);
/* Only set audio for HDMI, not DVI */
if (sinkType == HDMITX_SINK_HDMI)
{
/* Set audio parameters -> script in */
err = appHdmiTx_setAudio(txUnit, voutFmt, sinkType, audioFmt, audioRate, i2sQualifier);
RETIF(err != TM_OK, err + 0x900);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -