static void guess_mv(MpegEncContext *s)
{
- uint8_t fixed[s->mb_stride * s->mb_height];
+ uint8_t *fixed = s->er_temp_buffer;
#define MV_FROZEN 3
#define MV_CHANGED 2
#define MV_UNCHANGED 1
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++) {
+ s->mb_x = 0;
+ s->mb_y = mb_y;
+ ff_init_block_index(s);
for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
const int mb_xy = mb_x + mb_y * s->mb_stride;
+ ff_update_block_index(s);
+
if (IS_INTRA(s->current_picture.f.mb_type[mb_xy]))
continue;
if (!(s->error_status_table[mb_xy] & ER_MV_ERROR))
changed = 0;
for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
+ s->mb_x = 0;
+ s->mb_y = mb_y;
+ ff_init_block_index(s);
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 } };
const int mot_index = (mb_x + mb_y * mot_stride) * mot_step;
int prev_x, prev_y, prev_ref;
+ ff_update_block_index(s);
+
if ((mb_x ^ mb_y ^ pass) & 1)
continue;
/* We do not support ER of field pictures yet,
* though it should not crash if enabled. */
- if (!s->err_recognition || s->error_count == 0 || s->avctx->lowres ||
+ if (!s->err_recognition || s->error_count == 0 ||
s->avctx->hwaccel ||
s->avctx->codec->capabilities&CODEC_CAP_HWACCEL_VDPAU ||
s->picture_structure != PICT_FRAME ||
/* handle inter blocks with damaged AC */
for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
+ s->mb_x = 0;
+ s->mb_y = mb_y;
+ ff_init_block_index(s);
for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
const int mb_xy = mb_x + mb_y * s->mb_stride;
const int mb_type = s->current_picture.f.mb_type[mb_xy];
int dir = !s->last_picture.f.data[0];
+ ff_update_block_index(s);
+
error = s->error_status_table[mb_xy];
if (IS_INTRA(mb_type))
/* guess MVs */
if (s->pict_type == AV_PICTURE_TYPE_B) {
for (mb_y = 0; mb_y < s->mb_height; mb_y++) {
+ s->mb_x = 0;
+ s->mb_y = mb_y;
+ ff_init_block_index(s);
for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
int xy = mb_x * 2 + mb_y * 2 * s->b8_stride;
const int mb_xy = mb_x + mb_y * s->mb_stride;
const int mb_type = s->current_picture.f.mb_type[mb_xy];
+ ff_update_block_index(s);
+
error = s->error_status_table[mb_xy];
if (IS_INTRA(mb_type))