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,表示返回值有效。