怎么判断一帧的开始

一帧可能有几个SLICE的!你要把所有的SLICE定位出来,然后再找到每个SLICE的起始宏块的地址,地址为0的话就是一帧开始了!
  的确,除去sps和pps,单纯从0x0000000101和0x0000000105来看,直接是看不出帧的边界的,只是一个个的slice的边界罢了,但是一个slice的起始宏块的地址是0,则代表该slice是一帧的第一个slice,故也就是一帧的开始了。
  当时求帧边界时,用了个取巧的办法:就是当遇到0x0000000101和0x0000000105时,求出对应的dts,而如果帧率为25,则每帧的播放时间是0.04秒,则求出下一个0x0000000101和0x0000000105时,求出其dts,如果和前面的基准dts的差是0.04秒,则认为就是一帧了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
串口通讯中判断一帧数据的功能一般包括时间间隔判断和帧头帧尾的判断。 时间间隔判断的实现方法一般是通过计时器来实现。在每次接收到数据时,启动计时器开始计时,如果在一定时间内没有接收到下一帧数据,则认为这一帧数据接收完成。计时器的时间可以根据实际需求进行调整。 帧头帧尾的判断可以根据具体的通讯协议来实现。一般情况下,在数据帧的开头和结尾会添加特定的字节或者字符作为帧头和帧尾的标志。在接收数据的过程中,可以通过判断接收到的数据是否符合帧头和帧尾的标志来判断一帧数据是否接收完成。具体实现方法如下: 1. 帧头判断:在接收到第一个字节时,判断其是否为帧头标志,如果是则开始接收数据;如果不是,则继续等待下一个字节。 2. 帧尾判断:在接收到数据时,判断其是否为帧尾标志,如果是则认为一帧数据接收完成;如果不是,则继续接收数据。 下面是一个简单的示例代码: ```c #define FRAME_HEADER 0xAA // 帧头标志 #define FRAME_TAIL 0x55 // 帧尾标志 #define FRAME_LEN 8 // 数据帧长度 uint8_t rx_buf[FRAME_LEN]; // 接收缓存区 uint8_t rx_index = 0; // 接收缓存区索引 bool rx_complete = false; // 接收完成标志 void uart_receive_handler(uint8_t byte) { if (rx_index == 0 && byte != FRAME_HEADER) { // 第一个字节不是帧头,丢弃数据 return; } rx_buf[rx_index++] = byte; if (rx_index == FRAME_LEN) { if (byte == FRAME_TAIL) { // 数据帧接收完成 rx_complete = true; } else { // 数据帧错误,重新开始接收 rx_index = 0; } } } ``` 在上面的代码中,`uart_receive_handler`是串口接收中断的回调函数,用于接收数据。当接收到第一个字节时,会判断其是否为帧头标志;接收到后续的字节时,会将其存入接收缓存区中,直到接收完成。在接收完成后,会判断最后一个字节是否为帧尾标志,如果是则认为一帧数据接收完成,否则说明数据帧错误,需要重新开始接收。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值