[FFmpeg-cvslog] avcodec/qdrw: another try at skipping the first 512 bytes

Michael Niedermayer git at videolan.org
Thu May 14 12:44:36 CEST 2015


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Thu May 14 12:14:52 2015 +0200| [5c8e4bf7c4f4264fb317db0f771b1defabafba81] | committer: Michael Niedermayer

avcodec/qdrw: another try at skipping the first 512 bytes

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

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

 libavcodec/qdrw.c |   30 +++++++++++++++++++++++++++---
 1 file changed, 27 insertions(+), 3 deletions(-)

diff --git a/libavcodec/qdrw.c b/libavcodec/qdrw.c
index 1c3244b..3b17465 100644
--- a/libavcodec/qdrw.c
+++ b/libavcodec/qdrw.c
@@ -114,6 +114,29 @@ static int decode_rle(AVCodecContext *avctx, AVFrame *p, GetByteContext *gbc,
     return 0;
 }
 
+static int check_header(const char *buf, int buf_size)
+{
+    unsigned w, h, v0, v1;
+
+    if (buf_size < 40)
+        return 0;
+
+    w = AV_RB16(buf+6);
+    h = AV_RB16(buf+8);
+    v0 = AV_RB16(buf+10);
+    v1 = AV_RB16(buf+12);
+
+    if (!w || !h)
+        return 0;
+
+    if (v0 == 0x1101)
+        return 1;
+    if (v0 == 0x0011 && v1 == 0x02FF)
+        return 2;
+    return 0;
+}
+
+
 static int decode_frame(AVCodecContext *avctx,
                         void *data, int *got_frame,
                         AVPacket *avpkt)
@@ -124,9 +147,10 @@ static int decode_frame(AVCodecContext *avctx,
     int w, h, ret;
 
     bytestream2_init(&gbc, avpkt->data, avpkt->size);
-    while (   bytestream2_get_bytes_left(&gbc) >= 552
-           && (   !AV_RB16(&avpkt->data[bytestream2_tell(&gbc)+6])
-               || !AV_RB16(&avpkt->data[bytestream2_tell(&gbc)+8])))
+    if (   bytestream2_get_bytes_left(&gbc) >= 552
+           && !check_header(gbc.buffer      , bytestream2_get_bytes_left(&gbc))
+           &&  check_header(gbc.buffer + 512, bytestream2_get_bytes_left(&gbc) - 512)
+       )
         bytestream2_skip(&gbc, 512);
 
     /* smallest PICT header */



More information about the ffmpeg-cvslog mailing list