毕设-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结构体指针,用来缓存视频显示的数据。
一:
调用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博客。
- 毕设-03.04 vlc视频输出显示流程代码分析(一)
- VLC代码分析(一)代码风格
- vlc-android代码分析一
- vlc源码分析(一) RTSP会话流程
- VLC代码分析(序)
- VLC源代码分析(一)
- VLC学习(2) VLC架构及流程分析
- VLC学习(2) VLC架构及流程分析
- vlc源码分析(二) 播放流程
- vlc源码分析(二) 播放流程
- VLC流程的分析
- vlc播放流程分析
- VLC播放没有视频输出
- VLC代码分析之一
- 代码流程分析一:Settings中默认值的流程-显示-自动旋转屏幕
- vlc的结构分析(一)
- VLC源码分析(一)
- VLC源代码分析一
- 第十天 博文
- 【Android游戏开发-笨木头】抛弃自带输入框,自己实现~自由自在~!
- CListCtrl
- Collection List Set SortedSet ArrayList LinkedList HashSet LinkedHashSet TreeSet的认识及用法
- Flex 4 SkinClass
- 毕设-03.04 vlc视频输出显示流程代码分析(一)
- 第八周4
- 与python的初次接触
- 二叉排序树
- Understanding ELF using readelf and objdump
- 怎样减少新终端开发的问题数
- Uses serialization to make a deep copy
- 10.24
- 10.26