summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Wilkins <paulwilkins@google.com>2018-09-28 13:17:31 +0100
committerPaul Wilkins <paulwilkins@google.com>2018-09-28 13:17:31 +0100
commitd2641ff1df06ce974f2a1fac4336843c358acecd (patch)
tree02e9a2d67ffa83cb17190b04911af72d7545bedb
parent89c4ba1c77869eff129b4663b38a0e959572dc74 (diff)
downloadlibvpx-d2641ff1df06ce974f2a1fac4336843c358acecd.tar
libvpx-d2641ff1df06ce974f2a1fac4336843c358acecd.tar.gz
libvpx-d2641ff1df06ce974f2a1fac4336843c358acecd.tar.bz2
libvpx-d2641ff1df06ce974f2a1fac4336843c358acecd.zip
Revert "Merge "Adapt GOP size threshold to the allowed layer depth""
This reverts commit 5efde3914f1a85061e51bc8d96984216e976e90c, reversing changes made to 3a291593726a3f0eff5e59983e84de20d0bf294c. This is badly broken and may help somewhat for multi-layer but is hurting massively in single layer encodes. I ran this through this morning and while it often helps in SSIM it is badly down for global PSNR and PSNR-HVS with some clips down by 35-40%. This is in line with previous experiments where I have found that a bigger boost helps SSIM but hurts PSNR and PSNR HVS. I was also working on changes to the I factor that gave some improvements in single layer though these were based upon the active Q mostly. I also have looked at a bug for the first group where int_lbq is not properly defined and will submit an interim patch for this while I look for a better solution. In the meantime I think we should revert this. The (Global PSNR, SSIM, PSNR-HVS) for the patch as is in my runs for single layer vs a couple of days ago seem to be (-ve is better). Low res 0.346, -1.475, 0.239 mid res 1.581, -1.300, 1.731 (worst result down by 30-40% in psnr) hdres 0.665, -0.712, 1.043 (worst result down by 17-19% in psnr) NF2k 0.927, 0.111, 1.3220 (Worst result down by 5-7% in psnr) Change-Id: I55952b71b8cfc5a84484b3b659c5f8a530f3a755
-rw-r--r--vp9/encoder/vp9_firstpass.c15
1 files changed, 1 insertions, 14 deletions
diff --git a/vp9/encoder/vp9_firstpass.c b/vp9/encoder/vp9_firstpass.c
index b311a47f1..985c2fa2e 100644
--- a/vp9/encoder/vp9_firstpass.c
+++ b/vp9/encoder/vp9_firstpass.c
@@ -2482,8 +2482,6 @@ static void define_gf_group(VP9_COMP *cpi, FIRSTPASS_STATS *this_frame) {
const int is_key_frame = frame_is_intra_only(cm);
const int arf_active_or_kf = is_key_frame || rc->source_alt_ref_active;
- int gop_intra_factor = 0;
-
// Reset the GF group data structures unless this is a key
// frame in which case it will already have been done.
if (is_key_frame == 0) {
@@ -2536,12 +2534,6 @@ static void define_gf_group(VP9_COMP *cpi, FIRSTPASS_STATS *this_frame) {
// interval to spread the cost of the GF.
active_max_gf_interval = 12 + arf_active_or_kf + VPXMIN(4, (int_lbq / 6));
- // TODO(jingning, paulwilkins): Temporary solution to work around
- // multi-layer ARF rate control issues at extremely low bit-rate cases.
- // We would deprecate this soon.
- if (cpi->multi_layer_arf && is_key_frame)
- active_max_gf_interval = 7 + arf_active_or_kf + VPXMIN(4, (int_lbq / 6));
-
// We have: active_min_gf_interval <=
// rc->max_gf_interval + arf_active_or_kf.
if (active_max_gf_interval < active_min_gf_interval) {
@@ -2557,11 +2549,6 @@ static void define_gf_group(VP9_COMP *cpi, FIRSTPASS_STATS *this_frame) {
active_max_gf_interval = rc->frames_to_key / 2;
}
- // Adapt the intra_error factor to active_max_gf_interval limit.
- for (i = active_max_gf_interval; i > 0; i >>= 1) ++gop_intra_factor;
-
- gop_intra_factor = VPXMIN(MAX_ARF_LAYERS, gop_intra_factor);
-
i = 0;
while (i < rc->static_scene_max_gf_interval && i < rc->frames_to_key) {
++i;
@@ -2638,7 +2625,7 @@ static void define_gf_group(VP9_COMP *cpi, FIRSTPASS_STATS *this_frame) {
(!flash_detected) &&
((mv_ratio_accumulator > mv_ratio_accumulator_thresh) ||
(abs_mv_in_out_accumulator > abs_mv_in_out_thresh) ||
- (sr_accumulator > gop_intra_factor * next_frame.intra_error)))) {
+ (sr_accumulator > next_frame.intra_error)))) {
break;
}