# HG changeset patch # User kmkaplan # Date 1032312752 0 # Node ID ef1daba63c30ddaa5a3b60e4526b59b0d6077c40 # Parent c7a9bcecba076e3d65fa92afefd855d7828c70c5 Sync with upstream version. According to Edouard Gomez: - better defaults for some vbr_state_t attributes. - twopass_max_bitrate has been set to much higher default, so nasty blocking effects during scene changes and/or high motion scenes is no more. diff -r c7a9bcecba07 -r ef1daba63c30 xvid_vbr.c --- a/xvid_vbr.c Wed Sep 18 01:22:03 2002 +0000 +++ b/xvid_vbr.c Wed Sep 18 01:32:32 2002 +0000 @@ -47,9 +47,9 @@ #define DEFAULT_DESIRED_SIZE 700 #define DEFAULT_AUDIO_BITRATE 128 #define DEFAULT_MOVIE_LENGTH 2 -#define DEFAULT_TWOPASS_BOOST 150 +#define DEFAULT_TWOPASS_BOOST 1000 #define DEFAULT_FPS 25.0f -#define DEFAULT_CREDITS_SIZE 10 +#define DEFAULT_CREDITS_SIZE 0 #define DEFAULT_XVID_DBG_FILE "xvid.dbg" #define DEFAULT_XVID_STATS_FILE "xvid.stats" @@ -160,9 +160,13 @@ /* Default statistic filename */ state->filename = DEFAULT_XVID_STATS_FILE; - /* Default is a 2hour movie on 700Mo CD-ROM + 128kbit sound track */ + /* + * Default is a 2hour movie on 700Mo CD-ROM + 128kbit sound track + * This represents a target bitrate of 687kbit/s + */ state->desired_size = DEFAULT_DESIRED_SIZE*1024*1024 - DEFAULT_MOVIE_LENGTH*3600*DEFAULT_AUDIO_BITRATE*1000/8; + state->desired_bitrate = state->desired_size*8/(DEFAULT_MOVIE_LENGTH*3600); /* Credits */ state->credits_mode = VBR_CREDITS_MODE_RATE; @@ -182,7 +186,7 @@ /* Keyframe boost */ state->keyframe_boost = 0; state->kftreshold = 10; - state->kfreduction = 20; + state->kfreduction = 30; state->min_key_interval = 1; state->max_key_interval = (int)DEFAULT_FPS*10; @@ -202,13 +206,13 @@ state->alt_curve_bonus_bias = 50; state->bitrate_payback_method = VBR_PAYBACK_BIAS; state->bitrate_payback_delay = 250; - state->twopass_max_bitrate = state->desired_size*8 / (120*60); + state->twopass_max_bitrate = DEFAULT_TWOPASS_BOOST*state->desired_bitrate; state->twopass_max_overflow_improvement = 60; state->twopass_max_overflow_degradation = 60; state->max_iquant = 31; - state->min_iquant = 1; + state->min_iquant = 2; state->max_pquant = 31; - state->min_pquant = 1; + state->min_pquant = 2; state->fixed_quant = 3; state->max_framesize = (1.0/(float)DEFAULT_FPS) * state->twopass_max_bitrate / 8; @@ -252,7 +256,6 @@ if(state->debug_file == NULL) return(-1); - setvbuf(state->debug_file, NULL, _IOLBF, 0); fprintf(state->debug_file, "# XviD Debug output\n"); fprintf(state->debug_file, "# quant | intra | header bytes" "| total bytes | kblocks | mblocks | ublocks" @@ -1117,12 +1120,13 @@ state->curve_comp_error = 0.0; state->last_quant = 0; - /* Two pass maximum boost computed from frame mean */ - state->twopass_max_bitrate = DEFAULT_TWOPASS_BOOST/100.0 * - state->average_frame * state->fps * 8; - - state->max_framesize = state->average_frame * - DEFAULT_TWOPASS_BOOST/100.0; + /* + * Above this frame size limit, normal vbr rules will not apply + * This means : + * 1 - Quant can de/increase more than -/+2 between 2 frames + * 2 - Leads to artifacts because of 1 + */ + state->max_framesize = state->twopass_max_bitrate/state->fps; /* Get back to the beginning of frame statistics */ fseek(state->pass1_file, pos_firstframe, SEEK_SET); diff -r c7a9bcecba07 -r ef1daba63c30 xvid_vbr.h --- a/xvid_vbr.h Wed Sep 18 01:22:03 2002 +0000 +++ b/xvid_vbr.h Wed Sep 18 01:32:32 2002 +0000 @@ -117,13 +117,13 @@ int alt_curve_bonus_bias; int bitrate_payback_method; int bitrate_payback_delay; - int twopass_max_bitrate; - int twopass_max_overflow_improvement; - int twopass_max_overflow_degradation; int max_iquant; int min_iquant; int max_pquant; int min_pquant; + int twopass_max_bitrate; + int twopass_max_overflow_improvement; + int twopass_max_overflow_degradation; /* * For VBR_MODE_FIXED_QUANT - the quantizer that has to be used for all