Commit 40297a8b authored by Carl Eugen Hoyos's avatar Carl Eugen Hoyos

Support solid gray frames when decoding Lagarith.

Fixes bug 431.
parent e65d8509
...@@ -535,6 +535,14 @@ static int lag_decode_frame(AVCodecContext *avctx, ...@@ -535,6 +535,14 @@ static int lag_decode_frame(AVCodecContext *avctx,
switch (frametype) { switch (frametype) {
case FRAME_SOLID_RGBA: case FRAME_SOLID_RGBA:
avctx->pix_fmt = AV_PIX_FMT_RGB32; avctx->pix_fmt = AV_PIX_FMT_RGB32;
case FRAME_SOLID_GRAY:
if (frametype == FRAME_SOLID_GRAY)
if (avctx->bits_per_coded_sample == 24) {
avctx->pix_fmt = AV_PIX_FMT_RGB24;
} else {
avctx->pix_fmt = AV_PIX_FMT_0RGB32;
planes = 4;
}
if (ff_thread_get_buffer(avctx, p) < 0) { if (ff_thread_get_buffer(avctx, p) < 0) {
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
...@@ -542,11 +550,18 @@ static int lag_decode_frame(AVCodecContext *avctx, ...@@ -542,11 +550,18 @@ static int lag_decode_frame(AVCodecContext *avctx,
} }
dst = p->data[0]; dst = p->data[0];
if (frametype == FRAME_SOLID_RGBA) {
for (j = 0; j < avctx->height; j++) { for (j = 0; j < avctx->height; j++) {
for (i = 0; i < avctx->width; i++) for (i = 0; i < avctx->width; i++)
AV_WN32(dst + i * 4, offset_gu); AV_WN32(dst + i * 4, offset_gu);
dst += p->linesize[0]; dst += p->linesize[0];
} }
} else {
for (j = 0; j < avctx->height; j++) {
memset(dst, buf[1], avctx->width * planes);
dst += p->linesize[0];
}
}
break; break;
case FRAME_ARITH_RGBA: case FRAME_ARITH_RGBA:
avctx->pix_fmt = AV_PIX_FMT_RGB32; avctx->pix_fmt = AV_PIX_FMT_RGB32;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment