static void hdhomerun_video_parse_rtp(struct hdhomerun_video_sock_t *vs, struct hdhomerun_pkt_t *pkt) { pkt->pos += 2; uint32_t rtp_sequence = hdhomerun_pkt_read_u16(pkt); pkt->pos += 8; uint32_t previous_rtp_sequence = vs->rtp_sequence; vs->rtp_sequence = rtp_sequence; /* Initial case - first packet received. */ if (previous_rtp_sequence == 0xFFFFFFFF) { return; } /* Normal case - next sequence number. */ if (rtp_sequence == ((previous_rtp_sequence + 1) & 0xFFFF)) { return; } /* Error case - sequence missed. */ vs->network_error_count++; /* Restart pid sequence check after packet loss. */ int i; for (i = 0; i < 0x2000; i++) { vs->sequence[i] = 0xFF; } }
static void hdhomerun_video_parse_rtp(struct hdhomerun_video_sock_t *vs, struct hdhomerun_pkt_t *pkt) { pkt->pos += 2; uint32_t rtp_sequence = hdhomerun_pkt_read_u16(pkt); pkt->pos += 8; if (rtp_sequence != ((vs->rtp_sequence + 1) & 0xFFFF)) { if (vs->rtp_sequence != 0xFFFFFFFF) { vs->network_error_count++; /* restart pid sequence check */ memset((void *)vs->sequence, 0xFF, sizeof(vs->sequence)); } } vs->rtp_sequence = rtp_sequence; }