Improve PVA probe function.

Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
This commit is contained in:
Reimar Döffinger 2011-10-13 19:45:49 +02:00
parent c722c88eb6
commit e91230a589
1 changed files with 15 additions and 2 deletions

View File

@ -31,13 +31,26 @@ typedef struct {
int continue_pes; int continue_pes;
} PVAContext; } PVAContext;
static int pva_check(uint8_t *p) {
int length = AV_RB16(p + 6);
if (AV_RB16(p) != PVA_MAGIC || !p[2] || p[2] > 2 || p[4] != 0x55 ||
(p[5] & 0xe0) || length > PVA_MAX_PAYLOAD_LENGTH)
return -1;
return length + 8;
}
static int pva_probe(AVProbeData * pd) { static int pva_probe(AVProbeData * pd) {
unsigned char *buf = pd->buf; unsigned char *buf = pd->buf;
int len = pva_check(buf);
if (AV_RB16(buf) == PVA_MAGIC && buf[2] && buf[2] < 3 && buf[4] == 0x55) if (len < 0)
return 0;
if (pd->buf_size >= len + 8 &&
pva_check(buf + len) >= 0)
return AVPROBE_SCORE_MAX / 2; return AVPROBE_SCORE_MAX / 2;
return 0; return AVPROBE_SCORE_MAX / 4;
} }
static int pva_read_header(AVFormatContext *s, AVFormatParameters *ap) { static int pva_read_header(AVFormatContext *s, AVFormatParameters *ap) {