Commit 5c8809b4 authored by Michael Niedermayer's avatar Michael Niedermayer

avcodec/error_resilience: support grayscale

Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent 82a6e18b
...@@ -84,6 +84,8 @@ static void put_dc(ERContext *s, uint8_t *dest_y, uint8_t *dest_cb, ...@@ -84,6 +84,8 @@ static void put_dc(ERContext *s, uint8_t *dest_y, uint8_t *dest_cb,
dcv = 0; dcv = 0;
else if (dcv > 2040) else if (dcv > 2040)
dcv = 2040; dcv = 2040;
if (dest_cr)
for (y = 0; y < 8; y++) { for (y = 0; y < 8; y++) {
int x; int x;
for (x = 0; x < 8; x++) { for (x = 0; x < 8; x++) {
...@@ -1228,6 +1230,9 @@ void ff_er_frame_end(ERContext *s) ...@@ -1228,6 +1230,9 @@ void ff_er_frame_end(ERContext *s)
dc_ptr[(n & 1) + (n >> 1) * s->b8_stride] = (dc + 4) >> 3; dc_ptr[(n & 1) + (n >> 1) * s->b8_stride] = (dc + 4) >> 3;
} }
if (!s->cur_pic.f->data[2])
continue;
dcu = dcv = 0; dcu = dcv = 0;
for (y = 0; y < 8; y++) { for (y = 0; y < 8; y++) {
int x; int x;
...@@ -1268,6 +1273,8 @@ void ff_er_frame_end(ERContext *s) ...@@ -1268,6 +1273,8 @@ void ff_er_frame_end(ERContext *s)
dest_y = s->cur_pic.f->data[0] + mb_x * 16 + mb_y * 16 * linesize[0]; dest_y = s->cur_pic.f->data[0] + mb_x * 16 + mb_y * 16 * linesize[0];
dest_cb = s->cur_pic.f->data[1] + mb_x * 8 + mb_y * 8 * linesize[1]; dest_cb = s->cur_pic.f->data[1] + mb_x * 8 + mb_y * 8 * linesize[1];
dest_cr = s->cur_pic.f->data[2] + mb_x * 8 + mb_y * 8 * linesize[2]; dest_cr = s->cur_pic.f->data[2] + mb_x * 8 + mb_y * 8 * linesize[2];
if (!s->cur_pic.f->data[2])
dest_cb = dest_cr = NULL;
put_dc(s, dest_y, dest_cb, dest_cr, mb_x, mb_y); put_dc(s, dest_y, dest_cb, dest_cr, mb_x, mb_y);
} }
...@@ -1278,19 +1285,22 @@ void ff_er_frame_end(ERContext *s) ...@@ -1278,19 +1285,22 @@ void ff_er_frame_end(ERContext *s)
/* filter horizontal block boundaries */ /* filter horizontal block boundaries */
h_block_filter(s, s->cur_pic.f->data[0], s->mb_width * 2, h_block_filter(s, s->cur_pic.f->data[0], s->mb_width * 2,
s->mb_height * 2, linesize[0], 1); s->mb_height * 2, linesize[0], 1);
h_block_filter(s, s->cur_pic.f->data[1], s->mb_width,
s->mb_height, linesize[1], 0);
h_block_filter(s, s->cur_pic.f->data[2], s->mb_width,
s->mb_height, linesize[2], 0);
/* filter vertical block boundaries */ /* filter vertical block boundaries */
v_block_filter(s, s->cur_pic.f->data[0], s->mb_width * 2, v_block_filter(s, s->cur_pic.f->data[0], s->mb_width * 2,
s->mb_height * 2, linesize[0], 1); s->mb_height * 2, linesize[0], 1);
if (s->cur_pic.f->data[2]) {
h_block_filter(s, s->cur_pic.f->data[1], s->mb_width,
s->mb_height, linesize[1], 0);
h_block_filter(s, s->cur_pic.f->data[2], s->mb_width,
s->mb_height, linesize[2], 0);
v_block_filter(s, s->cur_pic.f->data[1], s->mb_width, v_block_filter(s, s->cur_pic.f->data[1], s->mb_width,
s->mb_height, linesize[1], 0); s->mb_height, linesize[1], 0);
v_block_filter(s, s->cur_pic.f->data[2], s->mb_width, v_block_filter(s, s->cur_pic.f->data[2], s->mb_width,
s->mb_height, linesize[2], 0); s->mb_height, linesize[2], 0);
} }
}
ec_clean: ec_clean:
/* clean a few tables */ /* clean a few tables */
......
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