📄 testapp1.c
字号:
}
/*----------------------------------------------------------------------------
* Function : Decode_StartStream
* Input : PID number and type with parameters for service display and type
* Output :
* Return : Error code
* --------------------------------------------------------------------------*/
static ST_ErrorCode_t Decode_StartStream( U16 Pid,
LISTS_StreamType_t StreamType,
SERVICE_Display_t SERVICE_Display,
SERVICE_Mode_t SERVICE_Mode)
{
ST_ErrorCode_t ST_ErrorCode = ST_NO_ERROR;
STAUD_StartParams_t AUDStartParams;
STVID_StartParams_t VIDStartParams;
switch ( StreamType )
{
case MP1V:
case MP2V:
ST_ErrorCode = STPTI_SlotSetPid(PTI_SlotHandle[SLOTVID], Pid);
STTBX_Print(("STPTI_SlotSetPid(SLOTVID,%d)=%s\n", Pid, GetErrorText(ST_ErrorCode) ));
#if defined(STVID_ERROR_RECOVERY_MODE_NONE)
{
ST_ErrorCode = STVID_SetErrorRecoveryMode(VID_Handle, STVID_ERROR_RECOVERY_NONE);
if ( ST_ErrorCode != ST_NO_ERROR )
{
STTBX_Print(("STVID_SetErrorRecoveryMode()Failed 0x%08x \n", ST_ErrorCode ));
}
else
{
STTBX_Print(("STVID_SetErrorRecoveryMode()= STVID_ERROR_RECOVERY_NONE \n" ));
}
}
#endif /* end of STVID_ERROR_RECOVERY_MODE_NONE */
VIDStartParams.RealTime = TRUE;
VIDStartParams.UpdateDisplay = TRUE;
VIDStartParams.StreamID = STVID_IGNORE_ID;
VIDStartParams.DecodeOnce = FALSE;
switch( SERVICE_Mode )
{
case SERVICE_MODE_DVB:
VIDStartParams.StreamType = STVID_STREAM_TYPE_PES;
VIDStartParams.BrdCstProfile = STVID_BROADCAST_DVB;
STTBX_Print(("STVID_Start(RealTime,Update,PES,Ignore,DVB,Decode)=" ));
break;
default:
STTBX_Print(("Decode_StartStream (video) unknown service %d.\n", SERVICE_Mode));
return( ST_ERROR_BAD_PARAMETER );
}
ST_ErrorCode = STVID_Start(VID_Handle, &VIDStartParams);
STTBX_Print(("%s\n", GetErrorText(ST_ErrorCode) ));
#ifdef DISABLE_AVSYNC_FOR_DVB
ST_ErrorCode = STVID_DisableSynchronisation(VID_Handle);
if ( ST_ErrorCode != ST_NO_ERROR )
{
STTBX_Print(("STVID_DisableSyncronisation()=%s\n", GetErrorText(ST_ErrorCode) ));
}
#else
ST_ErrorCode = STVID_EnableSynchronisation(VID_Handle);
if ( ST_ErrorCode != ST_NO_ERROR )
{
STTBX_Print(("STVID_EnableSyncronisation()=%s\n", GetErrorText(ST_ErrorCode) ));
}
#endif /* end of DISABLE_AVSYNC_FOR_DVB */
ST_ErrorCode = STVID_EnableOutputWindow(VID_ViewPortHandle);
if ( ST_ErrorCode != ST_NO_ERROR )
{
STTBX_Print(("STVID_EnableOutputindow()=%s\n", GetErrorText(ST_ErrorCode) ));
}
break;
case MP1A:
case MP2A:
case AC3:
ST_ErrorCode = STPTI_SlotSetPid(PTI_SlotHandle[SLOTAUD], Pid);
STTBX_Print(("STPTI_SlotSetPid(SLOTAUD,%d)=%s\n", Pid, GetErrorText(ST_ErrorCode) ));
if ( StreamType == AC3 )
{
STTBX_Print(("**************Stream Type == AC3 **************\n"));
AUDStartParams.StreamContent = STAUD_STREAM_CONTENT_AC3;
AUDStartParams.SamplingFrequency = AC3_AUDIO_SAMPLING_FREQUENCY;
}
else if ( StreamType == MP2A )
{
STTBX_Print(("**************Stream Type == MP2A **************\n"));
AUDStartParams.StreamContent = STAUD_STREAM_CONTENT_MPEG2;
AUDStartParams.SamplingFrequency = MPEG2_AUDIO_SAMPLING_FREQUENCY;
}
else
{
STTBX_Print(("**************Stream Type == MP1A **************\n"));
AUDStartParams.StreamContent = STAUD_STREAM_CONTENT_MPEG1;
AUDStartParams.SamplingFrequency = MPEG1_AUDIO_SAMPLING_FREQUENCY;
}
switch( SERVICE_Mode )
{
case SERVICE_MODE_DVB:
AUDStartParams.StreamType = STAUD_STREAM_TYPE_PES;
STTBX_Print(("STAUD_Start(PES," ));
break;
default:
STTBX_Print(("Decode_StartStream (audio) unknown service %d.\n", SERVICE_Mode));
return( ST_ERROR_BAD_PARAMETER );
}
AUDStartParams.StreamID = STAUD_IGNORE_ID;
ST_ErrorCode = STAUD_Start(AUD_Handle, &AUDStartParams);
STTBX_Print(("%s,%d,Ignore)=%s\n",
AUDStartParams.StreamContent == STAUD_STREAM_CONTENT_MPEG1 ? "MPEG1":"MPEG2",
AUDStartParams.SamplingFrequency, GetErrorText(ST_ErrorCode) ));
#ifdef DISABLE_AVSYNC_FOR_DVB
ST_ErrorCode = STAUD_DisableSynchronisation(AUD_Handle);
if ( ST_ErrorCode != ST_NO_ERROR )
{
STTBX_Print(("STAUD_DisableSyncronisation()=%s\n", GetErrorText(ST_ErrorCode) ));
}
#else
ST_ErrorCode = STAUD_EnableSynchronisation(AUD_Handle);
if ( ST_ErrorCode != ST_NO_ERROR )
{
STTBX_Print(("STAUD_EnableSyncronisation()=%s\n", GetErrorText(ST_ErrorCode) ));
}
#endif /* end of DISABLE_AVSYNC_FOR_DVB */
ST_ErrorCode = STAUD_Mute(AUD_Handle, FALSE, FALSE); /* unmute the audio */
if ( ST_ErrorCode != ST_NO_ERROR )
{
STTBX_Print(("STAUD_Mute(FALSE)=%s\n", GetErrorText(ST_ErrorCode) ));
}
break;
case PCR:
ST_ErrorCode = STPTI_SlotSetPid(PTI_SlotHandle[SLOTPCR], Pid);
STTBX_Print(("STPTI_SlotSetPid(SLOTPCR,%d)=%s\n", Pid, GetErrorText(ST_ErrorCode) ));
break;
default:
break;
}
return( ST_ErrorCode );
}
#if !defined(DEBUG_MODE)
/*-------------------------------------------------------------------------
* Function : Forever
* Wait forever and o/p debugging info (allowing other tasks to run as well)
* Input : None
* Output :
* Return : only returns if error when starting up.
* ----------------------------------------------------------------------*/
static void Forever(STPTI_Pid_t VideoPid, STPTI_Pid_t AudioPid, int Transponder, SERVICE_Mode_t SERVICE_Mode)
{
ST_ErrorCode_t ST_ErrorCode = ST_NO_ERROR;
STTUNER_TunerInfo_t TunerInfo;
STPTI_ScrambleState_t ScrambleState = STPTI_SCRAMBLE_STATE_UNKNOWN;
U32 Old_VideoSlotCount = 0, Old_AudioSlotCount = 0;
U32 VideoSlotCount=0, AudioSlotCount=0;
time_t CurrentTime;
int LineCounter = COUNT_FOR_PRINT;
BOOL TryToRelockTuner = FALSE;
U32 TryToRelockTunerCount = 0;
U16 InputPacketCount = 0;
U32 PacketErrorCount = 0;
clock_t Timeout;
STTBX_Print(("\nEntering debug loop...\n"));
while(TRUE)
{
/* Wait for 2 secs by default and process aspect ratio change notifications if any inbetween */
Timeout = time_plus(time_now(), ST_GetClocksPerSecond() * 2);
if ( semaphore_wait_timeout ( &AspectRatioChangedSem, &Timeout ) != -1 )
{
ST_ErrorCode = VID_ChangeAspectRatio(&DisplayAspectRatio);
if (ST_ErrorCode != ST_NO_ERROR)
{
STTBX_Print(("VID_ChangeAspectRatio(%d)=%s\n", DisplayAspectRatio, GetErrorText(ST_ErrorCode)));
}
}
/* --- display 'Page header' --- */
if (LineCounter == COUNT_FOR_PRINT)
{
LineCounter = 0;
(void) time(&CurrentTime);
STTBX_Print(("%s", ctime(&CurrentTime) ));
if (PacketInjectorUsed == FALSE)
STTBX_Print(("TunerLock Qlty BER "));
STTBX_Print(("Packets/Errs VSlot ASlot VidFrmCnt AudFrmCnt VidErr AudErr PtiErr\n"));
if (PacketInjectorUsed == FALSE)
STTBX_Print(("========= ==== ========= "));
STTBX_Print(("============ ===== ===== ========= ========= ====== ====== ======\n"));
} /*if COUNT_PRINT*/
/* --- tuner/packet injector status -- */
if (PacketInjectorUsed == FALSE)
{
/* make sure we don't pick up any previous status information */
memset(&TunerInfo, '\0', sizeof( STTUNER_TunerInfo_t ) );
ST_ErrorCode = STTUNER_GetTunerInfo(TUNER_Handle, &TunerInfo);
if (ST_ErrorCode == ST_NO_ERROR)
{
switch (TunerInfo.Status)
{
case STTUNER_STATUS_SCANNING:
case STTUNER_STATUS_LOCKED:
TryToRelockTuner = FALSE;
TryToRelockTunerCount = 0;
break;
case STTUNER_STATUS_UNLOCKED:
case STTUNER_STATUS_NOT_FOUND:
default:
TryToRelockTuner = TRUE;
break;
}
STTBX_Print(("%-9.9s %3u%% %9d ",
StatusToStr(TunerInfo.Status),
TunerInfo.SignalQuality,
TunerInfo.BitErrorRate ));
}
else /* STTUNER_GetTunerInfo() != ST_NO_ERROR */
{
STTBX_Print(("TUNER_GetTunerInfo: '%s'", GetErrorText(ST_ErrorCode) ));
}
if (TryToRelockTuner == TRUE)
{
TryToRelockTunerCount++;
/* if failed lots of times make sure tuner is in known good state */
if (TryToRelockTunerCount >= MAX_TRY_TUNER_LOCK)
{
TryToRelockTunerCount = 0;
(void) TUNER_Quit();
ST_ErrorCode = TUNER_Setup( SERVICE_Mode );
}
/* tune back into the specified frequency if required */
if ( ST_ErrorCode == ST_NO_ERROR )
(void) SelectFrequency( Transponder );
}
}
ST_ErrorCode = STPTI_GetInputPacketCount(PTI_DeviceName, &InputPacketCount);
if (ST_ErrorCode != ST_NO_ERROR)
{
STTBX_Print((" PTI_GetInputPacketCount()=%s ", GetErrorText(ST_ErrorCode) ));
}
else
{
STTBX_Print(("%6u ", InputPacketCount));
}
#if defined(STPTI_DVB_SUPPORT)
/*DIRECTV does not support STPTI_GetPacketErrorCount function*/
{
ST_ErrorCode = STPTI_GetPacketErrorCount(PTI_DeviceName, &PacketErrorCount);
if ((ST_ErrorCode != ST_NO_ERROR) && (ST_ErrorCode != (ST_ErrorCode_t)STPTI_ERROR_NOT_SUPPORTED_FOR_DTV))
{
STTBX_Print((" PTI_GetPacketErrorCount()=%s ", GetErrorText(ST_ErrorCode) ));
}
else
{
STTBX_Print(("%5u ", PacketErrorCount));
}
}
#endif
/* --- STPTI slotcount info --- */
ST_ErrorCode = STPTI_SlotState(PTI_SlotHandle[SLOTVID], &VideoSlotCount, &ScrambleState, &VideoPid);
ST_ErrorCode = STPTI_SlotState(PTI_SlotHandle[SLOTAUD], &AudioSlotCount, &ScrambleState, &AudioPid);
STTBX_Print(("%5u%c%5u%c%9u %9u %6u %6u %6u\t",
VideoSlotCount, (Old_VideoSlotCount == VideoSlotCount)?'*':' ',
AudioSlotCount, (Old_AudioSlotCount == AudioSlotCount)?'*':' ',
VideoEvent_STVID_NEW_PICTURE_TO_BE_DISPLAYED_EVT_Count,
AudioEvent_STAUD_NEW_FRAME_EVT_Count,
VideoEvent_Errors_Count,
AudioEvent_Errors_Count,
StptiEvent_Errors_Count));
if (VideoEvent_NextToPrint != LAST_EVENT_TO_PROCESS)
{
STTBX_Print(("%s ", VideoEvent_EventToStr(VideoEvent_NextToPrint) ));
VideoEvent_NextToPrint = LAST_EVENT_TO_PROCESS;
}
if (AudioEvent_NextToPrint != LAST_EVENT_TO_PROCESS)
{
STTBX_Print(("%s ", AudioEvent_EventToStr(AudioEvent_NextToPrint) ));
AudioEvent_NextToPrint = LAST_EVENT_TO_PROCESS;
}
if (StptiEvent_NextToPrint != LAST_EVENT_TO_PROCESS)
{
STTBX_Print(("%s ", StptiEvent_EventToStr(StptiEvent_NextToPrint) ));
StptiEvent_NextToPrint = LAST_EVENT_TO_PROCESS;
}
Old_VideoSlotCount = VideoSlotCount;
Old_AudioSlotCount = AudioSlotCount;
LineCounter++;
STTBX_Print(("\n"));
}
}
#endif /* !defined(DEBUG_MODE) */
#if defined(DEBUG_MODE)
/*-------------------------------------------------------------------------
* Function : TST_InitCommand
*
* Input : None
* Output :
* Return : only returns if error when starting up.
* ----------------------------------------------------------------------*/
ST_ErrorCode_t TST_InitCommand(void)
{
ST_ErrorCode_t ST_ErrorCode = ST_NO_ERROR;
ST_ErrorCode = COM_InitCommand();
if (ST_ErrorCode != ST_NO_ERROR) return( ST_ErrorCode );
ST_ErrorCode = TUNER_InitCommand();
if (ST_ErrorCode != ST_NO_ERROR) return( ST_ErrorCode );
ST_ErrorCode = AV_InitCommand();
if (ST_ErrorCode != ST_NO_ERROR) return( ST_ErrorCode );
#ifdef MEASURE_PERFORMANCE
ST_ErrorCode = Dhrystone_RegisterCmd();
if (ST_ErrorCode != ST_NO_ERROR) return( ST_ErrorCode );
#endif
return ST_ErrorCode;
}
#endif
/* EOF --------------------------------------------------------------------- */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -