[FFmpeg-cvslog] avcodec/loco: switch to planar rgb format
Paul B Mahol
git at videolan.org
Mon Sep 10 22:35:23 EEST 2018
ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Mon Sep 10 11:18:59 2018 +0200| [df05fd3131fd94d01ebeaa58b4c60510961b8be2] | committer: Paul B Mahol
avcodec/loco: switch to planar rgb format
Remove now unused step variable.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=df05fd3131fd94d01ebeaa58b4c60510961b8be2
---
libavcodec/loco.c | 69 ++++++++++++++++++++++++-------------------------
tests/ref/fate/loco-rgb | 10 +++----
2 files changed, 39 insertions(+), 40 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);
diff --git a/tests/ref/fate/loco-rgb b/tests/ref/fate/loco-rgb
index 289e73f7ed..446f5d83cb 100644
--- a/tests/ref/fate/loco-rgb
+++ b/tests/ref/fate/loco-rgb
@@ -3,8 +3,8 @@
#codec_id 0: rawvideo
#dimensions 0: 188x128
#sar 0: 0/1
-0, 0, 0, 1, 72192, 0x1847500c
-0, 1, 1, 1, 72192, 0x1b0e2e87
-0, 2, 2, 1, 72192, 0x293276c8
-0, 3, 3, 1, 72192, 0x743b9705
-0, 4, 4, 1, 72192, 0xcc1b2530
+0, 0, 0, 1, 72192, 0xbe9f500c
+0, 1, 1, 1, 72192, 0xafc82e87
+0, 2, 2, 1, 72192, 0x3a2476c8
+0, 3, 3, 1, 72192, 0x1fda9705
+0, 4, 4, 1, 72192, 0x46b82530
More information about the ffmpeg-cvslog
mailing list