diff options
| author | Michael Niedermayer <[email protected]> | 2014-03-29 00:16:43 +0100 | 
|---|---|---|
| committer | Michael Niedermayer <[email protected]> | 2014-03-29 00:38:51 +0100 | 
| commit | 657cee1aef724377710cef26915c09ea50bd5fcd (patch) | |
| tree | bcd054d92b9600bed9ef8110f6fe5572b1be4012 | |
| parent | 2cffdcbdd7f6e07b42a4d87f646e4e945ab99aa4 (diff) | |
avformat/img2_alias_pix: rewrite probe function
Fixes probetest failure
Signed-off-by: Michael Niedermayer <[email protected]>
| -rw-r--r-- | libavformat/img2_alias_pix.c | 30 | 
1 files changed, 22 insertions, 8 deletions
diff --git a/libavformat/img2_alias_pix.c b/libavformat/img2_alias_pix.c index 3d00f845d6..d88db216f9 100644 --- a/libavformat/img2_alias_pix.c +++ b/libavformat/img2_alias_pix.c @@ -20,23 +20,37 @@   */  #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;  }  | 
