毕设-03.04 vlc视频输出显示流程代码分析(一)

来源:互联网 发布:tvb直播软件 编辑:程序博客网 时间:2024/05/21 04:17
vlc视频输出显示流程代码分析
一:
调用vout_Create函数(函数过程中创建一个新的视频输出线程)。
1)调用vlc_custom_create()函数初始化p_vout变量,尤其是p_vout->p_picture[ i ](输出显示的图像buffer)(vlc_custom_create()函数是怎样弄到图像数据的,这一点还不清楚!!!
2)后来会调用函数:vlc_clone( &p_vout->p->thread, RunThread, p_vout,VLC_THREAD_PRIORITY_OUTPUT ) ) ;(函数原型:int vlc_clone (vlc_thread_t *p_handle, void * (*entry) (void *), void *data,int priority))
在vlc_clone函数的定义中,会执行:pthread_create (p_handle, &attr, entry, data)函数,这里的entry和data实际上就分别是vout_Create函数中的RunThread和p_vout。
pthread_create是UNIX环境创建线程函数。
这样就创建了一个线程,执行函数entry(RunThread)和data(p_vout),即RunThread(p_vout);
小节:在vcout_Create函数中会间接地创建一个线程,运行RunThread(p_vout)。


二:RunThread函数
调用InitThread函数:在InitThread函数中用p_vout->p_picture[ i ]初始化PP_RENDERPICTURE[i_index]
然后在RunThread函数中:
将PP_RENDERPICTURE[i_index] 赋值给p_pic.(PP_RENDERPICTURE是宏:p_vout->render.pp_picture)
将p_pic赋值给p_picture,
然后建立一个picutre_t的结构:p_filtered_picture,它通过p_picture进行初始化。(初始化的过程中会进入filter_chain_VideoFilter函数进行一些VideoFilter操作。(filter_chain_VideoFilter函数在filter_chain.c中定义))
将p_filtered_picture输入vout_RenderPicture()函数,得到渲染后的图片buffer。(这里,vout_RenderPicture()函数在video_pictures.c中定义,完成图片的渲染功能。)
在video_output.c文件的RunThread函数内调用该函数:
p_directbuffer = vout_RenderPicture( p_vout,
                              p_filtered_picture, p_subpic,                                        
                             spu_render_time ); 
p_directbuffer是一个picture_t结构体指针,用来缓存视频显示的数据。

最终调用 p_vout->pf_display( p_vout, p_directbuffer ); 进行界面显示。


明天目标:

1)查资料,看看今天第一点里面提到的vlc_custom_create()函数是怎样弄到图像数据的。

2)从输入着手,分析视频流是怎么解码处理,怎么到上层显示的。


本文作者为jack_incredible,如果未经许可转载,那么请注明转载至jack_incredible博客。

原创粉丝点击