shithub: libvpx

Download patch

ref: 87e570e6bea5564c36f9464e099bf72b7cebbd5d
parent: c521abeb49d96a519c6773377e36c59dcfdf99f6
parent: 6f080f9cec229bac78f78b5726849793aea91fd5
author: John Koleszar <jkoleszar@google.com>
date: Fri Jul 29 20:05:09 EDT 2011

Merge remote branch 'origin/master' into experimental

Change-Id: I473166452c0ed5a4219b5e7d96a91a6641b11b9d

--- a/vp8/encoder/picklpf.c
+++ b/vp8/encoder/picklpf.c
@@ -161,7 +161,7 @@
     if (cm->sharpness_level != cm->last_sharpness_level)
     {
         vp8_loop_filter_update_sharpness(&cm->lf_info, cm->sharpness_level);
-        cm->last_sharpness_level = cm->last_sharpness_level;
+        cm->last_sharpness_level = cm->sharpness_level;
     }
 
     // Start the search at the previous frame filter level unless it is now out of range.
--- a/vp8/vp8_cx_iface.c
+++ b/vp8/vp8_cx_iface.c
@@ -40,6 +40,7 @@
     unsigned int                experimental;
     vp8e_tuning                 tuning;
     unsigned int                cq_level;         /* constrained quality level */
+    unsigned int                rc_max_intra_bitrate_pct;
 
 };
 
@@ -73,6 +74,7 @@
             0,                          /* experimental mode */
             0,                          /* tuning*/
             10,                         /* cq_level */
+            0,                          /* rc_max_intra_bitrate_pct */
         }
     }
 };
@@ -308,7 +310,7 @@
     }
 
     oxcf->target_bandwidth       = cfg.rc_target_bitrate;
-    oxcf->rc_max_intra_bitrate_pct = cfg.rc_max_intra_bitrate_pct;
+    oxcf->rc_max_intra_bitrate_pct = vp8_cfg.rc_max_intra_bitrate_pct;
 
     oxcf->best_allowed_q          = cfg.rc_min_quantizer;
     oxcf->worst_allowed_q         = cfg.rc_max_quantizer;
@@ -465,6 +467,7 @@
         MAP(VP8E_SET_ARNR_TYPE     ,        xcfg.arnr_type);
         MAP(VP8E_SET_TUNING,                xcfg.tuning);
         MAP(VP8E_SET_CQ_LEVEL,              xcfg.cq_level);
+        MAP(VP8E_SET_MAX_INTRA_BITRATE_PCT, xcfg.rc_max_intra_bitrate_pct);
 
     }
 
@@ -1107,6 +1110,7 @@
     {VP8E_SET_ARNR_TYPE     ,           set_param},
     {VP8E_SET_TUNING,                   set_param},
     {VP8E_SET_CQ_LEVEL,                 set_param},
+    {VP8E_SET_MAX_INTRA_BITRATE_PCT,    set_param},
     { -1, NULL},
 };
 
@@ -1139,7 +1143,6 @@
         {0},                /* rc_twopass_stats_in */
 #endif
         256,                /* rc_target_bandwidth */
-        0,                  /* rc_max_intra_bitrate_pct */
         4,                  /* rc_min_quantizer */
         63,                 /* rc_max_quantizer */
         100,                /* rc_undershoot_pct */
--- a/vpx/vp8cx.h
+++ b/vpx/vp8cx.h
@@ -174,6 +174,20 @@
      * \note Valid range: 0..63
      */
     VP8E_SET_CQ_LEVEL,
+
+    /*!\brief Max data rate for Intra frames
+     *
+     * This value controls additional clamping on the maximum size of a
+     * keyframe. It is expressed as a percentage of the average
+     * per-frame bitrate, with the special (and default) value 0 meaning
+     * unlimited, or no additional clamping beyond the codec's built-in
+     * algorithm.
+     *
+     * For example, to allocate no more than 4.5 frames worth of bitrate
+     * to a keyframe, set this to 450.
+     *
+     */
+    VP8E_SET_MAX_INTRA_BITRATE_PCT,
 };
 
 /*!\brief vpx 1-D scaling mode
@@ -304,6 +318,9 @@
 
 VPX_CTRL_USE_TYPE(VP8E_GET_LAST_QUANTIZER,     int *)
 VPX_CTRL_USE_TYPE(VP8E_GET_LAST_QUANTIZER_64,  int *)
+
+VPX_CTRL_USE_TYPE(VP8E_SET_MAX_INTRA_BITRATE_PCT, unsigned int)
+
 
 /*! @} - end defgroup vp8_encoder */
 #include "vpx_codec_impl_bottom.h"
