]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/cinepak.c
prores: only call get_buffer once per frame
[ffmpeg] / libavcodec / cinepak.c
index d2e0c26ddcf2e6c42715c6943874f0c96bd9f810..a0ec7b89d0333ad8d8b3b6cb0bee92c65ed16797 100644 (file)
@@ -336,7 +336,8 @@ static int cinepak_decode (CinepakContext *s)
              * If the frame header is followed by the bytes FE 00 00 06 00 00 then
              * this is probably one of the two known files that have 6 extra bytes
              * after the frame header. Else, assume 2 extra bytes. */
-            if ((s->data[10] == 0xFE) &&
+            if (s->size >= 16 &&
+                (s->data[10] == 0xFE) &&
                 (s->data[11] == 0x00) &&
                 (s->data[12] == 0x00) &&
                 (s->data[13] == 0x06) &&
@@ -354,6 +355,8 @@ static int cinepak_decode (CinepakContext *s)
     if (num_strips > MAX_STRIPS)
         num_strips = MAX_STRIPS;
 
+    s->frame.key_frame = 0;
+
     for (i=0; i < num_strips; i++) {
         if ((s->data + 12) > eod)
             return -1;
@@ -364,6 +367,9 @@ static int cinepak_decode (CinepakContext *s)
         s->strips[i].y2 = y0 + AV_RB16 (&s->data[8]);
         s->strips[i].x2 = s->avctx->width;
 
+        if (s->strips[i].id == 0x10)
+            s->frame.key_frame = 1;
+
         strip_size = AV_RB24 (&s->data[1]) - 12;
         s->data   += 12;
         strip_size = ((s->data + strip_size) > eod) ? (eod - s->data) : strip_size;