mpegts: fix TS packet processing that could lead to lost data
This commit is contained in:
parent
963ec83ce0
commit
cf9470473b
1 changed files with 10 additions and 5 deletions
|
@ -422,12 +422,17 @@ mpegts_input_recv_packets
|
|||
int i, p = 0;
|
||||
mpegts_packet_t *mp;
|
||||
uint8_t *tsb = sb->sb_data + off;
|
||||
int len = sb->sb_size - off;
|
||||
#define MIN_TS_PKT 10
|
||||
int len = sb->sb_ptr - off;
|
||||
#define MIN_TS_PKT 100
|
||||
#define MIN_TS_SYN 5
|
||||
|
||||
if (len < (MIN_TS_PKT * 188))
|
||||
return;
|
||||
|
||||
/* Check for sync */
|
||||
while ( (len >= (MIN_TS_PKT * 188)) &&
|
||||
((p = ts_sync_count(tsb, len)) < MIN_TS_PKT) ) {
|
||||
// could be a bit more efficient
|
||||
while ( (len >= (MIN_TS_SYN * 188)) &&
|
||||
((p = ts_sync_count(tsb, len)) == 0) ) {
|
||||
--len;
|
||||
++tsb;
|
||||
++off;
|
||||
|
@ -451,7 +456,7 @@ mpegts_input_recv_packets
|
|||
}
|
||||
|
||||
/* Pass */
|
||||
if (p >= 10) {
|
||||
if (p >= MIN_TS_SYN) {
|
||||
size_t sz = sizeof(mpegts_packet_t) + (p * 188);
|
||||
|
||||
mp = calloc(1, sz);
|
||||
|
|
Loading…
Add table
Reference in a new issue