DTV 数字电视(三,demux解码TS packet,实现parse TS_HEADer function)

1.tsHeader struct

2.code

typedef struct
{
    bool         ts_header_exist;//a flag Used to mark whether this tsHeader is valid or not
    unsigned int sync_byte                    : 8 ;
    unsigned int transport_error_indicator    : 1 ;
    unsigned int payload_unit_start_indicator : 1 ;
    unsigned int transport_priority           : 1 ;
    unsigned int pid                          : 13;
    unsigned int transport_scrambling_control : 2 ;
    unsigned int adaptation_field_control     : 2 ;
    unsigned int continuity_counter           : 4 ;
} TRANSPORT_PACKET_HEADER;

TRANSPORT_PACKET_HEADER  getTsHeaderFromPacket(uint8_t *pidData, unsigned int length ,unsigned int flag)
{
    TRANSPORT_PACKET_HEADER tsHeader;
    tsHeader.ts_header_exist = false;
    if (pidData[0] != 0x47)
    {
        tsHeader.tsHeaderExist = false;
        LOG("DEBUG", "sync_byte is not 0x47.");
        return tsHeader;
    }
    tsHeader.sync_byte                    = pidData[0];
    tsHeader.transport_error_indicator    = ((pidData[1] >> 7) & 0x01);
    tsHeader.payload_unit_start_indicator = ((pidData[1] >> 6) & 0x01);
    tsHeader.transport_priority           = ((pidData[1] >> 5) & 0x01);
    tsHeader.pid                          = (((pidData[1] & 0x1f) << 8) | pidData[2]);
    tsHeader.transport_scrambling_control = ((pidData[3] >> 6) & 0x03);
    tsHeader.adaptation_field_control     = ((pidData[3] >> 4) & 0x03);
    tsHeader.continuity_counter           = (pidData[3] & 0x0f);
    tsHeader.tsHeaderExist                = true;
    LOG("DEBUG", "get data of ts header success.");
    return tsHeader;
}

3.code explaination

TRANSPORT_PACKET_HEADER  getTsHeaderFromPacket(***),先对选哟return的参数进行初始化,即将existFlag置为false,表示该参数无效。再对sync_byte是否等于0x47进行了校验,如果校验成功,会依次取出对应filed值,将其赋给结构体TRANSPORT_PACKET_HEADER,并且在return之前将existFlag置为true,表示返回值有效。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值