[FFmpeg-cvslog] Improve PVA probe function.

Reimar Döffinger git at videolan.org
Thu Oct 13 20:10:52 CEST 2011


ffmpeg | branch: master | Reimar Döffinger <Reimar.Doeffinger at gmx.de> | Thu Oct 13 19:45:49 2011 +0200| [e91230a589fbf84ac57e7e878e05926bdb5b1ff6] | committer: Reimar Döffinger

Improve PVA probe function.

Signed-off-by: Reimar Döffinger <Reimar.Doeffinger at gmx.de>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e91230a589fbf84ac57e7e878e05926bdb5b1ff6
---

 libavformat/pva.c |   17 +++++++++++++++--
 1 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/libavformat/pva.c b/libavformat/pva.c
index fda5fc3..1aad6db 100644
--- a/libavformat/pva.c
+++ b/libavformat/pva.c
@@ -31,13 +31,26 @@ typedef struct {
     int continue_pes;
 } 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) {
     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 0;
+    return AVPROBE_SCORE_MAX / 4;
 }
 
 static int pva_read_header(AVFormatContext *s, AVFormatParameters *ap) {



More information about the ffmpeg-cvslog mailing list