锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / C++开源 / VLC视频输出层技术
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

VLC视频输出层技术

6.1 数据结构和主循环

重要的数据结构被定义在inchide\vlc--vidco.h和indude\video-output.h里。事实上VLC的SPU解码器只 能解析SPU报头和把SPU图片数据转化成VLC的格式,这样做是为了为能处理的快一点。部分类似SPU解码器在src\video_output \video\spu.c里。
picture_t:是主要的数据结构,描述了视频解码器线程需要的一切。其中的p_data是一个YUV平面图的指针;
subpicture_t:存储subtitle部分(一个视频文件包括audio,video,subtiiles);
vout_thread_t:一个很复杂的合成结构。
基本上video输出线程管理一堆图像和子图像(默认5个)。每一个图像有一个状态(显示,消耗,清空等等)和确定的播放时间。视频输出的主要工作是一个无限循环:
(1)在堆上找到下一个要显示的图像。
(2)找到当前要显示的子图像。
(3)翻译图像(如:视频输出插件不支持YIJV):调用最佳的YUV插件,做缩放比例,添加subtitles和一个可选的图像字段。
(4)在特定的时间到来之前休眠。
(5)视频插件显示图像(通常在缓冲器转换时输出)。p_vout->p_buffer是两个缓冲器(用于YUV的转换)的排列,p_vout->i_buffer_index表明当前显示的缓冲器。
(6)管理事件。

6.2 视频解码器的方法

视频输出导出了一些函数,以便解码器能够发送它们已经解码过的数据。
(1)picture_t*vout_CreatePicture(vout_thread_t*p_vout,vlc_bool_t b_progressive,vlc_bool_t b_top_field_first,unsigned int i_nb_fields):
这个是最重要的函数,它分配视频解码器指示的缓冲器,然后用解码后的数据反馈到(void*)p_picture->p_data里,必要时 调用vout_-DisplayPicture和vout_DatePicture。最后返回已分配好的视频缓冲器。比如i_type表示 YUV_420_PICTURE,i_width和I_height表示像素。如果堆里没有图像的话,那么这个函数将返回为空。
(2)vout_Lillkpieture(vout_thread_t*p_vout,pieture_t*p_pic):
增加图像的引用计数,以便在解码器还需要它的时候不会意外将它释放。比如说一个I图片或者P图片在已经被解码和交叉存取为B图片后可能还要用到。
(3)vout_UnlinkPicture(vout_thread_t*p_vout,picture_t*p_pic):
减少图像的引用计数,等于0时就可以将图像释放。
(4)vout_DatePicture(vout_thread_t*p_vout,picture*p_pic):
赋予图像的播放时间,可以在图像在开始播放时就知道它什么时候播放结束。比如说当赋予I或则P图片时间时,必须等到先前所有的B图片全部被解码完。
(5)vout_DisplayPieture(vout_thread_t*p_vout,picture_t*p_pic):
通知视频输出端一个图像已经被解码等候显示。可以在vout_DatePicture前后调用。
(6)vout_DestroyPicture(vout_thread_t*p_vout,picture_t*p_pic):
为图片做空标记,减小视频输出的内存堆的尺寸(在流解析错误时非常有用)。
(7)subpieture_t*vout_CreateSubPicture(vout_thread_t*p_vout,int i_channel,inti_type):
返回到一个已分配好的子图片缓冲器。i_channel表示子图片信道的ID,i_type表示是DVDSUBPICTURE还是TEXTSUBPICTURE,i_size表示包的字节长度。
(8)vout_DisplaySubPicture(vout_thread_t*p_vout,subpicture_t*p_subpic):
通知视频输出一个子图象已被完全解码,废除解码前的子图象。
(9)vout_DestroySubPicture(vout_thread_t*p_vout,subpicture_t*p_subpic):
为子图片做空标记。

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内