summaryrefslogtreecommitdiffstats
path: root/libavcodec/kgv1dec.c
diff options
context:
space:
mode:
authorCarl Eugen Hoyos <cehoyos@ag.or.at>2013-03-06 00:35:08 +0100
committerCarl Eugen Hoyos <cehoyos@ag.or.at>2013-03-06 00:35:08 +0100
commit96d2e4d61a51e4d0c7cc9e78b95d49c833b0459f (patch)
tree059e9af83c3b61f8514c64134d7df5b476f7e8e0 /libavcodec/kgv1dec.c
parent940b06aeb8927ca78239007b7b19f2f160055d0c (diff)
downloadffmpeg-streaming-96d2e4d61a51e4d0c7cc9e78b95d49c833b0459f.zip
ffmpeg-streaming-96d2e4d61a51e4d0c7cc9e78b95d49c833b0459f.tar.gz
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.
Diffstat (limited to 'libavcodec/kgv1dec.c')
-rw-r--r--libavcodec/kgv1dec.c13
1 files 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;
}
OpenPOWER on IntegriCloud