Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(44)

Unified Diff: libvpx/source/libvpx/vp8/encoder/ratectrl.c

Issue 7624054: Revert r97185 "Update libvpx snapshot to v0.9.7-p1 (Cayuga)." (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party
Patch Set: Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « libvpx/source/libvpx/vp8/encoder/ratectrl.h ('k') | libvpx/source/libvpx/vp8/encoder/rdopt.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: libvpx/source/libvpx/vp8/encoder/ratectrl.c
diff --git a/libvpx/source/libvpx/vp8/encoder/ratectrl.c b/libvpx/source/libvpx/vp8/encoder/ratectrl.c
index 46e1d9dd9efc298612826c0cf9f35fb84fc485f2..e2c6327ef425d036eb8d897ef29a97238290cbda 100644
--- a/libvpx/source/libvpx/vp8/encoder/ratectrl.c
+++ b/libvpx/source/libvpx/vp8/encoder/ratectrl.c
@@ -310,7 +310,7 @@ void vp8_setup_key_frame(VP8_COMP *cpi)
vpx_memcpy(cpi->common.fc.mvc, vp8_default_mv_context, sizeof(vp8_default_mv_context));
{
int flag[2] = {1, 1};
- vp8_build_component_cost_table(cpi->mb.mvcost, (const MV_CONTEXT *) cpi->common.fc.mvc, flag);
+ vp8_build_component_cost_table(cpi->mb.mvcost, cpi->mb.mvsadcost, (const MV_CONTEXT *) cpi->common.fc.mvc, flag);
}
vpx_memset(cpi->common.fc.pre_mvc, 0, sizeof(cpi->common.fc.pre_mvc)); //initialize pre_mvc to all zero.
@@ -329,97 +329,62 @@ void vp8_setup_key_frame(VP8_COMP *cpi)
cpi->common.refresh_alt_ref_frame = TRUE;
}
-
-static int estimate_bits_at_q(int frame_kind, int Q, int MBs,
- double correction_factor)
-{
- int Bpm = (int)(.5 + correction_factor * vp8_bits_per_mb[frame_kind][Q]);
-
- /* Attempt to retain reasonable accuracy without overflow. The cutoff is
- * chosen such that the maximum product of Bpm and MBs fits 31 bits. The
- * largest Bpm takes 20 bits.
- */
- if (MBs > (1 << 11))
- return (Bpm >> BPER_MB_NORMBITS) * MBs;
- else
- return (Bpm * MBs) >> BPER_MB_NORMBITS;
-}
-
-
-static void calc_iframe_target_size(VP8_COMP *cpi)
+void vp8_calc_auto_iframe_target_size(VP8_COMP *cpi)
{
// boost defaults to half second
int kf_boost;
- int target;
// Clear down mmx registers to allow floating point in what follows
vp8_clear_system_state(); //__asm emms;
if (cpi->oxcf.fixed_q >= 0)
{
- int Q = cpi->oxcf.key_q;
-
- target = estimate_bits_at_q(INTRA_FRAME, Q, cpi->common.MBs,
- cpi->key_frame_rate_correction_factor);
- }
- else if (cpi->pass == 2)
- {
- // New Two pass RC
- target = cpi->per_frame_bandwidth;
+ vp8_calc_iframe_target_size(cpi);
+ return;
}
- // First Frame is a special case
- else if (cpi->common.current_video_frame == 0)
+
+ if (cpi->pass == 2)
{
- /* 1 Pass there is no information on which to base size so use
- * bandwidth per second * fraction of the initial buffer
- * level
- */
- target = cpi->oxcf.starting_buffer_level / 2;
-
- if(target > cpi->oxcf.target_bandwidth * 3 / 2)
- target = cpi->oxcf.target_bandwidth * 3 / 2;
+ cpi->this_frame_target = cpi->per_frame_bandwidth; // New Two pass RC
}
else
{
- // if this keyframe was forced, use a more recent Q estimate
- int Q = (cpi->common.frame_flags & FRAMEFLAGS_KEY)
- ? cpi->avg_frame_qindex : cpi->ni_av_qi;
-
// Boost depends somewhat on frame rate
kf_boost = (int)(2 * cpi->output_frame_rate - 16);
// adjustment up based on q
- kf_boost = kf_boost * kf_boost_qadjustment[Q] / 100;
+ kf_boost = kf_boost * kf_boost_qadjustment[cpi->ni_av_qi] / 100;
// frame separation adjustment ( down)
if (cpi->frames_since_key < cpi->output_frame_rate / 2)
- kf_boost = (int)(kf_boost
- * cpi->frames_since_key / (cpi->output_frame_rate / 2));
+ kf_boost = (int)(kf_boost * cpi->frames_since_key / (cpi->output_frame_rate / 2));
if (kf_boost < 16)
kf_boost = 16;
- target = ((16 + kf_boost) * cpi->per_frame_bandwidth) >> 4;
+ // Reset the active worst quality to the baseline value for key frames.
+ cpi->active_worst_quality = cpi->worst_quality;
+
+ cpi->this_frame_target = ((16 + kf_boost) * cpi->per_frame_bandwidth) >> 4;
}
- if (cpi->oxcf.rc_max_intra_bitrate_pct)
+ // Should the next frame be an altref frame
+ if (cpi->pass != 2)
{
- unsigned int max_rate = cpi->per_frame_bandwidth
- * cpi->oxcf.rc_max_intra_bitrate_pct / 100;
+ // For now Alt ref is not allowed except in 2 pass modes.
+ cpi->source_alt_ref_pending = FALSE;
- if (target > max_rate)
- target = max_rate;
+ /*if ( cpi->oxcf.fixed_q == -1)
+ {
+ if ( cpi->oxcf.play_alternate && ( (cpi->last_boost/2) > (100+(AF_THRESH*cpi->frames_till_gf_update_due)) ) )
+ cpi->source_alt_ref_pending = TRUE;
+ else
+ cpi->source_alt_ref_pending = FALSE;
+ }*/
}
- cpi->this_frame_target = target;
-
- // TODO: if we separate rate targeting from Q targetting, move this.
- // Reset the active worst quality to the baseline value for key frames.
- if (cpi->pass != 2)
- cpi->active_worst_quality = cpi->worst_quality;
-
-#if 0
+ if (0)
{
FILE *f;
@@ -432,10 +397,8 @@ static void calc_iframe_target_size(VP8_COMP *cpi)
fclose(f);
}
-#endif
}
-
// Do the best we can to define the parameteres for the next GF based on what information we have available.
static void calc_gf_params(VP8_COMP *cpi)
{
@@ -601,13 +564,106 @@ static void calc_gf_params(VP8_COMP *cpi)
}*/
}
}
+/* This is equvialent to estimate_bits_at_q without the rate_correction_factor. */
+static int baseline_bits_at_q(int frame_kind, int Q, int MBs)
+{
+ int Bpm = vp8_bits_per_mb[frame_kind][Q];
+
+ /* Attempt to retain reasonable accuracy without overflow. The cutoff is
+ * chosen such that the maximum product of Bpm and MBs fits 31 bits. The
+ * largest Bpm takes 20 bits.
+ */
+ if (MBs > (1 << 11))
+ return (Bpm >> BPER_MB_NORMBITS) * MBs;
+ else
+ return (Bpm * MBs) >> BPER_MB_NORMBITS;
+}
+
+void vp8_calc_iframe_target_size(VP8_COMP *cpi)
+{
+ int Q;
+ int Boost = 100;
+
+ Q = (cpi->oxcf.fixed_q >= 0) ? cpi->oxcf.fixed_q : cpi->avg_frame_qindex;
+
+ if (cpi->auto_adjust_key_quantizer == 1)
+ {
+ // If (auto_adjust_key_quantizer==1) then a lower Q is selected for key-frames.
+ // The enhanced Q is calculated so as to boost the key frame size by a factor
+ // specified in kf_boost_qadjustment. Also, can adjust based on distance
+ // between key frames.
+
+ // Adjust boost based upon ambient Q
+ Boost = kf_boost_qadjustment[Q];
+
+ // Make the Key frame boost less if the seperation from the previous key frame is small
+ if (cpi->frames_since_key < 16)
+ Boost = Boost * kf_boost_seperation_adjustment[cpi->frames_since_key] / 100;
+ else
+ Boost = Boost * kf_boost_seperation_adjustment[15] / 100;
+
+ // Apply limits on boost
+ if (Boost > kf_gf_boost_qlimits[Q])
+ Boost = kf_gf_boost_qlimits[Q];
+ else if (Boost < 120)
+ Boost = 120;
+ }
+
+ // Keep a record of the boost that was used
+ cpi->last_boost = Boost;
+
+ // Should the next frame be an altref frame
+ if (cpi->pass != 2)
+ {
+ // For now Alt ref is not allowed except in 2 pass modes.
+ cpi->source_alt_ref_pending = FALSE;
+
+ /*if ( cpi->oxcf.fixed_q == -1)
+ {
+ if ( cpi->oxcf.play_alternate && ( (cpi->last_boost/2) > (100+(AF_THRESH*cpi->frames_till_gf_update_due)) ) )
+ cpi->source_alt_ref_pending = TRUE;
+ else
+ cpi->source_alt_ref_pending = FALSE;
+ }*/
+ }
+
+ if (cpi->oxcf.fixed_q >= 0)
+ {
+ cpi->this_frame_target = (baseline_bits_at_q(0, Q, cpi->common.MBs) * Boost) / 100;
+ }
+ else
+ {
+
+ int bits_per_mb_at_this_q ;
+
+ if (cpi->oxcf.error_resilient_mode == 1)
+ {
+ cpi->this_frame_target = 2 * cpi->av_per_frame_bandwidth;
+ return;
+ }
+
+ // Rate targetted scenario:
+ // Be careful of 32-bit OVERFLOW if restructuring the caluclation of cpi->this_frame_target
+ bits_per_mb_at_this_q = (int)(.5 +
+ cpi->key_frame_rate_correction_factor * vp8_bits_per_mb[0][Q]);
+
+ cpi->this_frame_target = (((bits_per_mb_at_this_q * cpi->common.MBs) >> BPER_MB_NORMBITS) * Boost) / 100;
+
+ // Reset the active worst quality to the baseline value for key frames.
+ if (cpi->pass < 2)
+ cpi->active_worst_quality = cpi->worst_quality;
+ }
+}
+
-static void calc_pframe_target_size(VP8_COMP *cpi)
+void vp8_calc_pframe_target_size(VP8_COMP *cpi)
{
int min_frame_target;
int Adjustment;
+ // Set the min frame bandwidth.
+ //min_frame_target = estimate_min_frame_size( cpi );
min_frame_target = 0;
if (cpi->pass == 2)
@@ -626,7 +682,7 @@ static void calc_pframe_target_size(VP8_COMP *cpi)
{
if (cpi->pass == 2)
{
- cpi->per_frame_bandwidth = cpi->twopass.gf_bits; // Per frame bit target for the alt ref frame
+ cpi->per_frame_bandwidth = cpi->gf_bits; // Per frame bit target for the alt ref frame
cpi->this_frame_target = cpi->per_frame_bandwidth;
}
@@ -761,6 +817,11 @@ static void calc_pframe_target_size(VP8_COMP *cpi)
}
}
+ // Set a reduced data rate target for our initial Q calculation.
+ // This should help to save bits during earier sections.
+ if ((cpi->oxcf.under_shoot_pct > 0) && (cpi->oxcf.under_shoot_pct <= 100))
+ cpi->this_frame_target = (cpi->this_frame_target * cpi->oxcf.under_shoot_pct) / 100;
+
// Sanity check that the total sum of adjustments is not above the maximum allowed
// That is that having allowed for KF and GF penalties we have not pushed the
// current interframe target to low. If the adjustment we apply here is not capable of recovering
@@ -797,6 +858,11 @@ static void calc_pframe_target_size(VP8_COMP *cpi)
percent_low =
(cpi->oxcf.optimal_buffer_level - cpi->buffer_level) /
one_percent_bits;
+
+ if (percent_low > 100)
+ percent_low = 100;
+ else if (percent_low < 0)
+ percent_low = 0;
}
// Are we overshooting the long term clip data rate...
else if (cpi->bits_off_target < 0)
@@ -804,16 +870,16 @@ static void calc_pframe_target_size(VP8_COMP *cpi)
// Adjust per frame data target downwards to compensate.
percent_low = (int)(100 * -cpi->bits_off_target /
(cpi->total_byte_count * 8));
- }
- if (percent_low > cpi->oxcf.under_shoot_pct)
- percent_low = cpi->oxcf.under_shoot_pct;
- else if (percent_low < 0)
- percent_low = 0;
+ if (percent_low > 100)
+ percent_low = 100;
+ else if (percent_low < 0)
+ percent_low = 0;
+ }
// lower the target bandwidth for this frame.
- cpi->this_frame_target -= (cpi->this_frame_target * percent_low)
- / 200;
+ cpi->this_frame_target =
+ (cpi->this_frame_target * (100 - (percent_low / 2))) / 100;
// Are we using allowing control of active_worst_allowed_q
// according to buffer level.
@@ -850,9 +916,9 @@ static void calc_pframe_target_size(VP8_COMP *cpi)
if ( critical_buffer_level >
(cpi->oxcf.optimal_buffer_level >> 2) )
{
- int64_t qadjustment_range =
+ INT64 qadjustment_range =
cpi->worst_quality - cpi->ni_av_qi;
- int64_t above_base =
+ INT64 above_base =
(critical_buffer_level -
(cpi->oxcf.optimal_buffer_level >> 2));
@@ -884,29 +950,20 @@ static void calc_pframe_target_size(VP8_COMP *cpi)
}
else
{
- int percent_high = 0;
+ int percent_high;
- if ((cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER)
- && (cpi->buffer_level > cpi->oxcf.optimal_buffer_level))
+ if (cpi->bits_off_target > cpi->oxcf.optimal_buffer_level)
{
- percent_high = (cpi->buffer_level
- - cpi->oxcf.optimal_buffer_level)
- / one_percent_bits;
- }
- else if (cpi->bits_off_target > cpi->oxcf.optimal_buffer_level)
- {
- percent_high = (int)((100 * cpi->bits_off_target)
- / (cpi->total_byte_count * 8));
- }
+ percent_high = (int)(100 * (cpi->bits_off_target - cpi->oxcf.optimal_buffer_level) / (cpi->total_byte_count * 8));
- if (percent_high > cpi->oxcf.over_shoot_pct)
- percent_high = cpi->oxcf.over_shoot_pct;
- else if (percent_high < 0)
- percent_high = 0;
+ if (percent_high > 100)
+ percent_high = 100;
+ else if (percent_high < 0)
+ percent_high = 0;
- cpi->this_frame_target += (cpi->this_frame_target *
- percent_high) / 200;
+ cpi->this_frame_target = (cpi->this_frame_target * (100 + (percent_high / 2))) / 100;
+ }
// Are we allowing control of active_worst_allowed_q according to bufferl level.
if (cpi->auto_worst_q)
@@ -1055,6 +1112,7 @@ static void calc_pframe_target_size(VP8_COMP *cpi)
}
#endif
+ cpi->initial_gf_use = 0;
if (cpi->auto_adjust_gold_quantizer)
{
@@ -1094,9 +1152,7 @@ static void calc_pframe_target_size(VP8_COMP *cpi)
}
}
else
- cpi->this_frame_target =
- (estimate_bits_at_q(1, Q, cpi->common.MBs, 1.0)
- * cpi->last_boost) / 100;
+ cpi->this_frame_target = (baseline_bits_at_q(1, Q, cpi->common.MBs) * cpi->last_boost) / 100;
}
// If there is an active ARF at this location use the minimum
@@ -1218,6 +1274,21 @@ void vp8_update_rate_correction_factors(VP8_COMP *cpi, int damp_var)
}
}
+static int estimate_bits_at_q(VP8_COMP *cpi, int Q)
+{
+ int Bpm = (int)(.5 + cpi->rate_correction_factor * vp8_bits_per_mb[INTER_FRAME][Q]);
+
+ /* Attempt to retain reasonable accuracy without overflow. The cutoff is
+ * chosen such that the maximum product of Bpm and MBs fits 31 bits. The
+ * largest Bpm takes 20 bits.
+ */
+ if (cpi->common.MBs > (1 << 11))
+ return (Bpm >> BPER_MB_NORMBITS) * cpi->common.MBs;
+ else
+ return (Bpm * cpi->common.MBs) >> BPER_MB_NORMBITS;
+
+}
+
int vp8_regulate_q(VP8_COMP *cpi, int target_bits_per_frame)
{
@@ -1348,92 +1419,126 @@ int vp8_regulate_q(VP8_COMP *cpi, int target_bits_per_frame)
return Q;
}
+static int estimate_min_frame_size(VP8_COMP *cpi)
+{
+ double correction_factor;
+ int bits_per_mb_at_max_q;
+
+ // This funtion returns a default value for the first few frames untill the correction factor has had time to adapt.
+ if (cpi->common.current_video_frame < 10)
+ {
+ if (cpi->pass == 2)
+ return (cpi->min_frame_bandwidth);
+ else
+ return cpi->per_frame_bandwidth / 3;
+ }
+
+ /* // Select the appropriate correction factor based upon type of frame.
+ if ( cpi->common.frame_type == KEY_FRAME )
+ correction_factor = cpi->key_frame_rate_correction_factor;
+ else
+ {
+ if ( cpi->common.refresh_alt_ref_frame || cpi->common.refresh_golden_frame )
+ correction_factor = cpi->gf_rate_correction_factor;
+ else
+ correction_factor = cpi->rate_correction_factor;
+ }*/
+
+ // We estimate at half the value we get from vp8_bits_per_mb
+ correction_factor = cpi->rate_correction_factor / 2.0;
+
+ bits_per_mb_at_max_q = (int)(.5 + correction_factor * vp8_bits_per_mb[cpi->common.frame_type][MAXQ]);
+
+ return (bits_per_mb_at_max_q * cpi->common.MBs) >> BPER_MB_NORMBITS;
+}
-static int estimate_keyframe_frequency(VP8_COMP *cpi)
+void vp8_adjust_key_frame_context(VP8_COMP *cpi)
{
int i;
+ int av_key_frames_per_second;
- // Average key frame frequency
- int av_key_frame_frequency = 0;
+ // Average key frame frequency and size
+ unsigned int total_weight = 0;
+ unsigned int av_key_frame_frequency = 0;
+ unsigned int av_key_frame_bits = 0;
- /* First key frame at start of sequence is a special case. We have no
- * frequency data.
- */
- if (cpi->key_frame_count == 1)
- {
- /* Assume a default of 1 kf every 2 seconds, or the max kf interval,
- * whichever is smaller.
- */
- int key_freq = cpi->oxcf.key_freq>0 ? cpi->oxcf.key_freq : 1;
- av_key_frame_frequency = (int)cpi->output_frame_rate * 2;
+ unsigned int output_frame_rate = (unsigned int)(100 * cpi->output_frame_rate);
+ unsigned int target_bandwidth = (unsigned int)(100 * cpi->target_bandwidth);
+
+ // Clear down mmx registers to allow floating point in what follows
+ vp8_clear_system_state(); //__asm emms;
- if (cpi->oxcf.auto_key && av_key_frame_frequency > key_freq)
- av_key_frame_frequency = cpi->oxcf.key_freq;
+ // Update the count of total key frame bits
+ cpi->tot_key_frame_bits += cpi->projected_frame_size;
- cpi->prior_key_frame_distance[KEY_FRAME_CONTEXT - 1]
- = av_key_frame_frequency;
+ // First key frame at start of sequence is a special case. We have no frequency data.
+ if (cpi->key_frame_count == 1)
+ {
+ av_key_frame_frequency = (int)cpi->output_frame_rate * 2; // Assume a default of 1 kf every 2 seconds
+ av_key_frame_bits = cpi->projected_frame_size;
+ av_key_frames_per_second = output_frame_rate / av_key_frame_frequency; // Note output_frame_rate not cpi->output_frame_rate
}
else
{
- unsigned int total_weight = 0;
int last_kf_interval =
(cpi->frames_since_key > 0) ? cpi->frames_since_key : 1;
- /* reset keyframe context and calculate weighted average of last
- * KEY_FRAME_CONTEXT keyframes
- */
+ // reset keyframe context and calculate weighted average of last KEY_FRAME_CONTEXT keyframes
for (i = 0; i < KEY_FRAME_CONTEXT; i++)
{
if (i < KEY_FRAME_CONTEXT - 1)
- cpi->prior_key_frame_distance[i]
- = cpi->prior_key_frame_distance[i+1];
+ {
+ cpi->prior_key_frame_size[i] = cpi->prior_key_frame_size[i+1];
+ cpi->prior_key_frame_distance[i] = cpi->prior_key_frame_distance[i+1];
+ }
else
+ {
+ cpi->prior_key_frame_size[i] = cpi->projected_frame_size;
cpi->prior_key_frame_distance[i] = last_kf_interval;
+ }
- av_key_frame_frequency += prior_key_frame_weight[i]
- * cpi->prior_key_frame_distance[i];
- total_weight += prior_key_frame_weight[i];
+ av_key_frame_bits += prior_key_frame_weight[i] * cpi->prior_key_frame_size[i];
+ av_key_frame_frequency += prior_key_frame_weight[i] * cpi->prior_key_frame_distance[i];
+ total_weight += prior_key_frame_weight[i];
}
+ av_key_frame_bits /= total_weight;
av_key_frame_frequency /= total_weight;
+ av_key_frames_per_second = output_frame_rate / av_key_frame_frequency;
}
- return av_key_frame_frequency;
-}
-
-
-void vp8_adjust_key_frame_context(VP8_COMP *cpi)
-{
- // Clear down mmx registers to allow floating point in what follows
- vp8_clear_system_state();
// Do we have any key frame overspend to recover?
- // Two-pass overspend handled elsewhere.
- if ((cpi->pass != 2)
- && (cpi->projected_frame_size > cpi->per_frame_bandwidth))
+ if ((cpi->pass != 2) && (cpi->projected_frame_size > cpi->per_frame_bandwidth))
{
- int overspend;
-
- /* Update the count of key frame overspend to be recovered in
- * subsequent frames. A portion of the KF overspend is treated as gf
- * overspend (and hence recovered more quickly) as the kf is also a
- * gf. Otherwise the few frames following each kf tend to get more
- * bits allocated than those following other gfs.
- */
- overspend = (cpi->projected_frame_size - cpi->per_frame_bandwidth);
- cpi->kf_overspend_bits += overspend * 7 / 8;
- cpi->gf_overspend_bits += overspend * 1 / 8;
-
- /* Work out how much to try and recover per frame. */
- cpi->kf_bitrate_adjustment = cpi->kf_overspend_bits
- / estimate_keyframe_frequency(cpi);
+ // Update the count of key frame overspend to be recovered in subsequent frames
+ // A portion of the KF overspend is treated as gf overspend (and hence recovered more quickly)
+ // as the kf is also a gf. Otherwise the few frames following each kf tend to get more bits
+ // allocated than those following other gfs.
+ cpi->kf_overspend_bits += (cpi->projected_frame_size - cpi->per_frame_bandwidth) * 7 / 8;
+ cpi->gf_overspend_bits += (cpi->projected_frame_size - cpi->per_frame_bandwidth) * 1 / 8;
+ if(!av_key_frame_frequency)
+ av_key_frame_frequency = 60;
+
+ // Work out how much to try and recover per frame.
+ // For one pass we estimate the number of frames to spread it over based upon past history.
+ // For two pass we know how many frames there will be till the next kf.
+ if (cpi->pass == 2)
+ {
+ if (cpi->frames_to_key > 16)
+ cpi->kf_bitrate_adjustment = cpi->kf_overspend_bits / (int)cpi->frames_to_key;
+ else
+ cpi->kf_bitrate_adjustment = cpi->kf_overspend_bits / 16;
+ }
+ else
+ cpi->kf_bitrate_adjustment = cpi->kf_overspend_bits / (int)av_key_frame_frequency;
}
cpi->frames_since_key = 0;
+ cpi->last_key_frame_size = cpi->projected_frame_size;
cpi->key_frame_count++;
}
-
void vp8_compute_frame_size_bounds(VP8_COMP *cpi, int *frame_under_shoot_limit, int *frame_over_shoot_limit)
{
// Set-up bounds on acceptable frame size:
@@ -1500,26 +1605,3 @@ void vp8_compute_frame_size_bounds(VP8_COMP *cpi, int *frame_under_shoot_limit,
}
}
}
-
-
-// return of 0 means drop frame
-int vp8_pick_frame_size(VP8_COMP *cpi)
-{
- VP8_COMMON *cm = &cpi->common;
-
- if (cm->frame_type == KEY_FRAME)
- calc_iframe_target_size(cpi);
- else
- {
- calc_pframe_target_size(cpi);
-
- // Check if we're dropping the frame:
- if (cpi->drop_frame)
- {
- cpi->drop_frame = FALSE;
- cpi->drop_count++;
- return 0;
- }
- }
- return 1;
-}
« no previous file with comments | « libvpx/source/libvpx/vp8/encoder/ratectrl.h ('k') | libvpx/source/libvpx/vp8/encoder/rdopt.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698