--- trunk/vfw/src/config.c 2002/03/24 05:47:48 64 +++ trunk/vfw/src/config.c 2002/04/08 12:51:41 109 @@ -23,6 +23,10 @@ * * History: * + * 07.04.2002 min keyframe interval checkbox + * 2-pass max bitrate and overflow customization + * 04.04.2002 interlacing support + * hinted ME support * 24.03.2002 daniel smith * added Foxer's new CBR engine * - cbr_buffer is being used as reaction delay (quick hack) @@ -73,7 +77,9 @@ {"quant_type", ®.quant_type, 0}, {"fourcc_used", ®.fourcc_used, 0}, {"max_key_interval", ®.max_key_interval, 300}, + {"min_key_interval", ®.min_key_interval, 1}, {"lum_masking", ®.lum_masking, 0}, + {"interlacing", ®.interlacing, 0}, {"min_iquant", ®.min_iquant, 1}, {"max_iquant", ®.max_iquant, 31}, @@ -82,7 +88,6 @@ {"desired_size", ®.desired_size, 570000}, {"keyframe_boost", ®.keyframe_boost, 20}, - {"min_key_interval", ®.min_key_interval, 6}, {"discard1pass", ®.discard1pass, 1}, {"dummy2pass", ®.dummy2pass, 0}, {"curve_compression_high", ®.curve_compression_high, 25}, @@ -98,6 +103,10 @@ {"alt_curve_min_rel_qual", ®.alt_curve_min_rel_qual, 50}, {"bitrate_payback_delay", ®.bitrate_payback_delay, 240}, {"bitrate_payback_method", ®.bitrate_payback_method, 0}, + {"twopass_max_bitrate", ®.twopass_max_bitrate, 10000 * CONFIG_KBPS}, + {"twopass_max_overflow_improvement", ®.twopass_max_overflow_improvement, 60}, + {"twopass_max_overflow_degradation", ®.twopass_max_overflow_degradation, 60}, + {"hinted_me", ®.hinted_me, 0}, {"credits_start", ®.credits_start, 0}, {"credits_start_begin", ®.credits_start_begin, 0}, @@ -115,6 +124,7 @@ }; REG_STR const reg_strs[] = { + {"hintfile", reg.hintfile, CONFIG_HINTFILE}, {"stats1", reg.stats1, CONFIG_2PASS_1_FILE}, {"stats2", reg.stats2, CONFIG_2PASS_2_FILE} // {"build", reg.build, XVID_BUILD} @@ -448,7 +458,7 @@ { // create arrays of controls to be disabled for each mode const int cbr_disable[] = { - IDC_KFBOOST, IDC_MINKEY, IDC_DISCARD1PASS, IDC_DUMMY2PASS, + IDC_KFBOOST, IDC_DISCARD1PASS, IDC_DUMMY2PASS, IDC_CURVECOMPH, IDC_CURVECOMPL, IDC_PAYBACK, IDC_PAYBACKBIAS, IDC_PAYBACKPROP, IDC_STATS1, IDC_STATS1_BROWSE, IDC_STATS2, IDC_STATS2_BROWSE, IDC_CREDITS_START, IDC_CREDITS_END, IDC_CREDITS_START_BEGIN, IDC_CREDITS_START_END, @@ -459,7 +469,7 @@ }; const int qual_disable[] = { - IDC_KFBOOST, IDC_MINKEY, IDC_DISCARD1PASS, IDC_DUMMY2PASS, + IDC_KFBOOST, IDC_DISCARD1PASS, IDC_DUMMY2PASS, IDC_CURVECOMPH, IDC_CURVECOMPL, IDC_PAYBACK, IDC_PAYBACKBIAS, IDC_PAYBACKPROP, IDC_STATS1, IDC_STATS1_BROWSE, IDC_STATS2, IDC_STATS2_BROWSE, IDC_CREDITS_SIZE_RADIO, IDC_CREDITS_END_STATIC, IDC_CREDITS_START_SIZE, IDC_CREDITS_END_SIZE @@ -467,7 +477,7 @@ const int quant_disable[] = { IDC_MINIQUANT, IDC_MAXIQUANT, IDC_MINPQUANT, IDC_MAXPQUANT, - IDC_KFBOOST, IDC_MINKEY, IDC_DISCARD1PASS, IDC_DUMMY2PASS, + IDC_KFBOOST, IDC_DISCARD1PASS, IDC_DUMMY2PASS, IDC_CURVECOMPH, IDC_CURVECOMPL, IDC_PAYBACK, IDC_PAYBACKBIAS, IDC_PAYBACKPROP, IDC_STATS1, IDC_STATS1_BROWSE, IDC_STATS2, IDC_STATS2_BROWSE, IDC_CREDITS_SIZE_RADIO, IDC_CREDITS_END_STATIC, IDC_CREDITS_START_SIZE, IDC_CREDITS_END_SIZE @@ -508,6 +518,9 @@ int i; // first perform checkbox-based enable/disable + CONTROLDLG(IDC_HINTFILE, ISDLGSET(IDC_HINTEDME)); + CONTROLDLG(IDC_HINT_BROWSE, ISDLGSET(IDC_HINTEDME)); + CONTROLDLG(IDC_USEAUTO, ISDLGSET(IDC_USEALT)); CONTROLDLG(IDC_AUTOSTR, ISDLGSET(IDC_USEALT) && ISDLGSET(IDC_USEAUTO)); CONTROLDLG(IDC_USEAUTOBONUS, ISDLGSET(IDC_USEALT)); @@ -555,7 +568,9 @@ SendDlgItemMessage(hDlg, IDC_QUANTTYPE, CB_SETCURSEL, config->quant_type, 0); SendDlgItemMessage(hDlg, IDC_FOURCC, CB_SETCURSEL, config->fourcc_used, 0); SetDlgItemInt(hDlg, IDC_MAXKEY, config->max_key_interval, FALSE); + SetDlgItemInt(hDlg, IDC_MINKEY, config->min_key_interval, FALSE); CheckDlgButton(hDlg, IDC_LUMMASK, config->lum_masking ? BST_CHECKED : BST_UNCHECKED); + CheckDlgButton(hDlg, IDC_INTERLACING, config->interlacing ? BST_CHECKED : BST_UNCHECKED); break; case DLG_QUANT : @@ -567,7 +582,6 @@ case DLG_2PASS : SetDlgItemInt(hDlg, IDC_KFBOOST, config->keyframe_boost, FALSE); - SetDlgItemInt(hDlg, IDC_MINKEY, config->min_key_interval, FALSE); CheckDlgButton(hDlg, IDC_DISCARD1PASS, config->discard1pass ? BST_CHECKED : BST_UNCHECKED); CheckDlgButton(hDlg, IDC_DUMMY2PASS, config->dummy2pass ? BST_CHECKED : BST_UNCHECKED); @@ -577,6 +591,8 @@ CheckDlgButton(hDlg, IDC_PAYBACKBIAS, (config->bitrate_payback_method == 0)); CheckDlgButton(hDlg, IDC_PAYBACKPROP, (config->bitrate_payback_method == 1)); + CheckDlgButton(hDlg, IDC_HINTEDME, config->hinted_me ? BST_CHECKED : BST_UNCHECKED); + SetDlgItemText(hDlg, IDC_HINTFILE, config->hintfile); SetDlgItemText(hDlg, IDC_STATS1, config->stats1); SetDlgItemText(hDlg, IDC_STATS2, config->stats2); break; @@ -594,6 +610,10 @@ CheckDlgButton(hDlg, IDC_USEAUTOBONUS, config->alt_curve_use_auto_bonus_bias ? BST_CHECKED : BST_UNCHECKED); SetDlgItemInt(hDlg, IDC_BONUSBIAS, config->alt_curve_bonus_bias, FALSE); + + SetDlgItemInt(hDlg, IDC_MAXBITRATE, config->twopass_max_bitrate / CONFIG_KBPS, FALSE); + SetDlgItemInt(hDlg, IDC_OVERIMP, config->twopass_max_overflow_improvement, FALSE); + SetDlgItemInt(hDlg, IDC_OVERDEG, config->twopass_max_overflow_degradation, FALSE); break; case DLG_CREDITS : @@ -654,7 +674,9 @@ config->quant_type = SendDlgItemMessage(hDlg, IDC_QUANTTYPE, CB_GETCURSEL, 0, 0); config->fourcc_used = SendDlgItemMessage(hDlg, IDC_FOURCC, CB_GETCURSEL, 0, 0); config->max_key_interval = config_get_int(hDlg, IDC_MAXKEY, config->max_key_interval); + config->min_key_interval = config_get_int(hDlg, IDC_MINKEY, config->min_key_interval); config->lum_masking = ISDLGSET(IDC_LUMMASK); + config->interlacing = ISDLGSET(IDC_INTERLACING); break; case DLG_QUANT : @@ -671,14 +693,18 @@ case DLG_2PASS : config->keyframe_boost = GetDlgItemInt(hDlg, IDC_KFBOOST, NULL, FALSE); - config->min_key_interval = config_get_int(hDlg, IDC_MINKEY, config->min_key_interval); config->discard1pass = ISDLGSET(IDC_DISCARD1PASS); config->dummy2pass = ISDLGSET(IDC_DUMMY2PASS); config->curve_compression_high = GetDlgItemInt(hDlg, IDC_CURVECOMPH, NULL, FALSE); config->curve_compression_low = GetDlgItemInt(hDlg, IDC_CURVECOMPL, NULL, FALSE); config->bitrate_payback_delay = config_get_int(hDlg, IDC_PAYBACK, config->bitrate_payback_delay); config->bitrate_payback_method = ISDLGSET(IDC_PAYBACKPROP); + config->hinted_me = ISDLGSET(IDC_HINTEDME); + if (GetDlgItemText(hDlg, IDC_HINTFILE, config->hintfile, MAX_PATH) == 0) + { + lstrcpy(config->hintfile, CONFIG_HINTFILE); + } if (GetDlgItemText(hDlg, IDC_STATS1, config->stats1, MAX_PATH) == 0) { lstrcpy(config->stats1, CONFIG_2PASS_1_FILE); @@ -707,6 +733,15 @@ config->alt_curve_high_dist = config_get_int(hDlg, IDC_ALTCURVEHIGH, config->alt_curve_high_dist); config->alt_curve_low_dist = config_get_int(hDlg, IDC_ALTCURVELOW, config->alt_curve_low_dist); config->alt_curve_min_rel_qual = config_get_int(hDlg, IDC_MINQUAL, config->alt_curve_min_rel_qual); + + config->twopass_max_bitrate /= CONFIG_KBPS; + config->twopass_max_bitrate = config_get_int(hDlg, IDC_MAXBITRATE, config->twopass_max_bitrate); + config->twopass_max_bitrate *= CONFIG_KBPS; + config->twopass_max_overflow_improvement = config_get_int(hDlg, IDC_OVERIMP, config->twopass_max_overflow_improvement); + config->twopass_max_overflow_degradation = config_get_int(hDlg, IDC_OVERDEG, config->twopass_max_overflow_degradation); + + CONSTRAINVAL(config->twopass_max_overflow_improvement, 1, 80); + CONSTRAINVAL(config->twopass_max_overflow_degradation, 1, 80); break; case DLG_CREDITS : @@ -990,6 +1025,7 @@ { switch (LOWORD(wParam)) { + case IDC_HINTEDME : case IDC_USEALT : case IDC_USEAUTO : case IDC_USEAUTOBONUS : @@ -1004,7 +1040,7 @@ break; } } - if ((LOWORD(wParam) == IDC_STATS1_BROWSE || LOWORD(wParam) == IDC_STATS2_BROWSE) && HIWORD(wParam) == BN_CLICKED) + if ((LOWORD(wParam) == IDC_HINT_BROWSE || LOWORD(wParam) == IDC_STATS1_BROWSE || LOWORD(wParam) == IDC_STATS2_BROWSE) && HIWORD(wParam) == BN_CLICKED) { OPENFILENAME ofn; char tmp[MAX_PATH]; @@ -1021,8 +1057,15 @@ ofn.nMaxFile = MAX_PATH; ofn.Flags = OFN_PATHMUSTEXIST; - // display save box for stats1 using 1st-pass - if (LOWORD(wParam) == IDC_STATS1_BROWSE && + if (LOWORD(wParam) == IDC_HINT_BROWSE) + { + ofn.lpstrFilter = "motion hints (*.mvh)\0*.mvh\0All files (*.*)\0*.*\0\0"; + if (GetOpenFileName(&ofn)) + { + SetDlgItemText(hDlg, IDC_HINTFILE, tmp); + } + } + else if (LOWORD(wParam) == IDC_STATS1_BROWSE && psi->config->mode == DLG_MODE_2PASS_1) { ofn.Flags |= OFN_OVERWRITEPROMPT;