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
数据流
本文主要探讨VLC播放器的三大关键模块:解码、显示和输入模块。解码模块在src/input/decoder.c中实现,负责将各种格式的媒体数据解码为可处理的格式;显示模块位于src/video_output/video_output.c,处理解码后的视频帧,确保在屏幕上正确呈现;输入模块在src/input/input.c中,负责管理媒体文件的读取和数据流处理。
893

被折叠的 条评论
为什么被折叠?



