avcodec/gif: use avctx->frame_number
authorPaul B Mahol <onemda@gmail.com>
Thu, 13 Dec 2018 18:15:45 +0000 (19:15 +0100)
committerPaul B Mahol <onemda@gmail.com>
Thu, 13 Dec 2018 18:30:39 +0000 (19:30 +0100)
libavcodec/gif.c
tests/ref/fate/gifenc-bgr4_byte
tests/ref/fate/gifenc-bgr8
tests/ref/fate/gifenc-gray
tests/ref/fate/gifenc-pal8
tests/ref/fate/gifenc-rgb4_byte
tests/ref/fate/gifenc-rgb8

index 67fc5a1..9f2f30d 100644 (file)
@@ -48,7 +48,6 @@ typedef struct GIFContext {
     LZWState *lzw;
     uint8_t *buf;
     int buf_size;
-    int is_first_frame;
     AVFrame *last_frame;
     int flags;
     int image;
@@ -268,7 +267,7 @@ static int gif_image_write_image(AVCodecContext *avctx,
     int bcid = -1, honor_transparency = (s->flags & GF_TRANSDIFF) && s->last_frame && !palette;
     const uint8_t *ptr;
 
-    if (!s->is_first_frame && is_image_translucent(avctx, buf, linesize)) {
+    if (!s->image && avctx->frame_number && is_image_translucent(avctx, buf, linesize)) {
         gif_crop_translucent(avctx, buf, linesize, &width, &height, &x_start, &y_start);
         honor_transparency = 0;
         disposal = GCE_DISPOSAL_BACKGROUND;
@@ -277,7 +276,7 @@ static int gif_image_write_image(AVCodecContext *avctx,
         disposal = GCE_DISPOSAL_INPLACE;
     }
 
-    if (s->is_first_frame) { /* GIF header */
+    if (s->image || !avctx->frame_number) { /* GIF header */
         const uint32_t *global_palette = palette ? palette : s->palette;
         const AVRational sar = avctx->sample_aspect_ratio;
         int64_t aspect = 0;
@@ -301,8 +300,6 @@ static int gif_image_write_image(AVCodecContext *avctx,
             const uint32_t v = global_palette[i] & 0xffffff;
             bytestream_put_be24(bytestream, v);
         }
-
-        s->is_first_frame = 0;
     }
 
     if (honor_transparency && trans < 0) {
@@ -395,7 +392,6 @@ static av_cold int gif_encode_init(AVCodecContext *avctx)
     }
 
     s->transparent_index = -1;
-    s->is_first_frame = 1;
 
     s->lzw = av_mallocz(ff_lzw_encode_state_size);
     s->buf_size = avctx->width*avctx->height*2 + 1000;
@@ -423,9 +419,6 @@ static int gif_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
     outbuf_ptr = pkt->data;
     end        = pkt->data + pkt->size;
 
-    if (s->image)
-        s->is_first_frame = 1;
-
     if (avctx->pix_fmt == AV_PIX_FMT_PAL8) {
         palette = (uint32_t*)pict->data[1];
 
@@ -454,7 +447,7 @@ static int gif_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
     }
 
     pkt->size   = outbuf_ptr - pkt->data;
-    if (s->is_first_frame)
+    if (s->image || !avctx->frame_number)
         pkt->flags |= AV_PKT_FLAG_KEY;
     *got_packet = 1;
 
index 49856ab..2cf3b7f 100644 (file)
@@ -3,7 +3,7 @@
 #codec_id 0: gif
 #dimensions 0: 217x217
 #sar 0: 0/1
-0,          0,          0,        1,     1297, 0x53e8b1c1, F=0x0
+0,          0,          0,        1,     1297, 0x53e8b1c1
 0,          1,          1,        1,      221, 0x52d24d05, F=0x0
 0,          2,          2,        1,      139, 0xc9e32ab4, F=0x0
 0,          3,          3,        1,      392, 0x9244a858, F=0x0
index df1aa10..58767a6 100644 (file)
@@ -3,7 +3,7 @@
 #codec_id 0: gif
 #dimensions 0: 217x217
 #sar 0: 0/1
-0,          0,          0,        1,     1341, 0xe4e2af18, F=0x0
+0,          0,          0,        1,     1341, 0xe4e2af18
 0,          1,          1,        1,      305, 0xefa98bbd, F=0x0
 0,          2,          2,        1,      446, 0x9499cf43, F=0x0
 0,          3,          3,        1,      458, 0x8cb7d0d5, F=0x0
index 8826363..324aff4 100644 (file)
@@ -3,7 +3,7 @@
 #codec_id 0: gif
 #dimensions 0: 217x217
 #sar 0: 0/1
-0,          0,          0,        1,     1368, 0x6cf0befd, F=0x0
+0,          0,          0,        1,     1368, 0x6cf0befd
 0,          1,          1,        1,      158, 0xcd173bb4, F=0x0
 0,          2,          2,        1,      163, 0x4f7a451d, F=0x0
 0,          3,          3,        1,      152, 0x17723839, F=0x0
index c4b47b2..3ed3935 100644 (file)
@@ -3,7 +3,7 @@
 #codec_id 0: gif
 #dimensions 0: 217x217
 #sar 0: 0/1
-0,          0,          0,        1,     2109, 0x39642b3d, F=0x0
+0,          0,          0,        1,     2109, 0x39642b3d
 0,          1,          1,        1,      305, 0xefa98bbd, F=0x0
 0,          2,          2,        1,      446, 0x9499cf43, F=0x0
 0,          3,          3,        1,      458, 0x8cb7d0d5, F=0x0
index 5dd9915..c99c983 100644 (file)
@@ -3,7 +3,7 @@
 #codec_id 0: gif
 #dimensions 0: 217x217
 #sar 0: 0/1
-0,          0,          0,        1,     1297, 0x5618fe71, F=0x0
+0,          0,          0,        1,     1297, 0x5618fe71
 0,          1,          1,        1,      221, 0x230c4e66, F=0x0
 0,          2,          2,        1,      139, 0xf87a2b65, F=0x0
 0,          3,          3,        1,      392, 0x7794a5e6, F=0x0
index b299dfb..c5ff394 100644 (file)
@@ -3,7 +3,7 @@
 #codec_id 0: gif
 #dimensions 0: 217x217
 #sar 0: 0/1
-0,          0,          0,        1,     1341, 0xaa85adb1, F=0x0
+0,          0,          0,        1,     1341, 0xaa85adb1
 0,          1,          1,        1,      305, 0xa970896f, F=0x0
 0,          2,          2,        1,      446, 0x4a20d47a, F=0x0
 0,          3,          3,        1,      458, 0x32ded2af, F=0x0