|
|
|
@ -1986,6 +1986,15 @@ static int parse_pcr(int64_t *ppcr_high, int *ppcr_low, |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void seek_back(AVFormatContext *s, AVIOContext *pb, int64_t pos) { |
|
|
|
|
|
|
|
|
|
/* NOTE: We attempt to seek on non-seekable files as well, as the
|
|
|
|
|
* probe buffer usually is big enough. Only warn if the seek failed |
|
|
|
|
* on files where the seek should work. */ |
|
|
|
|
if (avio_seek(pb, pos, SEEK_SET) < 0) |
|
|
|
|
av_log(s, pb->seekable ? AV_LOG_ERROR : AV_LOG_INFO, "Unable to seek back to the start\n"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int mpegts_read_header(AVFormatContext *s) |
|
|
|
|
{ |
|
|
|
|
MpegTSContext *ts = s->priv_data; |
|
|
|
@ -2009,11 +2018,7 @@ static int mpegts_read_header(AVFormatContext *s) |
|
|
|
|
/* normal demux */ |
|
|
|
|
|
|
|
|
|
/* first do a scan to get all the services */ |
|
|
|
|
/* NOTE: We attempt to seek on non-seekable files as well, as the
|
|
|
|
|
* probe buffer usually is big enough. Only warn if the seek failed |
|
|
|
|
* on files where the seek should work. */ |
|
|
|
|
if (avio_seek(pb, pos, SEEK_SET) < 0) |
|
|
|
|
av_log(s, pb->seekable ? AV_LOG_ERROR : AV_LOG_INFO, "Unable to seek back to the start\n"); |
|
|
|
|
seek_back(s, pb, pos); |
|
|
|
|
|
|
|
|
|
mpegts_open_section_filter(ts, SDT_PID, sdt_cb, ts, 1); |
|
|
|
|
|
|
|
|
|