|
|
|
@@ -40,6 +40,7 @@ void ff_vc1_loop_filter_iblk(VC1Context *v, int pq) |
|
|
|
if (s->mb_x) |
|
|
|
v->vc1dsp.vc1_h_loop_filter16(s->dest[0] - 16 * s->linesize, s->linesize, pq); |
|
|
|
v->vc1dsp.vc1_h_loop_filter16(s->dest[0] - 16 * s->linesize + 8, s->linesize, pq); |
|
|
|
if (!CONFIG_GRAY || !(s->flags & CODEC_FLAG_GRAY)) |
|
|
|
for (j = 0; j < 2; j++) { |
|
|
|
v->vc1dsp.vc1_v_loop_filter8(s->dest[j + 1], s->uvlinesize, pq); |
|
|
|
if (s->mb_x) |
|
|
|
@@ -51,8 +52,10 @@ void ff_vc1_loop_filter_iblk(VC1Context *v, int pq) |
|
|
|
if (s->mb_y == s->end_mb_y - 1) { |
|
|
|
if (s->mb_x) { |
|
|
|
v->vc1dsp.vc1_h_loop_filter16(s->dest[0], s->linesize, pq); |
|
|
|
if (!CONFIG_GRAY || !(s->flags & CODEC_FLAG_GRAY)) { |
|
|
|
v->vc1dsp.vc1_h_loop_filter8(s->dest[1], s->uvlinesize, pq); |
|
|
|
v->vc1dsp.vc1_h_loop_filter8(s->dest[2], s->uvlinesize, pq); |
|
|
|
} |
|
|
|
} |
|
|
|
v->vc1dsp.vc1_h_loop_filter16(s->dest[0] + 8, s->linesize, pq); |
|
|
|
} |
|
|
|
@@ -73,6 +76,7 @@ void ff_vc1_loop_filter_iblk_delayed(VC1Context *v, int pq) |
|
|
|
if (s->mb_x >= 2) |
|
|
|
v->vc1dsp.vc1_h_loop_filter16(s->dest[0] - 32 * s->linesize - 16, s->linesize, pq); |
|
|
|
v->vc1dsp.vc1_h_loop_filter16(s->dest[0] - 32 * s->linesize - 8, s->linesize, pq); |
|
|
|
if (!CONFIG_GRAY || !(s->flags & CODEC_FLAG_GRAY)) |
|
|
|
for (j = 0; j < 2; j++) { |
|
|
|
v->vc1dsp.vc1_v_loop_filter8(s->dest[j + 1] - 8 * s->uvlinesize - 8, s->uvlinesize, pq); |
|
|
|
if (s->mb_x >= 2) { |
|
|
|
@@ -90,6 +94,7 @@ void ff_vc1_loop_filter_iblk_delayed(VC1Context *v, int pq) |
|
|
|
if (s->mb_x) |
|
|
|
v->vc1dsp.vc1_h_loop_filter16(s->dest[0] - 32 * s->linesize, s->linesize, pq); |
|
|
|
v->vc1dsp.vc1_h_loop_filter16(s->dest[0] - 32 * s->linesize + 8, s->linesize, pq); |
|
|
|
if (!CONFIG_GRAY || !(s->flags & CODEC_FLAG_GRAY)) |
|
|
|
for (j = 0; j < 2; j++) { |
|
|
|
v->vc1dsp.vc1_v_loop_filter8(s->dest[j + 1] - 8 * s->uvlinesize, s->uvlinesize, pq); |
|
|
|
if (s->mb_x >= 2) { |
|
|
|
@@ -105,7 +110,7 @@ void ff_vc1_loop_filter_iblk_delayed(VC1Context *v, int pq) |
|
|
|
if (s->mb_x >= 2) |
|
|
|
v->vc1dsp.vc1_h_loop_filter16(s->dest[0] - 16 * s->linesize - 16, s->linesize, pq); |
|
|
|
v->vc1dsp.vc1_h_loop_filter16(s->dest[0] - 16 * s->linesize - 8, s->linesize, pq); |
|
|
|
if (s->mb_x >= 2) { |
|
|
|
if (s->mb_x >= 2 && !(s->flags & CODEC_FLAG_GRAY)) { |
|
|
|
for (j = 0; j < 2; j++) { |
|
|
|
v->vc1dsp.vc1_h_loop_filter8(s->dest[j + 1] - 8 * s->uvlinesize - 8, s->uvlinesize, pq); |
|
|
|
} |
|
|
|
@@ -116,7 +121,7 @@ void ff_vc1_loop_filter_iblk_delayed(VC1Context *v, int pq) |
|
|
|
if (s->mb_x) |
|
|
|
v->vc1dsp.vc1_h_loop_filter16(s->dest[0] - 16 * s->linesize, s->linesize, pq); |
|
|
|
v->vc1dsp.vc1_h_loop_filter16(s->dest[0] - 16 * s->linesize + 8, s->linesize, pq); |
|
|
|
if (s->mb_x) { |
|
|
|
if (s->mb_x && !(s->flags & CODEC_FLAG_GRAY)) { |
|
|
|
for (j = 0; j < 2; j++) { |
|
|
|
v->vc1dsp.vc1_h_loop_filter8(s->dest[j + 1] - 8 * s->uvlinesize, s->uvlinesize, pq); |
|
|
|
} |
|
|
|
@@ -150,7 +155,7 @@ void ff_vc1_smooth_overlap_filter_iblk(VC1Context *v) |
|
|
|
v->block[v->cur_blk_idx][0]); |
|
|
|
v->vc1dsp.vc1_h_s_overlap(v->block[v->left_blk_idx][3], |
|
|
|
v->block[v->cur_blk_idx][2]); |
|
|
|
if (!(s->flags & CODEC_FLAG_GRAY)) { |
|
|
|
if (!CONFIG_GRAY || !(s->flags & CODEC_FLAG_GRAY)) { |
|
|
|
v->vc1dsp.vc1_h_s_overlap(v->block[v->left_blk_idx][4], |
|
|
|
v->block[v->cur_blk_idx][4]); |
|
|
|
v->vc1dsp.vc1_h_s_overlap(v->block[v->left_blk_idx][5], |
|
|
|
@@ -169,7 +174,7 @@ void ff_vc1_smooth_overlap_filter_iblk(VC1Context *v) |
|
|
|
v->block[v->cur_blk_idx][0]); |
|
|
|
v->vc1dsp.vc1_v_s_overlap(v->block[v->top_blk_idx][3], |
|
|
|
v->block[v->cur_blk_idx][1]); |
|
|
|
if (!(s->flags & CODEC_FLAG_GRAY)) { |
|
|
|
if (!CONFIG_GRAY || !(s->flags & CODEC_FLAG_GRAY)) { |
|
|
|
v->vc1dsp.vc1_v_s_overlap(v->block[v->top_blk_idx][4], |
|
|
|
v->block[v->cur_blk_idx][4]); |
|
|
|
v->vc1dsp.vc1_v_s_overlap(v->block[v->top_blk_idx][5], |
|
|
|
@@ -189,7 +194,7 @@ void ff_vc1_smooth_overlap_filter_iblk(VC1Context *v) |
|
|
|
v->block[v->left_blk_idx][0]); |
|
|
|
v->vc1dsp.vc1_v_s_overlap(v->block[v->topleft_blk_idx][3], |
|
|
|
v->block[v->left_blk_idx][1]); |
|
|
|
if (!(s->flags & CODEC_FLAG_GRAY)) { |
|
|
|
if (!CONFIG_GRAY || !(s->flags & CODEC_FLAG_GRAY)) { |
|
|
|
v->vc1dsp.vc1_v_s_overlap(v->block[v->topleft_blk_idx][4], |
|
|
|
v->block[v->left_blk_idx][4]); |
|
|
|
v->vc1dsp.vc1_v_s_overlap(v->block[v->topleft_blk_idx][5], |
|
|
|
@@ -331,21 +336,22 @@ void ff_vc1_apply_p_loop_filter(VC1Context *v) |
|
|
|
{ |
|
|
|
MpegEncContext *s = &v->s; |
|
|
|
int i; |
|
|
|
int block_count = CONFIG_GRAY && (s->flags & CODEC_FLAG_GRAY) ? 4 : 6; |
|
|
|
|
|
|
|
for (i = 0; i < 6; i++) { |
|
|
|
for (i = 0; i < block_count; i++) { |
|
|
|
vc1_apply_p_v_loop_filter(v, i); |
|
|
|
} |
|
|
|
|
|
|
|
/* V always precedes H, therefore we run H one MB before V; |
|
|
|
* at the end of a row, we catch up to complete the row */ |
|
|
|
if (s->mb_x) { |
|
|
|
for (i = 0; i < 6; i++) { |
|
|
|
for (i = 0; i < block_count; i++) { |
|
|
|
vc1_apply_p_h_loop_filter(v, i); |
|
|
|
} |
|
|
|
if (s->mb_x == s->mb_width - 1) { |
|
|
|
s->mb_x++; |
|
|
|
ff_update_block_index(s); |
|
|
|
for (i = 0; i < 6; i++) { |
|
|
|
for (i = 0; i < block_count; i++) { |
|
|
|
vc1_apply_p_h_loop_filter(v, i); |
|
|
|
} |
|
|
|
} |
|
|
|
|