VLC播放器分析

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数据流



猜你喜欢

转载自blog.csdn.net/yeeman/article/details/25537837