📄 exolmpegts.c
字号:
vtfMPEG, // dataType
vmfMPEG2, // dataSubtype
0 // description
};
static tmAvFormat_t gVdecOutputFormat =
{
sizeof(tmAvFormat_t), // size
0, // hash
0, // referenceCount
avdcVideo, // dataClass
vtfYUV, // dataType
vdfYUV420Planar, // dataSubtype
0 // description
};
static tmAudioFormat_t gAdecMp3InputFormat =
{
sizeof (tmAudioFormat_t), // size
0, // hash
0, // referenceCount
avdcAudio, // dataClass
atfMPEG, // dataType
(amfMPEG1_Layer1 |
amfMPEG1_Layer2 |
amfMPEG1_Layer3 |
amfMPEG2), // dataSubtype
0, // unused
48000.0 // sampleRate
};
static tmAudioFormat_t gAdecAc3InputFormat =
{
sizeof (tmAudioFormat_t), // size
0, // hash
0, // referenceCount
avdcAudio, // dataClass
atfAC3, // dataType
(UInt32)asAc3_A52, // dataSubtype
0, // unused
48000.0 // sampleRate
};
static tmAudioFormat_t gArendInputFormat =
{
sizeof (tmAudioFormat_t), // size
0, // hash
0, // referenceCount
avdcAudio, // dataClass
atfLinearPCM, // dataType
apfStereo16, // dataSubtype
0, // unused
48000.0 // sampleRate
};
static Char gDefaultPath[128] = DEFAULT_PATH;
static Char gDefaultInfile[128] = DEFAULT_INFILE;
static Char gInfileName[160] = "";
static Bool bLoopEnable = False;
static tmVideoMode_t gVideoOutMode; // Video output mode
static UInt32 gVideoOutWidth; // Width in pixels
static UInt32 gVideoOutHeight; // Height in pixels
static Char gVideoOutName[TM_VIDEOMODE_NAME_MAXSIZE]; // Video mode as a string
static tsaClockHandle_t gPcrClock = { 0 }; // PCR clock handle
static Char gMode[20] = "ntsc";
static tmFrameRate_t gFrameRate = tmFrameRate_30;
static UInt32 gDtsFrameDroppedCount = 0;
static UInt32 gPtsFrameDroppedCount = 0;
static UInt32 gPtsFrameRepeatCount = 0;
static pids_t gPids = { 0, 0, 0, 0, 0 };
static tmosalTaskHandle_t gPsiDataTaskHandle = 0;
static tmosalTaskHandle_t gUserDataTaskHandle = 0;
static tmosalTaskHandle_t gWatchdogTaskHandle = 0;
static tmolVrendGfxVo_DeinterlaceMode_t gDeinterlaceMode = tmolVrendGfxVo_DeinterlaceModeNone;
static tmolVrendGfxVo_EddiLevel_t gEddiLevel = tmolVrendGfxVo_EddiOff;
static tmErrorCode_t gAdecMp3MainPrevErr = TM_OK;
static Audiostream_t gAudioStreamType = MP3_AUDIO_STREAM;
static tmErrorCode_t gAdecAc3MainPrevErr = TM_OK;
static tmosalTaskHandle_t gPrivateDataTaskHandle = 0;
static Bool bEddiLevelSet = False;
static Bool bVideoOutInterlaced = True;
static Bool bFullScreen = True;
static Bool bStartPtsFrameRepeatCount = False;
static Bool bEnableAutoStdSelect = True;
static volatile Bool bVdecMpegStopped = True;
static volatile Bool bAdecMainStopped = True;
static volatile Bool bAdecMp3MainStartedOnce = False;
static volatile Bool bAdecAc3MainStartedOnce = False;
static Bool bGracefulDegradationEnabled = True;
static tmmlMmspHandle_t gAppInstanceMmsp; // Application memory space instance
static IoDescripts_s gIoDescripts; // I/O descriptors
static ptsaInOutDescriptorSetup_t gIoSetupPtr; // Pointer to I/O setup
static tsaControlDescriptorSetup_t gCSetup; // Control setup
static VdecMpegInst_s gVdecMpegInst; // MPEG Video Decoder instance
static AdecMp3Inst_s gAdecMp3MainInst; // MPEG main Audio Decoder instance
static ArendAoInst_s gArendAoInst; // Audio Renderer instance
static VrendGfxVoInst_s gVrendGfxVoInst; // Video Renderer instance
static DemuxMpegTsInst_s gDemuxMpegTsInst; // MPEG TS Demux instance
static VencAnaInst_s gVencAnaInst; // Analog Video Encoder instance
static FgpiInst_s gFgpiInst; // Fast General Purpose Input (FGPI) instance
static FreadInst_s gFreadInst; // File Reader instance
static Int numOfDemuxToVdecBuffers = 20; // Demux->Vdec
static Int numOfDemuxToAdecBuffers = 1; // Demux->Adec
static AdecAc3Inst_s gAdecAc3MainInst; // Dolby AC3 Audio Decoder instance
static Bool gUseFgpi;
#if TMFL_NEED_TIME_DOCTOR
static UInt32 gUserTdId; // TimeDoctor user ID
#endif
// These command line args come from the modified sysinit.c
extern Int __argc;
extern Char **__argv;
//---------------------------------------------------------------------------
// Function Prototypes
//---------------------------------------------------------------------------
// General functions
static tmErrorCode_t attachPictureInfo( ptsaInOutDescriptor_t pIod );
static tmErrorCode_t checkArgCv( Int argc, Char **argv );
static Bool commandControl( Int menuResult, Bool bUseMenu );
static void detachPictureInfo( ptsaInOutDescriptor_t pIod );
static int displayCommandMenu( Bool bUseMenu );
static Int frameRate2Frequency( tmFrameRate_t frameRate );
static void printMp3HeaderInfo( tmAdecMP3Format_t *info );
static void setClockFrequency( UInt32 freq );
static tmErrorCode_t setVideoOutMode( String modeName );
static tmErrorCode_t setVideoRouter( void );
static tmErrorCode_t startPsiDataTask( void );
static tmErrorCode_t startUserDataTask( void );
static tmErrorCode_t startWatchdogTask( Int clock );
static tmErrorCode_t startPrivateDataTask( void );
static void printHelp( void );
tmErrorCode_t verifyProgramNumber_GetPids( Int menu_result );
// General component functions
static tmErrorCode_t closeComponentInstances( void );
static void createComponentControlDescriptors( void );
static void destroyComponentControlDescriptors( void );
static void createComponentSemaphores( void );
static void destroyComponentSemaphores( void );
static void getComponentCapabilities( void );
static void openComponentInstances( void );
static void setupComponentInstances( void );
static tmErrorCode_t startComponentInstances( void );
static tmErrorCode_t stopComponentInstances( void );
static tmErrorCode_t startTasks( void );
// Component I/O queue checking functions
static void checkComponentIoQueues( void );
static void checkAdecToArendIoQueues( void );
static void checkDemuxToAdecIoQueues( void );
static void checkDemuxToVdecIoQueues( void );
static void checkVdecToVrendGfxVoIoQueues( void );
static void checkFgpiToDemuxIoQueues( void );
static void checkFreadToDemuxIoQueues( void );
// Component I/O descriptor creation functions
static void createComponentIoDescriptors( void );
static void createAdecToArendIoDescriptor( void );
static void createDemuxPsiDataIoDescriptor( void );
static void createDemuxToAdecIoDescriptor( void );
static void createDemuxToVdecIoDescriptor( void );
static void createVdecToVrendGfxVoIoDescriptor( void );
static void createVdecUserDataIoDescriptor( void );
static void createFgpiToDemuxIoDescriptor( void );
static void createFreadToDemuxIoDescriptor( void );
static void createDemuxPrivateDataIoDescriptor( void );
// Component I/O descriptor deletion functions
static void destroyComponentIoDescriptors( void );
static void destroyAdecToArendIoDescriptor( void );
static void destroyDemuxToAdecIoDescriptor( void );
static void destroyDemuxToVdecIoDescriptor( void );
static void destroyVdecToVrendGfxVoIoDescriptor( void );
static void destroyFgpiToDemuxIoDescriptor( void );
static void destroyFreadToDemuxIoDescriptor( void );
// Dolby AC3 Audio Decoder component functions
static tmErrorCode_t closeAdecAc3Component( void );
static void connectAdecAc3Decoder( pIoDescripts_s ioDescriptsPtr );
static void createAdecAc3ComponentControlDescriptor( void );
static void createAdecAc3ComponentSemaphores( void );
static void destroyAdecAc3ComponentControlDescriptor( void );
static void destroyAdecAc3ComponentSemaphores( void );
static void getAdecAc3Capabilities( void );
static tmErrorCode_t lAdecAc3MainCompFunc( Int inst,
UInt32 flags,
ptsaCompletionArgs_t args );
static tmErrorCode_t lAdecAc3MainErrorFunc( Int inst,
UInt32 flags,
ptsaErrorArgs_t args );
static tmErrorCode_t lAdecAc3MainProgFunc( Int inst,
UInt32 flags,
ptsaProgressArgs_t args );
static void openAdecAc3Instance( void );
static void setupAdecAc3Component( pAdecAc3Inst_s pInstance );
static tmErrorCode_t startAdecAc3Component( void );
static tmErrorCode_t stopAdecAc3Component( void );
// MPEG Audio Decoder component functions
static tmErrorCode_t closeAdecMp3Component( void );
static void connectAdecMp3Decoder( pIoDescripts_s ioDescriptsPtr );
static void createAdecMp3ComponentControlDescriptor( void );
static void createAdecMp3ComponentSemaphores( void );
static void destroyAdecMp3ComponentControlDescriptor( void );
static void destroyAdecMp3ComponentSemaphores( void );
static void getAdecMp3Capabilities( void );
static tmErrorCode_t lAdecMp3MainCompFunc( Int inst,
UInt32 flags,
ptsaCompletionArgs_t args );
static tmErrorCode_t lAdecMp3MainErrorFunc( Int inst,
UInt32 flags,
ptsaErrorArgs_t args );
static tmErrorCode_t lAdecMp3MainProgFunc( Int inst,
UInt32 flags,
ptsaProgressArgs_t args );
static void openAdecMp3Instance( void );
static void setupAdecMp3Component( pAdecMp3Inst_s pInstance );
static tmErrorCode_t startAdecMp3Component( void );
static tmErrorCode_t stopAdecMp3Component( void );
// Audio Renderer component functions
static tmErrorCode_t closeArendAoComponent( void );
static void createArendAoComponentControlDescriptor( void );
static void createArendAoComponentSemaphores( void );
static void destroyArendAoComponentControlDescriptor( void );
static void destroyArendAoComponentSemaphores( void );
static void getArendAoCapabilities( void );
static tmErrorCode_t lArendCompFunc( Int inst,
UInt32 flags,
ptsaCompletionArgs_t args );
static tmErrorCode_t lArendErrorFunc( Int inst,
UInt32 flags,
ptsaErrorArgs_t args );
static tmErrorCode_t lArendProgFunc( Int inst,
UInt32 flags,
ptsaProgressArgs_t args );
static void openArendAoInstance( void );
static void setupArendAoComponent( pArendAoInst_s pInstance );
static tmErrorCode_t startArendAoComponent( void );
static tmErrorCode_t stopArendAoComponent( void );
// MPEG Transport Stream Demux component functions
static tmErrorCode_t closeDemuxMpegTsComponent( void );
static void createDemuxMpegTsComponentControlDescriptor( void );
static void createDemuxMpegTsComponentSemaphores( void );
static void destroyDemuxMpegTsComponentControlDescriptor( void );
static void destroyDemuxMpegTsComponentSemaphores( void );
static void getDemuxMpegTsCapabilities( void );
static tmErrorCode_t lDemuxMpegTsCompFunc( Int inst,
UInt32 flags,
ptsaCompletionArgs_t args );
static tmErrorCode_t lDemuxMpegTsErrorFunc( Int inst,
UInt32 flags,
ptsaErrorArgs_t args );
static tmErrorCode_t lDemuxMpegTsProgFunc( Int inst,
UInt32 flags,
ptsaProgressArgs_t args );
static void openDemuxMpegTsInstance( void );
static void setupDemuxMpegTsComponent( pDemuxMpegTsInst_s pInstance );
static tmErrorCode_t startDemuxMpegTsComponent( void );
static tmErrorCode_t stopDemuxMpegTsComponent( void );
// Fast General Purpose Input (FGPI) component functions
static tmErrorCode_t closeFgpiComponent( void );
#if 0 // :TODO: Unused code
static void createFgpiComponentControlDescriptor( void );
static void createFgpiComponentSemaphores( void );
static void destroyFgpiComponentControlDescriptor( void );
static void destroyFgpiComponentSemaphores( void );
#endif
static void getFgpiCapabilities( void );
static tmErrorCode_t lFgpiCompFunc( Int inst,
UInt32 flags,
ptsaCompletionArgs_t args );
static tmErrorCode_t lFgpiErrorFunc( Int inst,
UInt32 flags,
ptsaErrorArgs_t args );
static tmErrorCode_t lFgpiProgFunc( Int inst,
UInt32 flags,
ptsaProgressArgs_t args );
static void openFgpiInstance( void );
static void setupFgpiComponent( pFgpiInst_s pInstance );
static tmErrorCode_t startFgpiComponent( void );
static tmErrorCode_t stopFgpiComponent( void );
// File Reader component functions
static tmErrorCode_t closeFreadComponent( void );
static void createFreadComponentControlDescriptor( void );
static void createFreadComponentSemaphores( void );
static void destroyFreadComponentControlDescriptor( void );
static void destroyFreadComponentSemaphores( void );
static void getFreadCapabilities( void );
static tmErrorCode_t lFreadCompFunc( Int inst,
UInt32 flags,
ptsaCompletionArgs_t args );
static tmErrorCode_t lFreadErrorFunc( Int inst,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -