[FFmpeg-devel] [PATCH v2 7/7] Gif decoder code tidy.

Vitaliy E Sugrobov vsugrob at hotmail.com
Fri Nov 30 09:58:58 CET 2012


This concludes patch series related to animated gif demuxer/decoder.

Signed-off-by: Vitaliy E Sugrobov <vsugrob at hotmail.com>
---
 libavcodec/gifdec.c |   49 ++++++++++++++++++++++++++++++-------------------
 1 files changed, 30 insertions(+), 19 deletions(-)

diff --git a/libavcodec/gifdec.c b/libavcodec/gifdec.c
index f46e669..aee90c6 100755
--- a/libavcodec/gifdec.c
+++ b/libavcodec/gifdec.c
@@ -2,6 +2,7 @@
  * GIF decoder
  * Copyright (c) 2003 Fabrice Bellard
  * Copyright (c) 2006 Baptiste Coudurier
+ * Copyright (c) 2012 Vitaliy E Sugrobov
  *
  * This file is part of FFmpeg.
  *
@@ -46,7 +47,7 @@ typedef struct GifState {
     int background_color_index;
     int transparent_color_index;
     int color_resolution;
-    /* intermediate buffer for storing color indices
+    /** intermediate buffer for storing color indices
      * obtained from lzw-encoded data stream */
     uint8_t *idx_line;
 
@@ -130,24 +131,25 @@ static void gif_copy_img_rect(const uint32_t *src, uint32_t *dst,
 
 static int gif_read_image(GifState *s)
 {
-    int left, top, width, height, bits_per_pixel, code_size, flags;
-    int is_interleaved, has_local_palette, y, pass, y1, linesize, pal_size;
+    int left, top, width, height,
+        bits_per_pixel, code_size, flags,
+        is_interleaved, has_local_palette,
+        y, pass, y1, linesize, pal_size, ret;
     uint32_t *ptr, *pal, *px, *pr, *ptr1;
-    int ret;
     uint8_t *idx;
 
     /* At least 9 bytes of Image Descriptor. */
     if (s->bytestream_end < s->bytestream + 9)
         return AVERROR_INVALIDDATA;
 
-    left = bytestream_get_le16(&s->bytestream);
-    top = bytestream_get_le16(&s->bytestream);
-    width = bytestream_get_le16(&s->bytestream);
+    left   = bytestream_get_le16(&s->bytestream);
+    top    = bytestream_get_le16(&s->bytestream);
+    width  = bytestream_get_le16(&s->bytestream);
     height = bytestream_get_le16(&s->bytestream);
-    flags = bytestream_get_byte(&s->bytestream);
-    is_interleaved = flags & 0x40;
+    flags  = bytestream_get_byte(&s->bytestream);
+    is_interleaved    = flags & 0x40;
     has_local_palette = flags & 0x80;
-    bits_per_pixel = (flags & 0x07) + 1;
+    bits_per_pixel    = (flags & 0x07) + 1;
 
     av_dlog(s->avctx, "image x=%d y=%d w=%d h=%d\n", left, top, width, height);
 
@@ -234,6 +236,7 @@ static int gif_read_image(GifState *s)
     ptr = ptr1;
     pass = 0;
     y1 = 0;
+
     for (y = 0; y < height; y++) {
         if (ff_lzw_decode(s->lzw, s->idx_line, width) == 0)
             goto decode_tail;
@@ -292,7 +295,8 @@ static int gif_read_image(GifState *s)
 
 static int gif_read_extension(GifState *s)
 {
-    int ext_code, ext_len, i, gce_flags, gce_transparent_index;
+    int ext_code, ext_len, i,
+        gce_flags, gce_transparent_index;
 
     /* There must be at least 2 bytes:
      * 1 for extension label and 1 for extension length. */
@@ -318,12 +322,13 @@ static int gif_read_extension(GifState *s)
         gce_flags = bytestream_get_byte(&s->bytestream);
         bytestream_get_le16(&s->bytestream);    // delay during which the frame is shown
         gce_transparent_index = bytestream_get_byte(&s->bytestream);
+
         if (gce_flags & 0x01)
             s->transparent_color_index = gce_transparent_index;
         else
             s->transparent_color_index = -1;
-        s->gce_disposal = (gce_flags >> 2) & 0x7;
 
+        s->gce_disposal = (gce_flags >> 2) & 0x7;
         av_dlog(s->avctx, "gce_flags=%x tcolor=%d disposal=%d\n",
                gce_flags,
                s->transparent_color_index, s->gce_disposal);
@@ -350,14 +355,14 @@ static int gif_read_extension(GifState *s)
 
         av_dlog(s->avctx, "ext_len1=%d\n", ext_len);
     }
+
     return 0;
 }
 
 static int gif_read_header1(GifState *s)
 {
     uint8_t sig[6];
-    int v, n;
-    int background_color_index;
+    int v, n, background_color_index;
 
     if (s->bytestream_end < s->bytestream + 13)
         return AVERROR_INVALIDDATA;
@@ -372,8 +377,9 @@ static int gif_read_header1(GifState *s)
     s->transparent_color_index = -1;
     s->screen_width = bytestream_get_le16(&s->bytestream);
     s->screen_height = bytestream_get_le16(&s->bytestream);
-    if(   (unsigned)s->screen_width  > 32767
-       || (unsigned)s->screen_height > 32767){
+
+    if ((unsigned)s->screen_width  > 32767 ||
+        (unsigned)s->screen_height > 32767) {
         av_log(s->avctx, AV_LOG_ERROR, "picture size too large\n");
         return AVERROR_INVALIDDATA;
     }
@@ -411,6 +417,7 @@ static int gif_parse_next_image(GifState *s, int *got_picture)
 {
     int ret;
     *got_picture = sizeof(AVPicture);
+
     while (s->bytestream < s->bytestream_end) {
         int code = bytestream_get_byte(&s->bytestream);
 
@@ -432,6 +439,7 @@ static int gif_parse_next_image(GifState *s, int *got_picture)
             return AVERROR_INVALIDDATA;
         }
     }
+
     return AVERROR_EOF;
 }
 
@@ -440,12 +448,12 @@ static av_cold int gif_decode_init(AVCodecContext *avctx)
     GifState *s = avctx->priv_data;
 
     s->avctx = avctx;
-
     avctx->pix_fmt = AV_PIX_FMT_RGB32;
     avcodec_get_frame_defaults(&s->picture);
-    avctx->coded_frame= &s->picture;
+    avctx->coded_frame = &s->picture;
     s->picture.data[0] = NULL;
     ff_lzw_decode_open(&s->lzw);
+
     return 0;
 }
 
@@ -477,6 +485,7 @@ static int gif_decode_frame(AVCodecContext *avctx, void *data, int *got_picture,
 
         if ((ret = av_image_check_size(s->screen_width, s->screen_height, 0, avctx)) < 0)
             return ret;
+
         avcodec_set_dimensions(avctx, s->screen_width, s->screen_height);
 
         if (s->picture.data[0])
@@ -500,6 +509,7 @@ static int gif_decode_frame(AVCodecContext *avctx, void *data, int *got_picture,
     }
 
     ret = gif_parse_next_image(s, got_picture);
+
     if (ret < 0)
         return ret;
     else if (*got_picture)
@@ -513,7 +523,8 @@ static av_cold int gif_decode_close(AVCodecContext *avctx)
     GifState *s = avctx->priv_data;
 
     ff_lzw_decode_close(&s->lzw);
-    if(s->picture.data[0])
+
+    if (s->picture.data[0])
         avctx->release_buffer(avctx, &s->picture);
 
     av_freep(&s->idx_line);
-- 
1.7.2.5



More information about the ffmpeg-devel mailing list