⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testapp1.c

📁 5105 AV输出FILTER, 解析源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
}


/*----------------------------------------------------------------------------
 * 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 + -