自学 subtitle 的原理和实现 PPT 所得及所问
subtitle 以流的形式进行输入和输出 让我想起了j2se里的inputStream和outputStream 就像两根水管 输出端连接到输入端
这个管道里面,又包含了很多束subtitle的服务(宏观地说包含各种文本/图像)
一个subtitle 流必须被PID相同的数据包传送,同一个subtitle服务必须被同一个subtitle流所携带,不同的subtitle可以为同一个节目提供不同语言的subtitle,也能为不同的节目提供服务
一个subtitle服务最多包含两种页ID的段。一种是包含该subtitle服务特有数据的段,这种段的使用是强制性的。一种是包含有多个subtitle服务所共享的数据的段,这种段的使用是可选的。
每束服务又有许多的页面——> 页面又是由区域构成的,区域具有一系列参数特征(ID,水平尺寸等),而区域又含有大量对象,对象们的特征就是文字图像等具体的内容;
其中PCS(修饰页构成的段码——显示使用的域):域的外部修饰与域本身的属性无关,如列表,空间位置,页的状态等。除此之外,PCS还携带着若干张由域构成的表,PCS同时也含有域在屏幕位置上的列表 一个域垄断了它所占的扫描行的任意部分,没有任何两个域可以在屏幕上水平相邻。
具体的,PCS包含了页的生存时间,页版本号,页状态,处理长度,域ID,域的水平垂直位置
RCS(修饰域构成——object的使用和位置的段码):域的本身属性颜色大小像素深度,以及域的对象及其位置列表等。
当PCS中的页状态时mode change 或acquisition point 时,整个RCS的集合将会出现在display set中。当进行页更新时,display set只需要包含那些需要改变的数据。域ID,域版本号,域填充标志,域的宽度,域高度,域兼容等级等。
一旦被引入内存,域的一些特征在余下的epoch内将不会改变 ,这些特征包括:宽度,高度,深度,域适应程度和CLUT ID。其它在RCS中所描述的特征还包括域填充标志,以及REGION_N-BIT_PIXEL_CODE。
CLUT定义段:包含CLUT ID所标识的一个CLUT的信息。
另外:PES包中PTS控制显示的时间(待详细了解)
二、解码过程(粗):
数据包和PES被剔除头部(?)
将PTS(时间控制)进入解码数据缓冲区,控制何时何地进行解码。
(对subtitle服务来说,每个PES数据包中最多也只能有一个display set。但是PES数据包可以包含若干个不同的subtitle服务的display set)(display set是什么)
共享一个PTS的段分别被不同的PES包传播也是有可能的。
将滤出的subtitle段进入24K编码数据缓冲区,在进入像素缓冲区之前,PCS,RCS,CLUT进入构成缓冲区,对整个subtitle的框架进行准备。
PCS的页状态:mode change acquisition point 和normal case 这些状态都会导致一个page instance 待续