[FFmpeg-cvslog] Use uint8_t instead of uint16_t pointer in kega decoder.

Carl Eugen Hoyos git at videolan.org
Wed Mar 6 05:43:30 CET 2013


ffmpeg | branch: master | Carl Eugen Hoyos <cehoyos at ag.or.at> | Wed Mar  6 00:35:08 2013 +0100| [96d2e4d61a51e4d0c7cc9e78b95d49c833b0459f] | committer: Carl Eugen Hoyos

Use uint8_t instead of uint16_t pointer in kega decoder.

This change allows to remove a few casts and avoids
a potential pointer aliasing violation.

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

 libavcodec/kgv1dec.c |   13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/libavcodec/kgv1dec.c b/libavcodec/kgv1dec.c
index 6687e6b..6b81095 100644
--- a/libavcodec/kgv1dec.c
+++ b/libavcodec/kgv1dec.c
@@ -50,7 +50,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
     const uint8_t *buf_end = buf + avpkt->size;
     KgvContext * const c = avctx->priv_data;
     int offsets[8];
-    uint16_t *out, *prev;
+    uint8_t *out, *prev;
     int outcnt = 0, maxcnt;
     int w, h, i, res;
 
@@ -75,9 +75,9 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
     c->cur.reference = 3;
     if ((res = ff_get_buffer(avctx, &c->cur)) < 0)
         return res;
-    out  = (uint16_t *) c->cur.data[0];
+    out  = c->cur.data[0];
     if (c->prev.data[0]) {
-        prev = (uint16_t *) c->prev.data[0];
+        prev = c->prev.data[0];
     } else {
         prev = NULL;
     }
@@ -90,7 +90,8 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
         buf += 2;
 
         if (!(code & 0x8000)) {
-            out[outcnt++] = code; // rgb555 pixel coded directly
+            AV_WN16A(&out[2 * outcnt], code); // rgb555 pixel coded directly
+            outcnt++;
         } else {
             int count;
 
@@ -119,7 +120,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
                     break;
                 }
 
-                memcpy(out + outcnt, prev + start, 2 * count);
+                memcpy(out + 2 * outcnt, prev + 2 * start, 2 * count);
             } else {
                 // copy from earlier in this frame
                 int offset = (code & 0x1FFF) + 1;
@@ -137,7 +138,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
                 if (outcnt < offset || maxcnt - outcnt < count)
                     break;
 
-                av_memcpy_backptr((uint8_t *)out + 2 * outcnt, 2 * offset, 2 * count);
+                av_memcpy_backptr(out + 2 * outcnt, 2 * offset, 2 * count);
             }
             outcnt += count;
         }



More information about the ffmpeg-cvslog mailing list