mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
avcodec/loco: Support LOCO reference encoder with odd width
Fixes Ticket1221 Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
37b35feb64
commit
d97b94f1af
@ -168,6 +168,23 @@ static int loco_decode_plane(LOCOContext *l, uint8_t *data, int width, int heigh
|
|||||||
return (get_bits_count(&rc.gb) + 7) >> 3;
|
return (get_bits_count(&rc.gb) + 7) >> 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void rotate_faulty_loco(uint8_t *data, int width, int height, int stride, int step)
|
||||||
|
{
|
||||||
|
int y;
|
||||||
|
|
||||||
|
for (y=1; y<height; y++) {
|
||||||
|
if (width>=y) {
|
||||||
|
memmove(data + y*stride,
|
||||||
|
data + y*(stride + step),
|
||||||
|
step*(width-y));
|
||||||
|
if (y+1 < height)
|
||||||
|
memmove(data + y*stride + step*(width-y),
|
||||||
|
data + (y+1)*stride,
|
||||||
|
step*y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int decode_frame(AVCodecContext *avctx,
|
static int decode_frame(AVCodecContext *avctx,
|
||||||
void *data, int *got_frame,
|
void *data, int *got_frame,
|
||||||
AVPacket *avpkt)
|
AVPacket *avpkt)
|
||||||
@ -216,6 +233,8 @@ static int decode_frame(AVCodecContext *avctx,
|
|||||||
ADVANCE_BY_DECODED;
|
ADVANCE_BY_DECODED;
|
||||||
decoded = loco_decode_plane(l, p->data[0] + p->linesize[0]*(avctx->height-1) + 2, avctx->width, avctx->height,
|
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);
|
-p->linesize[0], buf, buf_size, 3);
|
||||||
|
if (avctx->width & 1)
|
||||||
|
rotate_faulty_loco(p->data[0] + p->linesize[0]*(avctx->height-1), avctx->width, avctx->height, -p->linesize[0], 3);
|
||||||
break;
|
break;
|
||||||
case LOCO_CRGBA:
|
case LOCO_CRGBA:
|
||||||
case LOCO_RGBA:
|
case LOCO_RGBA:
|
||||||
|
Loading…
Reference in New Issue
Block a user