|
|
|
@@ -377,14 +377,19 @@ static void guess_mv(ERContext *s) |
|
|
|
#define MV_UNCHANGED 1 |
|
|
|
const int mb_stride = s->mb_stride; |
|
|
|
const int mb_width = s->mb_width; |
|
|
|
const int mb_height = s->mb_height; |
|
|
|
int mb_height = s->mb_height; |
|
|
|
int i, depth, num_avail; |
|
|
|
int mb_x, mb_y, mot_step, mot_stride; |
|
|
|
|
|
|
|
if (s->last_pic.f && s->last_pic.f->data[0]) |
|
|
|
mb_height = FFMIN(mb_height, (s->last_pic.f->height+15)>>4); |
|
|
|
if (s->next_pic.f && s->next_pic.f->data[0]) |
|
|
|
mb_height = FFMIN(mb_height, (s->next_pic.f->height+15)>>4); |
|
|
|
|
|
|
|
set_mv_strides(s, &mot_step, &mot_stride); |
|
|
|
|
|
|
|
num_avail = 0; |
|
|
|
for (i = 0; i < s->mb_num; i++) { |
|
|
|
for (i = 0; i < mb_width * mb_height; i++) { |
|
|
|
const int mb_xy = s->mb_index2xy[i]; |
|
|
|
int f = 0; |
|
|
|
int error = s->error_status_table[mb_xy]; |
|
|
|
@@ -409,7 +414,7 @@ static void guess_mv(ERContext *s) |
|
|
|
|
|
|
|
if ((!(s->avctx->error_concealment&FF_EC_GUESS_MVS)) || |
|
|
|
num_avail <= mb_width / 2) { |
|
|
|
for (mb_y = 0; mb_y < s->mb_height; mb_y++) { |
|
|
|
for (mb_y = 0; mb_y < mb_height; mb_y++) { |
|
|
|
for (mb_x = 0; mb_x < s->mb_width; mb_x++) { |
|
|
|
const int mb_xy = mb_x + mb_y * s->mb_stride; |
|
|
|
int mv_dir = (s->last_pic.f && s->last_pic.f->data[0]) ? MV_DIR_FORWARD : MV_DIR_BACKWARD; |
|
|
|
@@ -438,7 +443,7 @@ static void guess_mv(ERContext *s) |
|
|
|
int score_sum = 0; |
|
|
|
|
|
|
|
changed = 0; |
|
|
|
for (mb_y = 0; mb_y < s->mb_height; mb_y++) { |
|
|
|
for (mb_y = 0; mb_y < mb_height; mb_y++) { |
|
|
|
for (mb_x = 0; mb_x < s->mb_width; mb_x++) { |
|
|
|
const int mb_xy = mb_x + mb_y * s->mb_stride; |
|
|
|
int mv_predictor[8][2] = { { 0 } }; |
|
|
|
@@ -671,7 +676,7 @@ skip_last_mv: |
|
|
|
if (none_left) |
|
|
|
return; |
|
|
|
|
|
|
|
for (i = 0; i < s->mb_num; i++) { |
|
|
|
for (i = 0; i < mb_width * mb_height; i++) { |
|
|
|
int mb_xy = s->mb_index2xy[i]; |
|
|
|
if (fixed[mb_xy]) |
|
|
|
fixed[mb_xy] = MV_FROZEN; |
|
|
|
|