|
|
|
@ -2643,13 +2643,12 @@ static int parse_pcr(int64_t *ppcr_high, int *ppcr_low, |
|
|
|
|
const uint8_t *packet); |
|
|
|
|
|
|
|
|
|
/* handle one TS packet */ |
|
|
|
|
static int handle_packet(MpegTSContext *ts, const uint8_t *packet) |
|
|
|
|
static int handle_packet(MpegTSContext *ts, const uint8_t *packet, int64_t pos) |
|
|
|
|
{ |
|
|
|
|
MpegTSFilter *tss; |
|
|
|
|
int len, pid, cc, expected_cc, cc_ok, afc, is_start, is_discontinuity, |
|
|
|
|
has_adaptation, has_payload; |
|
|
|
|
const uint8_t *p, *p_end; |
|
|
|
|
int64_t pos; |
|
|
|
|
|
|
|
|
|
pid = AV_RB16(packet + 1) & 0x1fff; |
|
|
|
|
is_start = packet[1] & 0x40; |
|
|
|
@ -2716,7 +2715,6 @@ static int handle_packet(MpegTSContext *ts, const uint8_t *packet) |
|
|
|
|
if (p >= p_end || !has_payload) |
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
pos = avio_tell(ts->stream->pb); |
|
|
|
|
if (pos >= 0) { |
|
|
|
|
av_assert0(pos >= TS_PACKET_SIZE); |
|
|
|
|
ts->pos47_full = pos - TS_PACKET_SIZE; |
|
|
|
@ -2927,7 +2925,7 @@ static int handle_packets(MpegTSContext *ts, int64_t nb_packets) |
|
|
|
|
ret = read_packet(s, packet, ts->raw_packet_size, &data); |
|
|
|
|
if (ret != 0) |
|
|
|
|
break; |
|
|
|
|
ret = handle_packet(ts, data); |
|
|
|
|
ret = handle_packet(ts, data, avio_tell(s->pb)); |
|
|
|
|
finished_reading_packet(s, ts->raw_packet_size); |
|
|
|
|
if (ret != 0) |
|
|
|
|
break; |
|
|
|
@ -3321,7 +3319,7 @@ int avpriv_mpegts_parse_packet(MpegTSContext *ts, AVPacket *pkt, |
|
|
|
|
buf++; |
|
|
|
|
len--; |
|
|
|
|
} else { |
|
|
|
|
handle_packet(ts, buf); |
|
|
|
|
handle_packet(ts, buf, len1 - len + TS_PACKET_SIZE); |
|
|
|
|
buf += TS_PACKET_SIZE; |
|
|
|
|
len -= TS_PACKET_SIZE; |
|
|
|
|
if (ts->stop_parse == 1) |
|
|
|
|