avformat/img2_alias_pix: rewrite probe function
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 28 Mar 2014 23:16:43 +0000 (00:16 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 28 Mar 2014 23:38:51 +0000 (00:38 +0100)
Fixes probetest failure

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavformat/img2_alias_pix.c

index 3d00f84..d88db21 100644 (file)
  */
 
 #include "img2.h"
-#include "libavutil/intreadwrite.h"
+#include "libavcodec/bytestream.h"
 
 static int brender_read_probe(AVProbeData *p)
 {
-    int width  = AV_RB16(p->buf);
-    int height = AV_RB16(p->buf+2);
-    int ox     = AV_RB16(p->buf+4);
-    int oy     = AV_RB16(p->buf+6);
-    int bpp    = AV_RB16(p->buf+8);
-    int count  = p->buf[10];
+    const uint8_t *b = p->buf;
+    const uint8_t *end = b + p->buf_size;
+    int width  = bytestream_get_be16(&b);
+    int height = bytestream_get_be16(&b);
+    int ox     = bytestream_get_be16(&b);
+    int oy     = bytestream_get_be16(&b);
+    int bpp    = bytestream_get_be16(&b);
+    int x, y;
 
-    if (!count || !height || count > width)
+    if (!width || !height)
         return 0;
 
     if (bpp != 24 && bpp != 8)
         return 0;
 
+    for (y=0; y<2 && y<height; y++) {
+        for (x=0; x<width; ) {
+            int count = *b++;
+            if (count == 0 || x + count > width)
+                return 0;
+            if (b > end)
+                return AVPROBE_SCORE_MAX / 8;
+            b += bpp / 8;
+            x += count;
+        }
+    }
+
     return AVPROBE_SCORE_EXTENSION + 1;
 }