Index: libmpcodecs/ve_xvid.c =================================================================== RCS file: /cvsroot/mplayer/main/libmpcodecs/ve_xvid.c,v retrieving revision 1.2 diff -u -r1.2 ve_xvid.c --- libmpcodecs/ve_xvid.c 21 Sep 2002 13:09:57 -0000 1.2 +++ libmpcodecs/ve_xvid.c 29 Oct 2002 00:00:43 -0000 @@ -68,7 +68,7 @@ int fixed_quant; } xvidenc_param = { sizeof(divx4_motion_presets) / sizeof(divx4_motion_presets[0]) - 1, /* quality */ - 0, 0, 0, 0, 0, 0, 0, + 0, -1, -1, -1, 0, 0, -1, XVID_MODE_CBR, 1, /* debug */ NULL, /* stats_file */ @@ -100,12 +100,12 @@ { "rc_reaction_delay_factor", &xvidenc_param.rc_reaction_delay_factor, CONF_TYPE_INT, 0, 0, NULL}, { "rc_averaging_period", &xvidenc_param.rc_averaging_period, CONF_TYPE_INT, 0, 0, NULL}, { "rc_buffer", &xvidenc_param.rc_buffer, CONF_TYPE_INT, 0, 0, NULL}, - { "max_quantizer", &xvidenc_param.max_quantizer, CONF_TYPE_INT, 0, 0, NULL}, - { "min_quantizer", &xvidenc_param.max_quantizer, CONF_TYPE_INT, 0, 0, NULL}, + { "max_quantizer", &xvidenc_param.max_quantizer, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL}, + { "min_quantizer", &xvidenc_param.min_quantizer, CONF_TYPE_INT, CONF_RANGE, 1, 31, NULL}, { "max_key_interval", &xvidenc_param.max_key_interval, CONF_TYPE_INT, 0, 0, NULL}, { "nodebug", &xvidenc_param.debug, CONF_TYPE_FLAG, 0, 0, 0, NULL}, { "debug", &xvidenc_param.debug, CONF_TYPE_FLAG, 0, 0, 1, NULL}, - { "statsfile", &xvidenc_param.stats_file, CONF_TYPE_STRING, 0, 0, 0, NULL}, /* for XVID_MODE_2PASS_1/22 */ + { "statsfile", &xvidenc_param.stats_file, CONF_TYPE_STRING, 0, 0, 0, NULL}, /* for XVID_MODE_2PASS_1/2 */ { "keyframe_boost", &xvidenc_param.keyframe_boost, CONF_TYPE_INT, 0, 0, 0, NULL}, /* for XVID_MODE_2PASS_2 */ { "kfthreshold", &xvidenc_param.kfthreshold, CONF_TYPE_INT, 0, 0, 0, NULL}, /* for XVID_MODE_2PASS_2 */ { "kfreduction", &xvidenc_param.kfreduction, CONF_TYPE_INT, 0, 0, 0, NULL}, /* for XVID_MODE_2PASS_2 */ @@ -133,6 +133,104 @@ return vf->priv->hintfile; } +static void xvid_print_vbr(vbr_control_t *state) +{ + + fprintf(stderr, "\t============| XviD VBR settings |============\n"); + fprintf(stderr, "\tmode : %d\n", + state->mode); + fprintf(stderr, "\tfps : %f\n", + state->fps); + fprintf(stderr, "\tdebug : %d\n", + state->debug); + fprintf(stderr, "\tdesired_bitrate : %d\n", + state->desired_bitrate); + fprintf(stderr, "\tcredits_mod = %d\n", + state->credits_mode); + fprintf(stderr, "\tcredits_start = %d\n", + state->credits_start); + fprintf(stderr, "\tcredits_start_begin = %d\n", + state->credits_start_begin); + fprintf(stderr, "\tcredits_start_end = %d\n", + state->credits_start_end); + fprintf(stderr, "\tcredits_end = %d\n", + state->credits_end); + fprintf(stderr, "\tcredits_end_begin = %d\n", + state->credits_end_begin); + fprintf(stderr, "\tcredits_end_end = %d\n", + state->credits_end_end); + fprintf(stderr, "\tcredits_quant_ratio = %d\n", + state->credits_quant_ratio); + fprintf(stderr, "\tcredits_fixed_quant = %d\n", + state->credits_fixed_quant); + fprintf(stderr, "\tcredits_quant_i = %d\n", + state->credits_quant_i); + fprintf(stderr, "\tcredits_quant_p = %d\n", + state->credits_quant_p); + fprintf(stderr, "\tcredits_start_size = %d\n", + state->credits_start_size); + fprintf(stderr, "\tcredits_end_size = %d\n", + state->credits_end_size); + fprintf(stderr, "\tkeyframe_boost = %d\n", + state->keyframe_boost); + fprintf(stderr, "\tkftreshold = %d\n", + state->kftreshold); + fprintf(stderr, "\tkfreduction = %d\n", + state->kfreduction); + fprintf(stderr, "\tmin_key_interval = %d\n", + state->min_key_interval); + fprintf(stderr, "\tmax_key_interval = %d\n", + state->max_key_interval); + fprintf(stderr, "\tcurve_comp_high = %d\n", + state->curve_compression_high); + fprintf(stderr, "\tcurve_comp_low = %d\n", + state->curve_compression_low); + fprintf(stderr, "\tuse_alt_curve = %d\n", + state->use_alt_curve); + fprintf(stderr, "\talt_curve_type = %d\n", + state->alt_curve_type); + fprintf(stderr, "\talt_curve_low_dist = %d\n", + state->alt_curve_low_dist); + fprintf(stderr, "\talt_curve_high_dist = %d\n", + state->alt_curve_high_dist); + fprintf(stderr, "\talt_curve_min_rel_qual = %d\n", + state->alt_curve_min_rel_qual); + fprintf(stderr, "\talt_curve_use_auto = %d\n", + state->alt_curve_use_auto); + fprintf(stderr, "\talt_curve_auto_str = %d\n", + state->alt_curve_auto_str); + fprintf(stderr, "\talt_curve_use_auto_bonus_bias = %d\n", + state->alt_curve_use_auto_bonus_bias); + fprintf(stderr, "\talt_curve_bonus_bias = %d\n", + state->alt_curve_bonus_bias); + fprintf(stderr, "\tbitrate_payback_method = %d\n", + state->bitrate_payback_method); + fprintf(stderr, "\tbitrate_payback_delay = %d\n", + state->bitrate_payback_delay); + fprintf(stderr, "\ttwopass_max_bitrate = %d\n", + state->twopass_max_bitrate); + fprintf(stderr, "\ttwopass_max_overflow_improvement = %d\n", + state->twopass_max_overflow_improvement); + fprintf(stderr, "\ttwopass_max_overflow_degradation = %d\n", + state->twopass_max_overflow_degradation); + fprintf(stderr, "\tmax_iquant = %d\n", + state->max_iquant); + fprintf(stderr, "\tmin_iquant = %d\n", + state->min_iquant); + fprintf(stderr, "\tmax_pquant = %d\n", + state->max_pquant); + fprintf(stderr, "\tmin_pquant = %d\n", + state->min_pquant); + fprintf(stderr, "\tfixed_quant = %d\n", + state->fixed_quant); + fprintf(stderr, "\tdesired_size = %d\n", + state->desired_size); + fprintf(stderr, + "\t============| End of XviD VBR settings |============\n"); + +} + + static int config(struct vf_instance_s* vf, int width, int height, int d_width, int d_height, @@ -149,12 +247,12 @@ enc_param.height = height; enc_param.fincr = vf->priv->mux->h.dwScale; enc_param.fbase = vf->priv->mux->h.dwRate; - enc_param.rc_bitrate = xvidenc_param.bitrate; + enc_param.rc_bitrate = xvidenc_param.mode ? 0 : xvidenc_param.bitrate*1000; enc_param.rc_reaction_delay_factor = xvidenc_param.rc_reaction_delay_factor; enc_param.rc_averaging_period = xvidenc_param.rc_averaging_period; enc_param.rc_buffer = xvidenc_param.rc_buffer; - enc_param.max_quantizer = xvidenc_param.max_quantizer; - enc_param.min_quantizer = xvidenc_param.min_quantizer; + enc_param.max_quantizer = xvidenc_param.max_quantizer ? xvidenc_param.max_quantizer : 31; + enc_param.min_quantizer = xvidenc_param.min_quantizer ? xvidenc_param.min_quantizer : 2; enc_param.max_key_interval = xvidenc_param.max_key_interval; switch (xvid_encore(NULL, XVID_ENC_CREATE, &enc_param, NULL)) { case XVID_ERR_FAIL: @@ -201,19 +299,29 @@ if (xvidenc_param.stats_file) vf->priv->vbr_state.filename = xvidenc_param.stats_file; if (xvidenc_param.bitrate) - vf->priv->vbr_state.desired_bitrate = xvidenc_param.bitrate; - if (xvidenc_param.keyframe_boost) + vf->priv->vbr_state.desired_bitrate = xvidenc_param.bitrate*1000; + if (xvidenc_param.keyframe_boost != -1) vf->priv->vbr_state.keyframe_boost = xvidenc_param.keyframe_boost; - if (xvidenc_param.kfthreshold) + if (xvidenc_param.kfthreshold != -1) vf->priv->vbr_state.kftreshold = xvidenc_param.kfthreshold; - if (xvidenc_param.kfreduction) - vf->priv->vbr_state.kfreduction = xvidenc_param.kfreduction; - if (xvidenc_param.min_key_interval) - vf->priv->vbr_state.min_key_interval = xvidenc_param.min_key_interval; - if (xvidenc_param.max_key_interval) + if (xvidenc_param.kfreduction != -1) + vf->priv->vbr_state.kfreduction = xvidenc_param.kfreduction; + if (xvidenc_param.min_key_interval != -1) + vf->priv->vbr_state.min_key_interval = xvidenc_param.min_key_interval; + if (xvidenc_param.max_key_interval != -1) vf->priv->vbr_state.max_key_interval = xvidenc_param.max_key_interval; - if (xvidenc_param.fixed_quant) + if (xvidenc_param.fixed_quant != -1) vf->priv->vbr_state.fixed_quant = xvidenc_param.fixed_quant; + if (xvidenc_param.max_quantizer) + { + vf->priv->vbr_state.max_iquant=xvidenc_param.max_quantizer; + vf->priv->vbr_state.max_pquant=xvidenc_param.max_quantizer; + } + if (xvidenc_param.min_quantizer) + { + vf->priv->vbr_state.min_iquant=xvidenc_param.min_quantizer; + vf->priv->vbr_state.min_pquant=xvidenc_param.min_quantizer; + } switch (xvidenc_param.mode) { case XVID_MODE_CBR: vf->priv->vbr_state.mode = VBR_MODE_1PASS; @@ -231,6 +339,8 @@ abort(); } vbrInit(&vf->priv->vbr_state); + if (xvidenc_param.debug && xvidenc_param.mode) + xvid_print_vbr(&vf->priv->vbr_state); return 1; } Index: xvid_vbr.c =================================================================== RCS file: /cvsroot/mplayer/main/xvid_vbr.c,v retrieving revision 1.2 diff -u -r1.2 xvid_vbr.c --- xvid_vbr.c 18 Sep 2002 01:32:32 -0000 1.2 +++ xvid_vbr.c 29 Oct 2002 00:00:48 -0000 @@ -774,8 +774,7 @@ */ state->keyframe_locations[c] = state->cur_frame; - /* Compensate AVI overhead */ - desired = state->desired_size - state->nb_frames*24; + desired = state->desired_size; switch(state->credits_mode) { case VBR_CREDITS_MODE_QUANT :