--- a/vpx/vpx_encoder.h
+++ b/vpx/vpx_encoder.h
@@ -433,21 +433,6 @@
         unsigned int           rc_target_bitrate;
 
 
-        /*!\brief Max data rate for Intra frames
-         *
-         * This value controls additional clamping on the maximum size of a
-         * keyframe. It is expressed as a percentage of the average
-         * per-frame bitrate, with the special (and default) value 0 meaning
-         * unlimited, or no additional clamping beyond the codec's built-in
-         * algorithm.
-         *
-         * For example, to allocate no more than 4.5 frames worth of bitrate
-         * to a keyframe, set this to 450.
-         *
-         */
-        unsigned int           rc_max_intra_bitrate_pct;
-
-
         /*
          * quantizer settings
          */
--- a/vpxenc.c
+++ b/vpxenc.c
@@ -1016,14 +1016,11 @@
         "Client initial buffer size (ms)");
 static const arg_def_t buf_optimal_sz     = ARG_DEF(NULL, "buf-optimal-sz", 1,
         "Client optimal buffer size (ms)");
-static const arg_def_t max_intra_rate_pct = ARG_DEF(NULL, "max-intra-rate", 1,
-        "Max I-frame bitrate (pct)");
 static const arg_def_t *rc_args[] =
 {
     &dropframe_thresh, &resize_allowed, &resize_up_thresh, &resize_down_thresh,
     &end_usage, &target_bitrate, &min_quantizer, &max_quantizer,
     &undershoot_pct, &overshoot_pct, &buf_sz, &buf_initial_sz, &buf_optimal_sz,
-    &max_intra_rate_pct,
     NULL
 };
 
@@ -1087,12 +1084,14 @@
                                    "Material to favor", tuning_enum);
 static const arg_def_t cq_level = ARG_DEF(NULL, "cq-level", 1,
                                    "Constrained Quality Level");
+static const arg_def_t max_intra_rate_pct = ARG_DEF(NULL, "max-intra-rate", 1,
+        "Max I-frame bitrate (pct)");
 
 static const arg_def_t *vp8_args[] =
 {
     &cpu_used, &auto_altref, &noise_sens, &sharpness, &static_thresh,
     &token_parts, &arnr_maxframes, &arnr_strength, &arnr_type,
-    &tune_ssim, &cq_level, NULL
+    &tune_ssim, &cq_level, &max_intra_rate_pct, NULL
 };
 static const int vp8_arg_ctrl_map[] =
 {
@@ -1100,7 +1099,7 @@
     VP8E_SET_NOISE_SENSITIVITY, VP8E_SET_SHARPNESS, VP8E_SET_STATIC_THRESHOLD,
     VP8E_SET_TOKEN_PARTITIONS,
     VP8E_SET_ARNR_MAXFRAMES, VP8E_SET_ARNR_STRENGTH , VP8E_SET_ARNR_TYPE,
-    VP8E_SET_TUNING, VP8E_SET_CQ_LEVEL, 0
+    VP8E_SET_TUNING, VP8E_SET_CQ_LEVEL, VP8E_SET_MAX_INTRA_BITRATE_PCT, 0
 };
 #endif
 
@@ -1639,8 +1638,6 @@
             cfg.rc_end_usage = arg_parse_enum_or_int(&arg);
         else if (arg_match(&arg, &target_bitrate, argi))
             cfg.rc_target_bitrate = arg_parse_uint(&arg);
-        else if (arg_match(&arg, &max_intra_rate_pct, argi))
-            cfg.rc_max_intra_bitrate_pct = arg_parse_uint(&arg);
         else if (arg_match(&arg, &min_quantizer, argi))
             cfg.rc_min_quantizer = arg_parse_uint(&arg);
         else if (arg_match(&arg, &max_quantizer, argi))
--