avcodec/loco: switch to planar rgb format

Remove now unused step variable.
This commit is contained in:
Paul B Mahol 2018-09-10 11:18:59 +02:00
parent 90ba17652a
commit df05fd3131
2 changed files with 39 additions and 40 deletions

View File

@ -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[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), avctx->width, avctx->height,
-p->linesize[0], buf, buf_size, 3);
-p->linesize[0], 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);
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[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), avctx->width, avctx->height,
-p->linesize[0], buf, buf_size, 4);
-p->linesize[0], 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[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) + 2, avctx->width, avctx->height,
-p->linesize[0], buf, buf_size, 4);
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);

View File

@ -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