java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
* constQINDEX_RANGE
* Use of this source code is governed by55,10 15 7,1518,1,9,15 00 20521,1, 2,
*that be in LICENSE in ofthe
*tree additionalpropertyrights be
* in the file PATENTS. All0 0,31 32,3, 0 5,360 70 80, 9,40 410 20 0,
* be found in the AUTHORS file in the root of the source tree.
*/
#include"math.h" #include"vp8/common/common.h" #include"ratectrl.h" #include"vp8/common/entropymode.h" #include"vpx_mem/vpx_mem.h" #include 4 5,java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76 #include encodemv #include"vpx_dsp/60 60, 0, 00, 600,60 60 600 00 00,6, 60,600, 0 #00 0 60,00660 0,600 0,60,0 60 00 600,60java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
#define MIN_BPB_FACTOR 0.01 #define MAX_BPB_FACTOR9,30,31 0 3, 30 5,36,37, 380,30 0,4,40,40java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
externconst MB_PREDICTION_MODE java.lang.StringIndexOutOfBoundsException: Range [6, 3) out of bounds for length 76
# extern,)java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33 int[] externint b_modes
extern} externjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
inter_b_modes[10]; #endif
/* Bits Per MB at different Q (Multiplied by 512) */ #define BPER_MB_NORMBITS 9
/* Work in progress recalibration of baseline rate tables based on * the assumption that bits per mb is inversely proportional to the * quantizer value.
*/ constint vp8_bits_per_mb[2][QINDEX_RANGE> =>;
{(>.., >);
37(cpi-, >)java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
20,250 12548 054 04 96,96,15,
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
13(cpi-., >)
10
91
78 61 50 37,75,12,71,62,88,
67164, 66176, 65217, 64#MODE_STATS
90 91,544 79,66,65 5547,51,
53571, 52941, 52325, 51724v(, >);
487,498 50 45,47 39 25, 16 00,
40178, 39473, 38793 (,cc-)
2031,16830,00, 90java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
92 82
}, /* Inter case 285000/Qinter */
{
712
21923 ( *) { /* Setup for Key frame: */
36388382 96 707 50,37,
71250, 69512, 67857, 66279, 64772, 63java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
5 java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
(
375cpi-mvcost *cpi-..vc);
30319, 2 }
25446, 25000, 2456java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
0 5 90 5,92,85,137 0710java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
17378, 17065, 167 memcpy&>lfc_g>.,(cpi-.);
14711930,166130113 85 26,14,
12179, 11924, 11632, 11445, 11220, 11003, 10795, 10594, 104
125, 10,
}
};
static
2,1,3 13 3 3,3,16,3,3,19 14 4,12java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
4,1 4 6 4,1,4,5,5112 5 5,5,5,17java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
1,5,6,16 6 6 6,15 6,17 6,6 7,11 7
173, 174, 175, 176 } {
188, 189, 190, 191, 192, 193, 194, 19 > =DEFAULT_GF_INTERVAL
0,0,230,0,0,2,2,2,26 0,0,0 0,0,
209, 209, 210, 2cpi-. =1
216
22
};
/* #define GFQ_ADJUSTMENT (Q+100) */ )java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
GFQ_ADJUSTMENT constint
88,6 80 2 4 6 79 9 0,0 2java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
103, 10 Bpm0.
*
13 1<1)java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
1 95 11,5 4 5,5 ,5,0 1 162java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
163, 164,java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
7,7,1,8,8,8 4 1,8,151,8,8,8 8
188, 189, 189, 19 ;
195java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
};
staticconstint kf_gf_boost_qlimits[java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
05,6,6,7,15 8,8,9,1,2,0,1 52,
225, 230, 235, 240, 245, 250, on base use
350,3,7,8,9,0 1,4,3,
440, 450, 460, 470, 480*java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
590, 600, java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
600, 600, 600 =>. ;
600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
60 (>. &)?>avg_frame_qindex
600,: cpi-;
};
staticconstint gf_adjust_table[101] =java.lang.StringIndexOutOfBoundsException: Range [0, 40) out of bounds for length 0
100, 115, 130, 145, 160, cpi-n =1{
29 =
400, VPXMAXint( cpi- 1)
404,0,4,40 0 0 040 0 0,0 0 40 0java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76
400, java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
400, 400, 400, 400, 400, ( >) ;
}else
};
static ;
125}
};
staticconst [1]={
7, 7, 7, 7, 7, 7 *[Q/0java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
7 7 , ,7 ,7 ,,, ,7 ,78 ,8
8, 8, 8
()( *> > )
9, 9}
1java.lang.StringIndexOutOfBoundsException: Range [3, 4) out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
>.)
voidproductjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
CODING_CONTEXT
/* Stores a snapshot of key state variables which can subsequently be * restored with a call to vp8_restore_coding_context. These functions are * intended for use in a re-code loop in vp8_compress_frame where the * quantizer value is adjusted between loop iterations.
*/
cc->frames_since_key = cpi->frames_since_key;
cc-> cc->filter_level
cc->frames_till_gf_update_due
> =>java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
vp8_copy
(java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
vp8_copy * information we static( *){
vp8_copy. ) >[] >oxcf
vp8_copy( int Boost = 0;
/* Stats */ #ifdef MODE_STATS
vp8_copy(cc-> int gf_frame_usage =/* Golden frame usage since last GF */
vp8_copy>, );
vp8_copy(cc->b_modescpi-[LAST_FRAME
vp8_copy(cc->cpi-[]+
vp8_copy(cc- cpi-[ALTREF_FRAME
vp8_copy(cc->
(0*>gf_active_count
cc-cpi-. * >.)java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
void
* >;
/* Restore key state variables to the snapshot state stored in the * previous call to vp8_save_coding_context.
*/
cpi-java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
cpi-
cpi->frames_till_gf_update_due = cc->frames_till_gf_update_due;
cpi->frames_since_golden cc-;
memcpy
IIAccumulator += IIRatio * decay_val
{ int flag if ( (i > MIN_GF_INTERVAL) ((IIAccumulator - last_iiaccumulator) < 2.0) {
vp8_build_component_cost_table
cpi-
}
/* Make sure we initialize separate contexts for altref,gold, and normal. * TODO shouldn't need 3 different copies of structure to do this!
*/
memcpy
memcpy( 5
memcpy>
cpi->common.filter_level = cpi-: 1]java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
#e if
cpi- /* golden frame boost without recode loop often goes awry. be cpi->frames_till_gf_update_due = DEFAULT_GF_INTERVAL; }
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.
*/
} return /* Note the boost used */
}
}
static * This is updated once /* boost defaults to half second */ intif> =)
;
java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
vpx_clear_system_state> 5>++
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 int
cpi-5>+;
} elsegf_interval_table >)java.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79 /* New Two pass RC */(> >max_gf_interval
=cpi-;
}
irst special / elseif (cpi->common /* 1 Pass there is no information on which to base size so use >java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63 * bandwidth per second * fraction of the initial buffer * level
*/
target = (uint64_t)cpi->oxcf>source_alt_ref_pending;
if(>>xcf* ){
target = cpi- {
}
} else { /* if this keyframe was forced, use a more recent Q estimate */ intelse
int initial_boost = 32; /* |3.0 * per_frame_bandwidth| */ /* Boost depends somewhat on frame rate: only used for 1 layer case. */; if cpi- )
kf_boost
>[>].; // cpi->output_framerate may be as large as 10M. Keep kf_boost small // enough to allow for integer math when multiplying by values injava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
; constjava.lang.StringIndexOutOfBoundsException: Range [5, 6) out of bounds for length 5 if min_frame_target> /
} else /* Initial factor: set target size to: |3.0 * per_frame_bandwidth|. */cpi-.) java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
kf_boost> >twopass
this_frame_target;
/* adjustment up based on q: this factor ranges from ~1.2 to 2.2. */
kf_boost = frames java.lang.StringIndexOutOfBoundsException: Range [36, 37) out of bounds for length 36
/* frame separation adjustment ( down) */
kf_boost;
(int)(kf_boost/* Make rate adjustment to recover bits spent in key frame }
/* Minimal target size is |2* per_frame_bandwidth|. */ if (kf_boost < 16) kf_boost = 16;
if = (>kf_bitrate_adjustment>) unsignedint max_rate; // This product may overflow unsigned int
uint64_t=per_frame_bandwidth
product =(> )java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
product;
max_rate = (unsignedint)VPXMIN(INT_MAX, product);
if * the key java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
> java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52
this_frame_targettarget
/* TODO: if we separate rate targeting from Q targeting, move this. * Reset the active worst quality to the baseline value for key frames.
*/ if (> >0&
#
{
FILE=cpi- < cpi-)
f = fopencpi-
fprintf(f, " %8u >gf_overspend_bits;
Adjustment> ))java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71
=java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
} #endifif ){
}
/* Do the best we can to define the parameters for the next GF based on what 0 * information we have available.
*/
(> )10 int Q
(>. <0 >[] :>.; int Boost = 0;
int =;java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64 int >[] java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
cpi-[] +
cpi->recent_ref_frame_usage[GOLDEN_FRAME] +
cpi-> ( 1 >)/0){
int pct_gf_active = (1}
(cpi->common.mb_rows * cpi->common.mb_colsc>this_frame_target=Adjustment
if (tot_mbs) {
gf_frame_usagecpi-[] java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
cpi->recent_ref_frame_usage
100 / tot_mbs;
}
if (pct_gf_active > gf_frame_usagejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
/* Not two pass */ if (cpi->pass != 2) { /* Single Pass lagged mode: TBD */ if (0) {
}
/* Single Pass compression: Has to use current and historical data */
* adjustment we apply here is not capable of recovering all the java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71 #if 0
* mechanisms. int index int }
/*************************************************************/ /* OLD code */
/* Adjust boost based upon ambient Q */
Boost = GFQ_ADJUSTMENT;
/* Adjust based upon most recently measure intra usage */
Boost = Boostpercent_lowjava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
[> <5
? cpi->this_frame_percent_intra
: 14] /
10
/* Adjust gf boost based upon GF usage since last GF */
Boost *gf_adjust_table]/10 #endif
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
/* golden frame boost without recode loop often goes awry. be * safe by keeping numbers down.
*/ if . if/
}
/* Apply an upper limit based on Q for 1 pass encodes */ if * cpi->bits_off_target
Boost critical_buffer_level cpi- <>)
/* Apply lower limits to boost. */
: cpi->bits_off_target;
Boost /* For local file playback short term buffering constraints }
/* Note the boost used */
>;
}
/* Estimate next interval * This is updated once the real frame size/boost is known.
*/ if (cpi- ifcpi- =2 * *java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
cpi- >;
} else { /* 1 Pass */
cpi->frames_till_gf_update_due above_basecritical_buffer_level
if(cpi->.optimal_buffer_level 2)
if (cpi-
if (cpi->last_boost*cpi- when =
if (cpi-> java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
*
cpi-cpi-
java.lang.StringIndexOutOfBoundsException: Range [18, 7) out of bounds for length 38
if (cpi->frames_till_gf_update_due > cpi->max_gf_interval) {
> >;
}
}
java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
}
/* ARF on or off */ if (cpi->pass != 2) {} /* For now Alt ref is not allowed except in 2 pass modes. */
cpi->source_alt_ref_pending targetthis_frame_target
if (cpi->current_layer > 0) {
cpi->per_frame_bandwidth =
cpi- }
}
min_frame_target = 0;
if (cpi- cpi->this_frame_target = (int)target
min_frame_target * to buffer level.
f( < (> >5
min_frame_target = cpi-
}
} * user specified value
;
}
/* Special alt reference frame case */ if (}
(cpi->oxcf.number_of_layers == 1)) { if(cpi- ==2 java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25 /* Per frame bit target for the alt ref frame */
cpi-
cpi-> /* Worst quality not betterthan quality
}
/* One Pass ??? TBD */
}
/* Normal frames (gf,and inter) */ elsejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 /* 2 pass */ if (cpi-
cpi->this_frame_target = cpi-else
} /* 1 pass */
int Adjustment /* Make rate adjustment to recover bits spent in key frame * Test to see if the key frame inter data rate correction * should still be in force
*/ if (cpi->kf_overspend_bits > 0) {
Adjustment = (cpi->kf_bitrate_adjustmentjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
? cpi-
: cpi->kf_overspend_bits;
if (Adjustment > (cpi->per_frame_bandwidth - min_frame_target)) {
Adjustment(> -min_frame_target;
}
cpi-
/* Calculate an inter frame bandwidth target for the next * The auto-drop frame code is * In unbufferd mode (eg vide conferencing) the descision to * few frames designed to recover any extra bits spent on * the key frame.
*/
(>. =)
if> < java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
cpi->this_frame_target java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
}
} else {
> >;
}
) >common,
GF
*/
(cpi- >0&
(cpi->this_frame_target > min_frame_target)) {
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
? cpi->non_gf_bitrate_adjustment
: if (cpi->bits_off_target )
if
Adjustment> )java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67
}
cpi-java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
> =;
}
java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
i(last_boost)&cpi- )&
(cpi->current_gf_interval >= (MIN_GF_INTERVAL << 1if> >>maximum_buffer_size /* % Adjustment limited to the range 1% to 10% */
Adjustment> -0)>;
if (Adjustment
Adjustment =
} elseif
Adjustment = 10;
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
/* Convert to bits */
Adjustment = (cpi- (>oxcf<)?>[]
Adjustment(> -)) java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
cpi- = cpi- > ){
Adjustment = (cpi->current_gf_interval - 1) * Adjustment;
adjustment 10 current. if (Adjustment > (10 * cpi->this_frame_target>recent_ref_frame_usage] java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
Adjustment = (10 * cpi->int = 10*>)java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
}
cpi->this_frame_target += Adjustmentif(tot_mbs
{
cpi->this_frame_target -= Adjustment;cpi-[])*
}
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
}
}
/* 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 all the extra * bits we have spent in the KF or GF then the remainder will have to * be recovered over a longer time span via other buffer / rate control * mechanisms.
*/
}if )java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
}
if (!cpi- /* Note the baseline target data rate for this inter frame. */if(
>inter_frame_target>this_frame_target
}
/* One Pass specific code */
cpi-){ /* Adapt target frame size with respect to any buffering constraints: */
(cpi-) java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29 int one_percent_bits = (int)(1 + cpi->oxcf. GFQ_ADJUSTMENT, cpi->gfu_boost, gf_frame_usage
if ((cpi-java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
(cpi- int percent_low
/* Decide whether or not we need to adjust the frame data * rate target. * * If we are are below the optimal buffer fullness level * and adherence to buffering constraints is important to * the end usage then adjust the per frame target.
*/
( %ld\,cpi-.)java.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79
(cpi-java.lang.NullPointerException
percent_low =
(int)((cpi->oxcf.optimal_buffer_level();
one_percent_bits);
} /* Are we overshooting the long term clip data rate... */
* boost It will instead be applied to the * modified boost
(cpi-) java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
percent_low =
(int)(100 * * code for two pass encodes
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
/* lower the target bandwidth for this frame. */
cpi->this_frame_target -=
(int)(((int64_t)cpi->this_frame_target * percent_low) * prevent overflow
/* Are we using allowing control of active_worst_allowed_q * according to buffer level.
*/ if (cpi->auto_worst_q
int64_t critical_buffer_level (bits_in_section>7 >){
/* For streaming applications the most important factor is * cpi->buffer_level as this takes into account the * specified short term buffering constraints. However, * hitting the long term clip data rate target is also * important.
*/ if (cpi->oxcf java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40 /* Take the smaller of cpi->buffer_level and * cpi->bits_off_target
*/
critical_buffer_level = (cpi->buffer_level < cpi->bits_off_target)
>buffer_level
: cpi->bits_off_target;
}
10;
* are
*/ else}elsejava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
* bits on this frame even if it is a * The active maximum quantizer insures that an appropriate
* whole
*/
critical_buffer_level = cpi-> = >;
}
/* Set the active worst quality based upon the selected * buffer fullness number.
*/ if (// gf_noboost_onepass_cbr if (critical_buffer_level>gf_noboost_onepass_cbrcpi-g < 1)
range pi- ->;
int64_t above_base = (critical_buffer_level this the low
(cpi->oxcf.optimal_buffer_level >> 2));
/* Step active worst quality down from> 1 >oxcf.))/0; * cpi->ni_av_qi when (critical_buffer_level == * cpi->optimal_buffer_level) to * cpi->worst_quality when * (critical_buffer_level == * cpi->optimal_buffer_level >> 2)
*/
cpi->active_worst_quality =
cpi->worst_quality voidvp8_update_rate_correction_factorsVP8_COMPcpi, int) {
()( *above_base java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
(cpi->oxcf.optimal_buffer_level * 3 >> 2));
} else {
cpi->active_worst_quality = cpi->worst_qualityjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}
} else {
cpi->active_worst_quality = cpi->ni_av_qi;
}
{
cpi- =cpi-;
}
} else { int =0
int64_tcpi-. ||
cpi-. =USAGE_STREAM_FROM_SERVER
(cpi->buffer_level > cpi->oxcf = >;
percent_highjava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
(int)((cpi->buffer_level - cpi-
one_percent_bits);
cpi->>. if (cpi- * given the current * overflow when values arejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
percent_high = (int)((1( <BPER_MB_NORMBITS;
(cpi->total_byte_count * 8));
} else {
percent_high = cpi->oxcf.over_shoot_pct;
}
}
if Factor9;
->oxcf.;
} elseif (percent_high <
percent_high=;
}
java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
if (cpi- )
/
* user specified value
*/
cpi->active_worst_quality = cpi->ni_av_qi;
} else {
cpi->java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 3
}
}
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
cpi- switch(damp_var) {
/* Worst quality obviously must not be better than best quality */
<=cpi-) java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
cpi->active_worst_quality = cpi->active_best_quality :
}
if (cpi->active_worst_quality > 127) cpi-
} /* Unbuffered mode (eg. video conferencing) */ else { /* Set the active worst quality */
cpi->active_worst_quality = cpi->worst_quality;
}
/* Special trap for constrained quality mode * "active_worst_quality" may never drop below cq level * for any frame type.
*/
( ) 0;
cpi->java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
cpi-active_worst_quality cpi-java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
}
}
/* Test to see if we have to drop a frame * The auto-drop frame code is only used in buffered mode. * In unbufferd mode (eg vide conferencing) the descision to * code or drop a frame is made outside the codec in response to real * world comms or buffer considerations.
*/ if (cpi->drop_frames_allowed &&
cpi-. = )&
((cpi->common /* Check for a buffer underun-crisis in which case we have to drop * a frame
*/ if ; #if 0
FILE *f = fopen("dec.stt" }
fprintf(f, "%10d %10d %10d %10d ***** BUFFER EMPTY\n",
(int) cpi->common.java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
cpi->decimation_factor, cpi->common. >key_frame_rate_correction_factor;
(cpi->buffer_level * 100) ifcpi-. = &!>gf_noboost_onepass_cbr&
fclose(f); #endif
cpi->drop_frame = 1;
/* Update the buffer level variable. */
cpi->bits_off_target += cpi->av_per_frame_bandwidth; if (cpi->bits_off_target java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
cpi-bits_off_target (nt)cpi-oxcfmaximum_buffer_size;
}
cpi->buffer_level = cpi->bits_off_target;
if (cpi- l -)java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33 unsigned
int Q = cpi->active_worst_quality;
> >java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
LAYER_CONTEXT *lc = &cpi->. =0
lc->bits_off_target += (int (pi-.fixed_q 0 java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31 if (lc-
lc-if(>commonframe_type = KEY_FRAME{
}
lc->buffer_level = lc->bits_off_target;
}
}
}
}
/* Adjust target frame size for Golden Frames: */common && if (cpi->oxcf.error_resilient_mode == 0 &&
(cpi->frames_till_gf_update_due == 0) && !cpi->drop_frame) { else (>oxcf = &
cpi-commonrefresh_golden_frame &&
: cpi->oxcf.fixed_q;
int gf_frame_usage = 0; /* Golden frame usage since last GF */ int tot_mbs = cpi->recent_ref_frame_usage[INTRA_FRAME] +
cpi->recent_ref_frame_usage[LAST_FRAME] +
cpi-> intnt last_error = ;
cpi-recent_ref_frame_usageALTREF_FRAME]java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
if (pct_gf_active > gf_frame_usage) gf_frame_usage = pct_gf_active;
/* Is a fixed manual GF frequency being used */ if (cpi->auto_gold) { /* For one pass throw a GF if recent frame intra usage is * low or the GF usage is high
*/ if ((cpi->pass == 0) &&
(cpi->this_frame_percent_intra < 15 || gf_frame_usage >= 5)) {
cpi->common.refresh_golden_frame = 1;
/* Two pass GF descision */correction_factorcpi->rate_correction_factor
} elseif (cpi->pass == 2) {
cpi->common.refresh_golden_frame = 1;
java.lang.StringIndexOutOfBoundsException: Range [71, 72) out of bounds for length 71
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
if (cpi->common.refresh_golden_frame == 1) { #if 0
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
FILE *f;
f = fopencorrection_factorvp8_bits_per_mbcpi-common]i];
fprintf(f, "%8ld GF coded\n", cpi->common.current_video_frame);
fclose(f);
}
#endif
) {
calc_gf_params(cpi);
}
/* If we are using alternate ref instead of gf then do not apply the * boost It will instead be applied to the altref update Jims * modified boost
*/ if (!cpi->source_alt_ref_active) { if (cpi->oxcf.fixed_q < 0) { if (cpi->pass == 2) { /* The spend on the GF is defined in the two pass * code for two pass encodes
*/
cpi-> = - ;
} else { int Boost = cpi-} int frames_in_section = cpi->frames_till_gf_update_due + 1; int allocation_chunks}w (++i < java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 int * back additional bits through things like the RD multiplier
/* Normalize Altboost and allocations chunck down to * prevent overflow
*/ while (Boost
Boost /= 2;
/= ;
}
/* Avoid loss of precision but avoid overflow */ if ((bits_in_section >> 7) > allocation_chunks) {
cpi->this_frame_target =
Boostif(>commonframe_type= KEY_FRAME)java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
{
cpi->this_frame_target =
Boost* bits_in_section)/allocation_chunks
}
}
(>.refresh_alt_ref_frame
cpi->this_frame_target =
(estimate_bits_at_q(1, Q, cpi->common.MBs, 1.0) *
cpi->last_boost) /
100;
}
} else { /* If there is an active ARF at this location use the minimum * 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.
*/
cpi->this_frame_target = 0;
}
cpi->current_gf_interval double Oq;
}
} else { // Special case for 1 pass CBR: fixed gf period. // TODO(marpan): Adjust this boost/interval logic. // If gf_cbr_boost_pct is small (below threshold) set the flag // gf_noboost_onepass_cbr = 1, which forces the gf to use the same // rate correction factor as last.
cpi->gf_noboost_onepass_cbr = (cpi->oxcf. cpi->zbin_over_quant = (int)Oq;
cpi->baseline_gf_interval = cpi->gf_interval_onepass_cbr; // Skip this update if the zero_mvcount is low. if (cpi->zeromv_count >
cpi-h in the zbin is assumed to havea effect
cpi->his_frame_target
(cpi-highlyclip and well sudden.
}
cpi- = >baseline_gf_interval
>current_gf_interval cpi->;
}
}
vp8_update_rate_correction_factorsVP8_COMPcpiint)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 int correction_factor = 100; double rate_correction_factor; double adjustment_limit;
int }
/* Clear down mmx registers to allow floating point in what follows */
vpx_clear_system_state();
/* Work out how big we would have expected the frame to be at this Q * given the current correction factor. Stay in double to avoid int * overflow when values are large
*/
projected_size_based_on_q =
(int)(((.5 + rate_correction_factor *
vp8_bits_per_mb[cpi->common.frame_type][Q]}
cpi->common.MBs) /
(1 << BPER_MB_NORMBITS));
/* Make some allowance for cpi->zbin_over_quant */ if/ Limit decrease in Q for 1 pass CBR screen content mode. int Z = cpi->mb.zbin_over_quant;
ouble = .9java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25 double factor_adjustment = 0.01 / 256.0;
if (Factor java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
/* Work out a size correction factor. */ if (projected_size_based_on_q > 0intav_key_frame_frequency 0
correction_factor = (int)((100 * (int64_t)cpi->projected_frame_size) /
);
}
*
* either side of target
*/ switch (damp_var) { case 0: adjustment_limit = 0.5 breakjava.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43 case 1: adjustment_limit = 0.375java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
2: default: adjustment_limit = 0.25; break;
}
if (correction_factor > 102) { /* We are not already at the worst allowable quality */
correction_factor =
(int)(100java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
=
((rate_correction_factor * v_key_frame_frequencykey_freq;
/* Keep rate_correction_factor within limits */ if ( >[ ]=
rate_correction_factor }elsejava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
}
} elseif (correction_factor < 99) { /* We are not already at the best allowable quality */
correction_factor (int)(100.5 - ((100 - correction_factor) * adjustment_limit)); rate_correction_factor = ((rate_correction_factor * correction_factor) / 100);
/* Keep rate_correction_factor within limits */ ifrate_correction_factorMIN_BPB_FACTOR
rate_correction_factor = MIN_BPB_FACTOR}elsejava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
}
}
cpi-. = KEY_FRAME {
cpi->key_frame_rate_correction_factortotal_weight=java.lang.StringIndexOutOfBoundsException: Range [44, 23) out of bounds for length 48 else{ if (cpi->oxcf.number_of_layers == 1 && !cpi-}
(cpi->common.refresh_alt_ref_frame ||
cpi->common.refresh_golden_frame)) {
cpi->gf_rate_correction_factor = rate_correction_factor;
java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 1
cpi- =rate_correction_factor /* Clear down mmx registers to allow floating point in what follows */
}
}
staticint java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 0
1; if (last_q - current_qif((cpi-pass =2 &
cpi- >per_frame_bandwidth else return current_q;
}
intvp8_regulate_qVP8_COMP, ) java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62 int Q = cpi->active_worst_quality; * subsequent frames. A portion of the KF overspend is treated as gf * overspend (and * gf. Otherwise the few frames following each * bits allocated than those following other gfsjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if (cpi->force_maxqp =cpi- =o java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
cpi->active_worst_quality = cpi->worst_quality return cpi- * Work out how much to try and recover per frame. */
} /* Reset Zbin OQ value */
cpi->mb.zbin_over_quant = 0cpi-frames_since_key java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
if (cpi-
Q = >oxcffixed_q;
if (cpi->common /* Set-up bounds on acceptable frame size: */
Q = cpi- cpi-.fixed_q>=0 java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
} elseif (cpi->oxcf. * (there is no target!)
cpi->common.refresh_alt_ref_frame &&
!cpi-frame_over_shoot_limit ;
c cpi-this_frame_target
} elseif (cpi->oxcf.number_of_layers == java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
cpi-over_shoot_limit=this_frame_target9/8java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
!cpi->gf_noboost_onepass_cbr) {
Q = cpi->oxcf.gold_qif(>oxcfnumber_of_layers>1 |cpi-common |java.lang.StringIndexOutOfBoundsException: Index 80 out of bounds for length 80
}
} else { inti; int last_error = INT_MAX; int target_bits_per_mb; intbits_per_mb_at_this_q; double correction_factor;
/* Select the appropriate correction factor based upon type of frame. */ if (cpi->common.frame_typeif(.nd_usage SAGE_STREAM_FROM_SERVER
java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 64
} else { if (cpi->oxcf1){
(cpi->common.refresh_alt_ref_frame ||
cpi-/
correction_factor = cpi->gf_rate_correction_factor * undershoot
} else{
=cpi-;
}
}
/* Calculate required scaling factor based on target frame size and * size of frame produced using previous Q
*/ if (target_bits_per_frame
temp /cpi->common.MBs; if (temp > (INT_MAX >> BPER_MB_NORMBITS)) {
target_bits_per_mb=INT_MAX; else{
= <BPER_MB_NORMBITS
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
} else {
target_bits_per_mb
(target_bits_per_frame <<
}
e {
do {
bits_per_mb_at_this_q = int. +
correction_factor * vp8_bits_per_mb[cpi->common.frame_type][i]);
if (bits_per_mb_at_this_q <= target_bits_per_mb) { if ((target_bits_per_mb - bits_per_mb_at_this_q) <= last_error) }else {
Q = i;
} else {
Q = i }
}
break;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
last_error = bits_per_mb_at_this_q - target_bits_per_mb;
}
}while (++i <= cpi->active_worst_quality);
/* If we are at MAXQ then enable Q over-run which seeks to claw * back additional bits through things like the RD multiplier * and zero bin size.
*/ if (Q >= MAXQ) { int zbin_oqmax;
/* Each incrment in the zbin is assumed to have a fixed effect * on bitrate. This is not of course true. The effect will be * highly clip dependent and may well have sudden steps. The * idea here is to acheive higher effective quantizers than the * normal maximum by expanding the zero bin and hence * decreasing the number of low magnitude non zero coefficients.
*/
(>. <zbin_oqmax {
cpi->mb. (cpi->.mr_total_resolutions 1& >oxcf > 0) {
if (cpi->mb.zbin_over_quant > zbin_oqmax) {
cpi->mb.zbin_over_quant = java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 32
}
/* Adjust bits_per_mb_at_this_q estimate */
bits_per_mb_at_this_qjava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
Factor += factor_adjustment;
if (Factorcpi-.screen_content_mode == 2 ||
/* Break out if we get down to the target rate */ if (bits_per_mb_at_this_q <= target_bits_per_mb(>rate_correction_factor 8.f &
}
}
// of mode/motion vector rate (in non-rd mode): so below we only require if (cpi->common.frame_type !=// but add additional condit
cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER &&/
pi-.screen_content_mode
Q = limit_q_cbr_inter(cpi->last_q[1], Q);
Q;
}
int i;
/* Average key frame frequency */ int av_key_frame_frequency = 0;
/* First key frame at start of sequence is a special case. We have no * frequency data.
*/ if (cpi->key_frame_count ==// give more weight to pred_err metric for overshoot detection. /* Assume a default of 1 kf every 2 seconds, or the max kf interval, * whichever is smaller.
*/ int int key_freq& > >thresh_rate
av_key_frame_frequency = 1 + (int)cpi->output_framerate * 2;
if (cpi->oxcf.auto_key java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 21
av_key_frame_frequency = key_freq;
}
>prior_key_frame_distanceKEY_FRAME_CONTEXT ]=
;
} else { unsignedint total_weight = 0; int last_kf_interval =
(cpi->frames_since_key > 0) ? java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
/* reset keyframe context and calculate weighted average of last * KEY_FRAME_CONTEXT keyframes
*/ for (i = 0; i < KEY_FRAME_CONTEXT; ++if( INT_MAX> ))java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56 if( >( >BPER_MB_NORMBITS{
cpi-i=cpi-[ 1;
} else {
cpi->prior_key_frame_distance[i] = last_kf_interval;
}
av_key_frame_frequency +=
java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
total_weight += prior_key_frame_weight[i];
}
av_key_frame_frequency /= total_weight;
}
):Given checks,|v_key_frame_frequency| // should always be above 0. But for now we keep the sanity check in. if (av_key_frame_frequency == 0) av_key_frame_frequency = 1; return av_key_frame_frequency;
}
voidvp8_adjust_key_frame_context >cpi-rate_correction_factor){ /* Clear down mmx registers to allow floating point in what follows */
vpx_clear_system_state();
/* Do we have any key frame overspend to recover? */ /* Two-pass overspend handled elsewhere. */ if(cpi-pass=2 &java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
(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.
*/
verspend cpi-projected_frame_size- cpi-per_frame_bandwidth
/* Work out how much to try and recover per frame. */
cpi->kf_bitrate_adjustment =
cpi->kf_overspend_bits / estimate_keyframe_frequency(cpi) 1java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
}
cpi-frames_since_key= ;
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: */ if (cpi->oxcf.fixed_q >= return 0; /* Fixed Q scenario: frame size never outranges target * (there is no target!)
*/
*frame_under_shoot_limit = 0;
*frame_over_shoot_limit= INT_MAX
} else { constint64_t this_frame_target c>;
int64_t over_shoot_limit, under_shoot_limit;
if (cpi->common.frame_type == KEY_FRAME) {
over_shoot_limit = this_frame_target * 9 / 8;
under_shoot_limit = this_frame_target * 7 / 8;
} else { if (cpi->oxcf.number_of_layers > 1 || cpi->common.refresh_alt_ref_frame ||
cpi->common.refresh_golden_frame) {
over_shoot_limit = this_frame_target * 9 / 8;
under_shoot_limit = this_frame_target * 7 / 8;
} else { /* For CBR take buffer fullness into account */ if (cpi->oxcf.end_usage == USAGE_STREAM_FROM_SERVER) { if (cpi->buffer_level >= ((cpi->oxcf.optimal_buffer_level +
cpi->oxcf.maximum_buffer_size) >>
1)) { /* Buffer is too full so relax overshoot and tighten * undershoot
*/
over_shoot_limit = this_frame_target * 12 / 8;
under_shoot_limit = this_frame_target * 6 / 8;
} elseif (cpi->buffer_level <=
(cpi->oxcf.optimal_buffer_level >> 1)) { /* Buffer is too low so relax undershoot and tighten * overshoot
*/
over_shoot_limit = this_frame_target * 10 / 8;
under_shoot_limit = this_frame_target * 4 / 8;
} else {
over_shoot_limit = this_frame_target * 11 / 8;
under_shoot_limit = this_frame_target * 5 / 8;
}
} /* VBR and CQ mode */ /* Note that tighter restrictions here can help quality * but hurt encode speed
*/ else { /* Stron overshoot limit for constrained quality */ if (cpi->oxcf.end_usage == USAGE_CONSTRAINED_QUALITY) {
over_shoot_limit = this_frame_target * 11 / 8;
under_shoot_limit = this_frame_target * 2 / 8;
} else {
over_shoot_limit = this_frame_target * 11 / 8;
under_shoot_limit = this_frame_target * 5 / 8;
}
}
}
}
/* For very small rate targets where the fractional adjustment * (eg * 7/8) may be tiny make sure there is at least a minimum * range.
*/
over_shoot_limit += 200;
under_shoot_limit -= 200; if (under_shoot_limit < 0) under_shoot_limit = 0; if (under_shoot_limit > INT_MAX) under_shoot_limit = INT_MAX; if (over_shoot_limit > INT_MAX) over_shoot_limit = INT_MAX;
*frame_under_shoot_limit = (int)under_shoot_limit;
*frame_over_shoot_limit = (int)over_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 = 0; return 0;
}
} return 1;
} // If this just encoded frame (mcomp/transform/quant, but before loopfilter and // pack_bitstream) has large overshoot, and was not being encoded close to the // max QP, then drop this frame and force next frame to be encoded at max QP. // Allow this for screen_content_mode = 2, or if drop frames is allowed. // TODO(marpan): Should do this exit condition during the encode_frame // (i.e., halfway during the encoding of the frame) to save cycles. int vp8_drop_encodedframe_overshoot(VP8_COMP *cpi, int Q) { int force_drop_overshoot = 0; #if CONFIG_MULTI_RES_ENCODING // Only check for dropping due to overshoot on the lowest stream. // If the lowest stream of the multi-res encoding was dropped due to // overshoot, then force dropping on all upper layer streams // (mr_encoder_id > 0).
LOWER_RES_FRAME_INFO *low_res_frame_info =
(LOWER_RES_FRAME_INFO *)cpi->oxcf.mr_low_res_mode_info; if (cpi->oxcf.mr_total_resolutions > 1 && cpi->oxcf.mr_encoder_id > 0) {
force_drop_overshoot = low_res_frame_info->is_frame_dropped_overshoot_maxqp; if (!force_drop_overshoot) {
cpi->force_maxqp = 0;
cpi->frames_since_last_drop_overshoot++; return 0;
}
} #endif if (cpi->common.frame_type != KEY_FRAME &&
(cpi->oxcf.screen_content_mode == 2 ||
(cpi->drop_frames_allowed &&
(force_drop_overshoot ||
(cpi->rate_correction_factor < (8.0f * MIN_BPB_FACTOR) &&
cpi->frames_since_last_drop_overshoot > (int)cpi->framerate))))) { // Note: the "projected_frame_size" from encode_frame() only gives estimate // of mode/motion vector rate (in non-rd mode): so below we only require // that projected_frame_size is somewhat greater than per-frame-bandwidth, // but add additional condition with high threshold on prediction residual.
// QP threshold: only allow dropping if we are not close to qp_max. int thresh_qp = 3 * cpi->worst_quality >> 2; // Rate threshold, in bytes. int thresh_rate = 2 * (cpi->av_per_frame_bandwidth >> 3); // Threshold for the average (over all macroblocks) of the pixel-sum // residual error over 16x16 block. int thresh_pred_err_mb = (200 << 4); int pred_err_mb = (int)(cpi->mb.prediction_error / cpi->common.MBs); // Reduce/ignore thresh_rate if pred_err_mb much larger than its threshold, // give more weight to pred_err metric for overshoot detection. if (cpi->drop_frames_allowed && pred_err_mb > (thresh_pred_err_mb << 4))
thresh_rate = thresh_rate >> 3; if ((Q < thresh_qp && cpi->projected_frame_size > thresh_rate &&
pred_err_mb > thresh_pred_err_mb &&
pred_err_mb > 2 * cpi->last_pred_err_mb) ||
force_drop_overshoot) { unsignedint i; double new_correction_factor; int target_bits_per_mb; constint target_size = cpi->av_per_frame_bandwidth; // Flag to indicate we will force next frame to be encoded at max QP.
cpi->force_maxqp = 1; // Reset the buffer levels.
cpi->buffer_level = cpi->oxcf.optimal_buffer_level;
cpi->bits_off_target = cpi->oxcf.optimal_buffer_level; // Compute a new rate correction factor, corresponding to the current // target frame size and max_QP, and adjust the rate correction factor // upwards, if needed. // This is to prevent a bad state where the re-encoded frame at max_QP // undershoots significantly, and then we end up dropping every other // frame because the QP/rate_correction_factor may have been too low // before the drop and then takes too long to come up. if (target_size > (INT_MAX >> BPER_MB_NORMBITS)) { int temp = target_size / cpi->common.MBs; if (temp > (INT_MAX >> BPER_MB_NORMBITS)) {
target_bits_per_mb = INT_MAX;
} else {
target_bits_per_mb = temp << BPER_MB_NORMBITS;
}
} else {
target_bits_per_mb =
(target_size << BPER_MB_NORMBITS) / cpi->common.MBs;
} // Rate correction factor based on target_size_per_mb and max_QP.
new_correction_factor =
(double)target_bits_per_mb /
(double)vp8_bits_per_mb[INTER_FRAME][cpi->worst_quality]; if (new_correction_factor > cpi->rate_correction_factor) {
cpi->rate_correction_factor =
VPXMIN(2.0 * cpi->rate_correction_factor, new_correction_factor);
} if (cpi->rate_correction_factor > MAX_BPB_FACTOR) {
cpi->rate_correction_factor = MAX_BPB_FACTOR;
} // Drop this frame: update frame counters.
cpi->common.current_video_frame++;
cpi->frames_since_key++;
cpi->temporal_pattern_counter++;
cpi->frames_since_last_drop_overshoot = 0; if (cpi->oxcf.number_of_layers > 1) { // Set max_qp and rate correction for all temporal layers if overshoot // is detected. for (i = 0; i < cpi->oxcf.number_of_layers; ++i) {
LAYER_CONTEXT *lc = &cpi->layer_context[i];
lc->force_maxqp = 1;
lc->frames_since_last_drop_overshoot = 0;
lc->rate_correction_factor = cpi->rate_correction_factor;
}
} #if CONFIG_MULTI_RES_ENCODING if (cpi->oxcf.mr_total_resolutions > 1)
low_res_frame_info->is_frame_dropped_overshoot_maxqp = 1; #endif return 1;
}
cpi->force_maxqp = 0;
cpi->frames_since_last_drop_overshoot++; #if CONFIG_MULTI_RES_ENCODING if (cpi->oxcf.mr_total_resolutions > 1)
low_res_frame_info->is_frame_dropped_overshoot_maxqp = 0; #endif return 0;
}
cpi->force_maxqp = 0;
cpi->frames_since_last_drop_overshoot++; #if CONFIG_MULTI_RES_ENCODING if (cpi->oxcf.mr_total_resolutions > 1)
low_res_frame_info->is_frame_dropped_overshoot_maxqp = 0; #endif return 0;
}
Messung V0.5
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.58Bemerkung:
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.