diff options
author | Paul B Mahol <onemda@gmail.com> | 2018-09-10 11:18:59 +0200 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2018-09-10 15:16:07 +0200 |
commit | df05fd3131fd94d01ebeaa58b4c60510961b8be2 (patch) | |
tree | 6537a6154c7e6912d0d814dfcf3defa4a23a0036 /libavcodec/loco.c | |
parent | 90ba17652aa1f5773bb121c2ec6a092acf66a5e1 (diff) | |
download | ffmpeg-df05fd3131fd94d01ebeaa58b4c60510961b8be2.tar.gz |
avcodec/loco: switch to planar rgb format
Remove now unused step variable.
Diffstat (limited to 'libavcodec/loco.c')
-rw-r--r-- | libavcodec/loco.c | 69 |
1 files changed, 34 insertions, 35 deletions
diff --git a/libavcodec/loco.c b/libavcodec/loco.c index 9d0f144451..f91d8709b0 100644 --- a/libavcodec/loco.c +++ b/libavcodec/loco.c @@ -114,19 +114,19 @@ static inline int loco_get_rice(RICEContext *r) } /* LOCO main predictor - LOCO-I/JPEG-LS predictor */ -static inline int loco_predict(uint8_t* data, int stride, int step) +static inline int loco_predict(uint8_t* data, int stride) { int a, b, c; a = data[-stride]; - b = data[-step]; - c = data[-stride - step]; + b = data[-1]; + c = data[-stride - 1]; return mid_pred(a, a + b - c, b); } static int loco_decode_plane(LOCOContext *l, uint8_t *data, int width, int height, - int stride, const uint8_t *buf, int buf_size, int step) + int stride, const uint8_t *buf, int buf_size) { RICEContext rc; int val; @@ -153,7 +153,7 @@ static int loco_decode_plane(LOCOContext *l, uint8_t *data, int width, int heigh /* restore top line */ for (i = 1; i < width; i++) { val = loco_get_rice(&rc); - data[i * step] = data[i * step - step] + val; + data[i] = data[i - 1] + val; } data += stride; for (j = 1; j < height; j++) { @@ -163,7 +163,7 @@ static int loco_decode_plane(LOCOContext *l, uint8_t *data, int width, int heigh /* restore all other pixels */ for (i = 1; i < width; i++) { val = loco_get_rice(&rc); - data[i * step] = loco_predict(&data[i * step], stride, step) + val; + data[i] = loco_predict(&data[i], stride) + val; } data += stride; } @@ -171,19 +171,18 @@ static int loco_decode_plane(LOCOContext *l, uint8_t *data, int width, int heigh return (get_bits_count(&rc.gb) + 7) >> 3; } -static void rotate_faulty_loco(uint8_t *data, int width, int height, int stride, int step) +static void rotate_faulty_loco(uint8_t *data, int width, int height, int stride) { int y; for (y=1; y<height; y++) { if (width>=y) { memmove(data + y*stride, - data + y*(stride + step), - step*(width-y)); + data + y*(stride + 1), + (width-y)); if (y+1 < height) - memmove(data + y*stride + step*(width-y), - data + (y+1)*stride, - step*y); + memmove(data + y*stride + (width-y), + data + (y+1)*stride, y); } } } @@ -209,49 +208,49 @@ static int decode_frame(AVCodecContext *avctx, switch(l->mode) { case LOCO_CYUY2: case LOCO_YUY2: case LOCO_UYVY: decoded = loco_decode_plane(l, p->data[0], avctx->width, avctx->height, - p->linesize[0], buf, buf_size, 1); + p->linesize[0], buf, buf_size); ADVANCE_BY_DECODED; decoded = loco_decode_plane(l, p->data[1], avctx->width / 2, avctx->height, - p->linesize[1], buf, buf_size, 1); + p->linesize[1], buf, buf_size); ADVANCE_BY_DECODED; decoded = loco_decode_plane(l, p->data[2], avctx->width / 2, avctx->height, - p->linesize[2], buf, buf_size, 1); + p->linesize[2], buf, buf_size); break; case LOCO_CYV12: case LOCO_YV12: decoded = loco_decode_plane(l, p->data[0], avctx->width, avctx->height, - p->linesize[0], buf, buf_size, 1); + p->linesize[0], buf, buf_size); ADVANCE_BY_DECODED; decoded = loco_decode_plane(l, p->data[2], avctx->width / 2, avctx->height / 2, - p->linesize[2], buf, buf_size, 1); + p->linesize[2], buf, buf_size); ADVANCE_BY_DECODED; decoded = loco_decode_plane(l, p->data[1], avctx->width / 2, avctx->height / 2, - p->linesize[1], buf, buf_size, 1); + p->linesize[1], buf, buf_size); break; case LOCO_CRGB: case LOCO_RGB: - decoded = loco_decode_plane(l, p->data[0] + p->linesize[0]*(avctx->height-1), avctx->width, avctx->height, - -p->linesize[0], buf, buf_size, 3); + decoded = loco_decode_plane(l, p->data[1] + p->linesize[1]*(avctx->height-1), avctx->width, avctx->height, + -p->linesize[1], buf, buf_size); ADVANCE_BY_DECODED; - decoded = loco_decode_plane(l, p->data[0] + p->linesize[0]*(avctx->height-1) + 1, avctx->width, avctx->height, - -p->linesize[0], buf, buf_size, 3); + decoded = loco_decode_plane(l, p->data[0] + p->linesize[0]*(avctx->height-1), avctx->width, avctx->height, + -p->linesize[0], buf, buf_size); ADVANCE_BY_DECODED; - decoded = loco_decode_plane(l, p->data[0] + p->linesize[0]*(avctx->height-1) + 2, avctx->width, avctx->height, - -p->linesize[0], buf, buf_size, 3); + decoded = loco_decode_plane(l, p->data[2] + p->linesize[2]*(avctx->height-1), avctx->width, avctx->height, + -p->linesize[2], buf, buf_size); if (avctx->width & 1) - rotate_faulty_loco(p->data[0] + p->linesize[0]*(avctx->height-1), avctx->width, avctx->height, -p->linesize[0], 3); + rotate_faulty_loco(p->data[1] + p->linesize[1]*(avctx->height-1), avctx->width, avctx->height, -p->linesize[1]); break; case LOCO_CRGBA: case LOCO_RGBA: - decoded = loco_decode_plane(l, p->data[0] + p->linesize[0]*(avctx->height-1), avctx->width, avctx->height, - -p->linesize[0], buf, buf_size, 4); + decoded = loco_decode_plane(l, p->data[1] + p->linesize[1]*(avctx->height-1), avctx->width, avctx->height, + -p->linesize[1], buf, buf_size); ADVANCE_BY_DECODED; - decoded = loco_decode_plane(l, p->data[0] + p->linesize[0]*(avctx->height-1) + 1, avctx->width, avctx->height, - -p->linesize[0], buf, buf_size, 4); + decoded = loco_decode_plane(l, p->data[0] + p->linesize[0]*(avctx->height-1), avctx->width, avctx->height, + -p->linesize[0], buf, buf_size); ADVANCE_BY_DECODED; - decoded = loco_decode_plane(l, p->data[0] + p->linesize[0]*(avctx->height-1) + 2, avctx->width, avctx->height, - -p->linesize[0], buf, buf_size, 4); + decoded = loco_decode_plane(l, p->data[2] + p->linesize[2]*(avctx->height-1), avctx->width, avctx->height, + -p->linesize[2], buf, buf_size); ADVANCE_BY_DECODED; - decoded = loco_decode_plane(l, p->data[0] + p->linesize[0]*(avctx->height-1) + 3, avctx->width, avctx->height, - -p->linesize[0], buf, buf_size, 4); + decoded = loco_decode_plane(l, p->data[3] + p->linesize[3]*(avctx->height-1), avctx->width, avctx->height, + -p->linesize[3], buf, buf_size); break; default: av_assert0(0); @@ -302,7 +301,7 @@ static av_cold int decode_init(AVCodecContext *avctx) break; case LOCO_CRGB: case LOCO_RGB: - avctx->pix_fmt = AV_PIX_FMT_BGR24; + avctx->pix_fmt = AV_PIX_FMT_GBRP; break; case LOCO_CYV12: case LOCO_YV12: @@ -310,7 +309,7 @@ static av_cold int decode_init(AVCodecContext *avctx) break; case LOCO_CRGBA: case LOCO_RGBA: - avctx->pix_fmt = AV_PIX_FMT_BGRA; + avctx->pix_fmt = AV_PIX_FMT_GBRAP; break; default: av_log(avctx, AV_LOG_INFO, "Unknown colorspace, index = %i\n", l->mode); |