- if (pred_count > 1) {
- int sum_x = 0, sum_y = 0, sum_r = 0;
- int max_x, max_y, min_x, min_y, max_r, min_r;
-
- for (j = 0; j < pred_count; j++) {
- sum_x += mv_predictor[j][0];
- sum_y += mv_predictor[j][1];
- sum_r += ref[j];
- if (j && ref[j] != ref[j - 1])
- goto skip_mean_and_median;
- }
-
- /* mean */
- mv_predictor[pred_count][0] = sum_x / j;
- mv_predictor[pred_count][1] = sum_y / j;
- ref[pred_count] = sum_r / j;
-
- /* median */
- if (pred_count >= 3) {
- min_y = min_x = min_r = 99999;
- max_y = max_x = max_r = -99999;
- } else {
- min_x = min_y = max_x = max_y = min_r = max_r = 0;
- }
- for (j = 0; j < pred_count; j++) {
- max_x = FFMAX(max_x, mv_predictor[j][0]);
- max_y = FFMAX(max_y, mv_predictor[j][1]);
- max_r = FFMAX(max_r, ref[j]);
- min_x = FFMIN(min_x, mv_predictor[j][0]);
- min_y = FFMIN(min_y, mv_predictor[j][1]);
- min_r = FFMIN(min_r, ref[j]);
- }
- mv_predictor[pred_count + 1][0] = sum_x - max_x - min_x;
- mv_predictor[pred_count + 1][1] = sum_y - max_y - min_y;
- ref[pred_count + 1] = sum_r - max_r - min_r;
-
- if (pred_count == 4) {
- mv_predictor[pred_count + 1][0] /= 2;
- mv_predictor[pred_count + 1][1] /= 2;
- ref[pred_count + 1] /= 2;
- }
- pred_count += 2;
- }