第二天上班的收获

  从页擦除开始,页是包含许多区域的容器,通过在 对域填充标志位置位的时候才会开始填充,然后进行object的绘制。

  PES数据包 包括流ID,包长度,携带数据类型标志,PTS,以及PES数据域——>而PES数据域又包括subtitle段,数据标识符(0x20)  subtitle流ID (0x00)    在其结尾还有8个数据域结束掩码,全部被置为1

subtitle段 的构成:同步字节:8比特,在PES数据包内,解码器通过同步字节来确定一段的开始。同步字节应该被设为00001111。

                               段类型:它指示了段所包含的数据的类型。0x10表示PCS,0x11表示RCS, 0x12表示CLUT定义段,0x13表示object数据段,0x80表示display set结束段.

                               页ID,表示了subtitle段中subtitle服务类型。具有composition page ID的段所携带的数据是某一subtitle服务专用的。而具有辅助页ID的段所携带的数据是被多个服务共享的。
                                段长度,表示段的数据域的长度,用字节表示。

                                段数据域,携带着信息。根据段的类型不同,携带的数据的意义不同。 

CLUT定义段   CLUT ID: 标识了一个CLUT。
                      CLUT版本号:指出该段数据的版本号,当该段的任何内容改变是,版本号加1。
                      CLUT项目号:首个CLUT的项目号为1。
                      全范围标志:如果置1,表示Y值,CR值,CB值,T值全部用8位表示。
                      Y值
                      CR值
                      CB值

                      T值

object 数据段 包含的object ID
                      object版本号        
                      object编码方式:表明如何对object进行编码,是用象素的方式,还是用字符串的方式。
                      头部区域数据模块长度
                      尾部区域数据模块长度
                      象素数据子模块

                      填充位: 8个0。

三、subtitle解码系统的实现

分为engine task 对数据包进行预处理,如将某些数据存进缓冲区中 取出PCS解析时存入的PCS_t结构,并将需要显示的域的像素数据注入区域位置上对应的缓冲区中,在然后生成一个STSUBT_DisplayItem_t以供timertask显示。(详情见源码?)

timer task 对数据的显示进行控制,当PTS到来时,将subtitle进行显示。

像素缓冲区储存在解码器初始化时分配,保证在任一时刻只有一个任务对其进行操作(使用指针)。同时,为方便缓冲区操作,对每个缓冲区都定义了一套接口函数,避免了直接操作缓冲区指针,增加了缓冲区操作的透明度,也提高了程序代码的可读性。  

对区域表中的subtitle的存取和输出显示

有如下几张图








  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值