内核数据结构和基本实现

 

.数据结构:

1.全局变量

1gbL  

    scilab环境中使用一个全局变量gbL来存储各时间线和时间线上的片段及转场的各种信息。gbLtlist类型其初始化如下:

gbL=tlist(['gbL';'VA';'VB';'VT';'V2';'V3';'V4'],list(),list(),list(),list(),list(),list());

从初始化后的gbL可以看出有6条时间线(其中VT用来存储转场),每条时间线对应一个用来存储片段或转场的list,且此时各

时间线中无任何片段和转场。如要在某时间线上加一片段或转场,只要在该时间线对应的list中加一片段的数据结构object

转场的数据结构transition即可。

2source_list

    scilab环境中使用全局变量source_list来存储已经导入的素材的各种信息,是一个list类型的列表,其元素用来存储已

导入素材的信息如帧率,地址等。

3)工程属性变量

    _Width:输出视频的宽。

    _Height:输出视频的高。

    _Fps:输出视频的帧率。

    _BitRate:输出视频的比特率。

    _Duration:默认的图像片段的长度。

4)其他 

    gbL_id:标识下一个片段的id,保证gbL中所有的片段和转场的id都不同。

    mod_filename:转场现在所使用的蒙板的文件名。

    mod_martix:转场现在所使用的蒙板矩阵。

 

2.重要的数据结构

1object

       scilab环境中用来描述片段的数据结构如下所示:

tlist(['object';'id';'source';'start_time';'end_time';'filters';'motion';'clarity';'merge';'temp'],id,...

source,start_t,end_t,list(),list(),list(),tlist(['merge';'label';'key';'mask'],0,list(),0),0)

其中id域对应标识片段的实数,source域对应一个tlist数据结构来存储片段的其他参数(如帧率,地址等),start_time

域和end_time域分别对应该片段的开始时间和结束时间,filters域对应list结构的列表,该表节点存储具体滤镜的信息(其数

据结构后面给出),motion域对应节点存储各关键帧的信息的list列表,clarity域对应节点存储各关键透明度的信息的list

列表,merge域对应tlist结构,其数据结构后面给出,temp是扩充的域,可以在内核实现中存储临时的一帧图像。

2transition

       scilab环境中用来描述转场的数据结构如下所示:

list(id,fun_name,start_t,end_t,start_r,end_r,direct,mod);

这是一个list结构,第1个元素id是标识转场的实数,元素fun_name是转场的效果函数,元素start_tend_t是转场的开始时

间和结束时间,元素start_rend_r是转场效果开始和结束的比率,direct是转场方向(VA->VB or VB->VA),mod则表示是

使用模板。

3source

       该数据结构用在object结构的source域中来存储片段的其他参数(如该片段的路径,帧率等

tlist(['obj';'source';'till';'fps';'address';'total';'now_f'],0,0,0,path,1,0);

当片段为视频时source域对应打开视频文件的id,till域标明该片段是图像还是视频,当该片段为视频时,fps域对应视频文件的

帧率,total域对应总的帧数,now_f域对应已经从该文件中读的帧数,而address域则是一字符串对应图像或视频的地址。

4filter

       该数据结构存储具体滤镜的信息,如下所示

tlist(['filter';'function';'argument'],function_name,list());

function域对应该滤镜效果函数,argument域则是该滤镜效果所需的参数列表。

5motion_keyframe

       该数据结构存储关键帧的信息,如下所示

tlist(['key';'time';'position';'size';'rate'],0,list(x,y),list(width,heigth),0);

time域对应该关键帧在片段中的时间位置,position域对应该关键中心此时的空间位置,size域对应此关键帧应放缩到的大小,

rate域则对应此关键帧应旋转的角度。

6clarity_keyframe

       该数据结构存储关键亮度的信息,如下所示

tlist(['key';'time''rate'],0,0);

time域对应该关键帧在片段中的时间位置,rate则对应此关键帧的透明度

7merge

       该数据结构存储片段中一帧叠加到下一时间线对应帧上的叠加方式,

       tlist(['merge';'label';'key';'mask'],0,list(),0)

label域是具体叠加方式的标识,0为默认直接叠加,1mask叠加方式,2key叠加方式,当叠加方式为key时,key域对应存储

关键色素(r,g,b)的list,当叠加方式为mask时,mask域则对应一具体的mask二维矩阵。

 

.基本实现

       内核的全局变量存储了整个工程的所有信息,当要预览或生成视频时,就根据这些信息生成具体某一帧的最终效果显示出来或

写到相应文件中。处理一帧时逐次扫描各时间线,先处理VAVB的滤镜、motion、和透明度效果,得到两帧图像后传给相应的转

场效果函数,得到转场处理后的效果,然后处理V3的滤镜、motion、和透明度效果,得到的图像按设定的叠加方式叠加到转场

果上,这样依次处理V4V5时间线,得到最终的效果。当预览时只要将该帧效果显示出来就可以了,生成视频则反复执行该过程,

直到所有要求的帧都写到指定的视频文件中为止。