Merge commit '1509c018bd5b054a2354e20021ccbac9c934d213'
* commit '1509c018bd5b054a2354e20021ccbac9c934d213': mpegts: relax restrictions on matching the packet start in read_header Conflicts: libavformat/mpegts.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
b61170f51d
@ -518,7 +518,8 @@ static void mpegts_close_filter(MpegTSContext *ts, MpegTSFilter *filter)
|
|||||||
ts->pids[pid] = NULL;
|
ts->pids[pid] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int analyze(const uint8_t *buf, int size, int packet_size, int *index)
|
static int analyze(const uint8_t *buf, int size, int packet_size, int *index,
|
||||||
|
int probe)
|
||||||
{
|
{
|
||||||
int stat[TS_MAX_PACKET_SIZE];
|
int stat[TS_MAX_PACKET_SIZE];
|
||||||
int stat_all = 0;
|
int stat_all = 0;
|
||||||
@ -528,7 +529,8 @@ static int analyze(const uint8_t *buf, int size, int packet_size, int *index)
|
|||||||
memset(stat, 0, packet_size * sizeof(*stat));
|
memset(stat, 0, packet_size * sizeof(*stat));
|
||||||
|
|
||||||
for (i = 0; i < size - 3; i++) {
|
for (i = 0; i < size - 3; i++) {
|
||||||
if (buf[i] == 0x47 && !(buf[i + 1] & 0x80) && buf[i + 3] != 0x47) {
|
if (buf[i] == 0x47 &&
|
||||||
|
(!probe || (!(buf[i + 1] & 0x80) && buf[i + 3] != 0x47))) {
|
||||||
int x = i % packet_size;
|
int x = i % packet_size;
|
||||||
stat[x]++;
|
stat[x]++;
|
||||||
stat_all++;
|
stat_all++;
|
||||||
@ -551,9 +553,9 @@ static int get_packet_size(const uint8_t *buf, int size)
|
|||||||
if (size < (TS_FEC_PACKET_SIZE * 5 + 1))
|
if (size < (TS_FEC_PACKET_SIZE * 5 + 1))
|
||||||
return AVERROR_INVALIDDATA;
|
return AVERROR_INVALIDDATA;
|
||||||
|
|
||||||
score = analyze(buf, size, TS_PACKET_SIZE, NULL);
|
score = analyze(buf, size, TS_PACKET_SIZE, NULL, 0);
|
||||||
dvhs_score = analyze(buf, size, TS_DVHS_PACKET_SIZE, NULL);
|
dvhs_score = analyze(buf, size, TS_DVHS_PACKET_SIZE, NULL, 0);
|
||||||
fec_score = analyze(buf, size, TS_FEC_PACKET_SIZE, NULL);
|
fec_score = analyze(buf, size, TS_FEC_PACKET_SIZE, NULL, 0);
|
||||||
av_dlog(NULL, "score: %d, dvhs_score: %d, fec_score: %d \n",
|
av_dlog(NULL, "score: %d, dvhs_score: %d, fec_score: %d \n",
|
||||||
score, dvhs_score, fec_score);
|
score, dvhs_score, fec_score);
|
||||||
|
|
||||||
@ -2394,9 +2396,9 @@ static int mpegts_probe(AVProbeData *p)
|
|||||||
|
|
||||||
for (i = 0; i<check_count; i+=CHECK_BLOCK) {
|
for (i = 0; i<check_count; i+=CHECK_BLOCK) {
|
||||||
int left = FFMIN(check_count - i, CHECK_BLOCK);
|
int left = FFMIN(check_count - i, CHECK_BLOCK);
|
||||||
int score = analyze(p->buf + TS_PACKET_SIZE *i, TS_PACKET_SIZE *left, TS_PACKET_SIZE , NULL);
|
int score = analyze(p->buf + TS_PACKET_SIZE *i, TS_PACKET_SIZE *left, TS_PACKET_SIZE , NULL, 1);
|
||||||
int dvhs_score = analyze(p->buf + TS_DVHS_PACKET_SIZE*i, TS_DVHS_PACKET_SIZE*left, TS_DVHS_PACKET_SIZE, NULL);
|
int dvhs_score = analyze(p->buf + TS_DVHS_PACKET_SIZE*i, TS_DVHS_PACKET_SIZE*left, TS_DVHS_PACKET_SIZE, NULL, 1);
|
||||||
int fec_score = analyze(p->buf + TS_FEC_PACKET_SIZE *i, TS_FEC_PACKET_SIZE *left, TS_FEC_PACKET_SIZE , NULL);
|
int fec_score = analyze(p->buf + TS_FEC_PACKET_SIZE *i, TS_FEC_PACKET_SIZE *left, TS_FEC_PACKET_SIZE , NULL, 1);
|
||||||
score = FFMAX3(score, dvhs_score, fec_score);
|
score = FFMAX3(score, dvhs_score, fec_score);
|
||||||
sumscore += score;
|
sumscore += score;
|
||||||
maxscore = FFMAX(maxscore, score);
|
maxscore = FFMAX(maxscore, score);
|
||||||
|
Loading…
Reference in New Issue
Block a user