VLC主要模块入口
解码模块
src/input/decoder.c
static void *DecoderThread( void *p_data )
{
/* The decoder's main loop */
for( ;; )
{
block_t *p_block = block_FifoGet( p_owner->p_fifo );//获取es数据
DecoderProcess( p_dec, p_block );//解码并输出到显示线程
}
return NULL;
}
显示模块
src/video_output/video_output.c
static void *Thread(void *object)
{
mtime_t deadline = VLC_TS_INVALID;
for (;;) {
vout_control_cmd_t cmd;
/* FIXME remove thoses ugly timeouts */
while (!vout_control_Pop(&sys->control, &cmd, deadline, 100000))//等待控制命令
if (ThreadControl(vout, cmd))
return NULL;
deadline = VLC_TS_INVALID;
while (!ThreadDisplayPicture(vout, &deadline))//刷新显示
;
}
}
输入模块
src/input/input.c
Run->
MainLoop->
MainLoopDemux
MainLoopInterface
MainLoopStatistic