]> granicus.if.org Git - libvpx/commitdiff
Rate control fix for ARNR filtered frames.
authorPaul Wilkins <paulwilkins@google.com>
Mon, 19 Jul 2010 13:10:07 +0000 (14:10 +0100)
committerPaul Wilkins <paulwilkins@google.com>
Mon, 19 Jul 2010 13:10:07 +0000 (14:10 +0100)
Previously we had assumed that it was necessary to give a full frame's
bit allocation to the alt ref frame if it has been created through temporal
filtering. This is not the case. The active max quantizer control
insures that sufficient bits are allocated if needed and allocating a
full frame's worth of bits creates an excessive overhead for the ARF.

Change-Id: I83c95ed7bc7ce0e53ccae6ff32db5a97f145937a

vp8/encoder/onyx_if.c
vp8/encoder/ratectrl.c

index a51f754a3471a47bdda4a77acc07dc6e3fb72ec1..c654eb394dcc3d965480960d65242461ed349982 100644 (file)
@@ -4960,20 +4960,7 @@ int vp8_get_compressed_data(VP8_PTR ptr, unsigned int *frame_flags, unsigned lon
             {
                 if (cpi->source_encode_index ==  cpi->last_alt_ref_sei)
                 {
-#if VP8_TEMPORAL_ALT_REF
-
-                    if (cpi->oxcf.arnr_max_frames == 0)
-                    {
-                        cpi->is_src_frame_alt_ref = 1; // copy alt ref
-                    }
-                    else
-                    {
-                        cpi->is_src_frame_alt_ref = 0;
-                    }
-
-#else
                     cpi->is_src_frame_alt_ref = 1;
-#endif
                     cpi->last_alt_ref_sei    = -1;
                 }
                 else
index b309d5364d0be8a49763858967052a5831206838..582c617efeb5e8c8becc4736eb8f21df80f9dffe 100644 (file)
@@ -1120,10 +1120,12 @@ void vp8_calc_pframe_target_size(VP8_COMP *cpi)
 
             }
             // If there is an active ARF at this location use the minimum
-            // bits on this frame unless it was a contructed arf.
-            else if (cpi->oxcf.arnr_max_frames == 0)
+            // bits on this frame even if it is a contructed arf.
+            // The active maximum quantizer insures that an appropriate
+            // number of bits will be spent if needed for contstructed ARFs.
+            else
             {
-                cpi->this_frame_target = 0;           // Minimial spend on gf that is replacing an arf
+                cpi->this_frame_target = 0;
             }
 
             cpi->current_gf_interval = cpi->frames_till_gf_update_due;