mirror of https://git.ffmpeg.org/ffmpeg.git
avcodec/loco: switch to planar rgb format
Remove now unused step variable.
This commit is contained in:
parent
90ba17652a
commit
df05fd3131
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue