Merge "Fix for loop filter selection procedure" into nextgenv2
diff --git a/vp10/encoder/picklpf.c b/vp10/encoder/picklpf.c
index f491006..9e0e72a 100644
--- a/vp10/encoder/picklpf.c
+++ b/vp10/encoder/picklpf.c
@@ -120,11 +120,11 @@
}
// If value is close to the best so far then bias towards a lower loop
// filter value.
- if ((ss_err[filt_low] - bias) < best_err) {
+ if (ss_err[filt_low] < (best_err + bias)) {
// Was it actually better than the previous best?
- if (ss_err[filt_low] < best_err)
+ if (ss_err[filt_low] < best_err) {
best_err = ss_err[filt_low];
-
+ }
filt_best = filt_low;
}
}
@@ -134,7 +134,8 @@
if (ss_err[filt_high] < 0) {
ss_err[filt_high] = try_filter_frame(sd, cpi, filt_high, partial_frame);
}
- // Was it better than the previous best?
+ // If value is significantly better than previous best, bias added against
+ // raising filter value
if (ss_err[filt_high] < (best_err - bias)) {
best_err = ss_err[filt_high];
filt_best = filt_high;
@@ -150,6 +151,10 @@
filt_mid = filt_best;
}
}
+
+ // Update best error
+ best_err = ss_err[filt_best];
+
if (best_cost_ret)
*best_cost_ret = RDCOST_DBL(x->rdmult, x->rddiv, 0, best_err);
return filt_best;
diff --git a/vp10/encoder/pickrst.c b/vp10/encoder/pickrst.c
index 6e4f590..fa01062 100644
--- a/vp10/encoder/pickrst.c
+++ b/vp10/encoder/pickrst.c
@@ -146,17 +146,16 @@
if (filt_direction <= 0 && filt_low != filt_mid) {
// Get Low filter error score
if (ss_err[filt_low] < 0) {
- bilateral_lev = search_bilateral_level(sd, cpi, filt_low,
- partial_frame, &ss_err[filt_low]);
+ bilateral_lev = search_bilateral_level(
+ sd, cpi, filt_low, partial_frame, &ss_err[filt_low]);
}
// If value is close to the best so far then bias towards a lower loop
// filter value.
- if ((ss_err[filt_low] - bias) < best_err) {
+ if (ss_err[filt_low] < (best_err + bias)) {
// Was it actually better than the previous best?
if (ss_err[filt_low] < best_err) {
best_err = ss_err[filt_low];
}
-
filt_best = filt_low;
restoration_best = bilateral_lev;
}
@@ -168,7 +167,8 @@
bilateral_lev = search_bilateral_level(
sd, cpi, filt_high, partial_frame, &ss_err[filt_high]);
}
- // Was it better than the previous best?
+ // If value is significantly better than previous best, bias added against
+ // raising filter value
if (ss_err[filt_high] < (best_err - bias)) {
best_err = ss_err[filt_high];
filt_best = filt_high;
@@ -185,6 +185,10 @@
filt_mid = filt_best;
}
}
+
+ // Update best error
+ best_err = ss_err[filt_best];
+
*restoration_level = restoration_best;
if (best_cost_ret) *best_cost_ret = best_err;
return filt_best;