From ec8502f9cb96a83704c45e94d11f2434253f9231 Mon Sep 17 00:00:00 2001 From: Paul B Mahol Date: Thu, 13 Dec 2018 19:15:45 +0100 Subject: avcodec/gif: use avctx->frame_number --- libavcodec/gif.c | 13 +++---------- tests/ref/fate/gifenc-bgr4_byte | 2 +- tests/ref/fate/gifenc-bgr8 | 2 +- tests/ref/fate/gifenc-gray | 2 +- tests/ref/fate/gifenc-pal8 | 2 +- tests/ref/fate/gifenc-rgb4_byte | 2 +- tests/ref/fate/gifenc-rgb8 | 2 +- 7 files changed, 9 insertions(+), 16 deletions(-) diff --git a/libavcodec/gif.c b/libavcodec/gif.c index 67fc5a1..9f2f30d 100644 --- a/libavcodec/gif.c +++ b/libavcodec/gif.c @@ -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; diff --git a/tests/ref/fate/gifenc-bgr4_byte b/tests/ref/fate/gifenc-bgr4_byte index 49856ab..2cf3b7f 100644 --- a/tests/ref/fate/gifenc-bgr4_byte +++ b/tests/ref/fate/gifenc-bgr4_byte @@ -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 diff --git a/tests/ref/fate/gifenc-bgr8 b/tests/ref/fate/gifenc-bgr8 index df1aa10..58767a6 100644 --- a/tests/ref/fate/gifenc-bgr8 +++ b/tests/ref/fate/gifenc-bgr8 @@ -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 diff --git a/tests/ref/fate/gifenc-gray b/tests/ref/fate/gifenc-gray index 8826363..324aff4 100644 --- a/tests/ref/fate/gifenc-gray +++ b/tests/ref/fate/gifenc-gray @@ -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 diff --git a/tests/ref/fate/gifenc-pal8 b/tests/ref/fate/gifenc-pal8 index c4b47b2..3ed3935 100644 --- a/tests/ref/fate/gifenc-pal8 +++ b/tests/ref/fate/gifenc-pal8 @@ -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 diff --git a/tests/ref/fate/gifenc-rgb4_byte b/tests/ref/fate/gifenc-rgb4_byte index 5dd9915..c99c983 100644 --- a/tests/ref/fate/gifenc-rgb4_byte +++ b/tests/ref/fate/gifenc-rgb4_byte @@ -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 diff --git a/tests/ref/fate/gifenc-rgb8 b/tests/ref/fate/gifenc-rgb8 index b299dfb..c5ff394 100644 --- a/tests/ref/fate/gifenc-rgb8 +++ b/tests/ref/fate/gifenc-rgb8 @@ -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 -- cgit v1.1