📄 config.c
字号:
CheckDlg(hDlg, IDC_LUMMASK, config->lum_masking); CheckDlg(hDlg, IDC_INTERLACING, config->interlacing); CheckDlg(hDlg, IDC_TFF, config->tff); CheckDlg(hDlg, IDC_QPEL, config->qpel); CheckDlg(hDlg, IDC_GMC, config->gmc); CheckDlg(hDlg, IDC_BVOP, config->use_bvop); SetDlgItemInt(hDlg, IDC_MAXBFRAMES, config->max_bframes, FALSE); set_dlgitem_float(hDlg, IDC_BQUANTRATIO, config->bquant_ratio); set_dlgitem_float(hDlg, IDC_BQUANTOFFSET, config->bquant_offset); CheckDlg(hDlg, IDC_PACKED, config->packed); break; case IDD_AR: CheckRadioButton(hDlg, IDC_AR, IDC_PAR, config->ar_mode == 0 ? IDC_PAR : IDC_AR); SendDlgItemMessage(hDlg, IDC_ASPECT_RATIO, CB_SETCURSEL, (config->display_aspect_ratio), 0); SetDlgItemInt(hDlg, IDC_ARX, config->ar_x, FALSE); SetDlgItemInt(hDlg, IDC_ARY, config->ar_y, FALSE); break; case IDD_LEVEL : SendDlgItemMessage(hDlg, IDC_LEVEL_PROFILE, CB_SETCURSEL, config->profile, 0); break; case IDD_RC_CBR : SetDlgItemInt(hDlg, IDC_CBR_REACTIONDELAY, config->rc_reaction_delay_factor, FALSE); SetDlgItemInt(hDlg, IDC_CBR_AVERAGINGPERIOD, config->rc_averaging_period, FALSE); SetDlgItemInt(hDlg, IDC_CBR_BUFFER, config->rc_buffer, FALSE); break; case IDD_RC_2PASS1 : SetDlgItemText(hDlg, IDC_STATS, config->stats); CheckDlg(hDlg, IDC_DISCARD1PASS, config->discard1pass); CheckDlg(hDlg, IDC_FULL1PASS, config->full1pass); break; case IDD_RC_2PASS2 : SetDlgItemText(hDlg, IDC_STATS, config->stats); SetDlgItemInt(hDlg, IDC_KFBOOST, config->keyframe_boost, FALSE); SetDlgItemInt(hDlg, IDC_KFREDUCTION, config->kfreduction, FALSE); SetDlgItemInt(hDlg, IDC_OVERFLOW_CONTROL_STRENGTH, config->overflow_control_strength, FALSE); SetDlgItemInt(hDlg, IDC_OVERIMP, config->twopass_max_overflow_improvement, FALSE); SetDlgItemInt(hDlg, IDC_OVERDEG, config->twopass_max_overflow_degradation, FALSE); SetDlgItemInt(hDlg, IDC_CURVECOMPH, config->curve_compression_high, FALSE); SetDlgItemInt(hDlg, IDC_CURVECOMPL, config->curve_compression_low, FALSE); SetDlgItemInt(hDlg, IDC_MINKEY, config->kfthreshold, FALSE); break; case IDD_BITRATE : SendDlgItemMessage(hDlg, IDC_BITRATE_CFORMAT, CB_SETCURSEL, config->container_type, 0); SetDlgItemInt(hDlg, IDC_BITRATE_TSIZE, config->target_size, FALSE); SetDlgItemInt(hDlg, IDC_BITRATE_SSIZE, config->subtitle_size, FALSE); SetDlgItemInt(hDlg, IDC_BITRATE_HOURS, config->hours, FALSE); SetDlgItemInt(hDlg, IDC_BITRATE_MINUTES, config->minutes, FALSE); SetDlgItemInt(hDlg, IDC_BITRATE_SECONDS, config->seconds, FALSE); SendDlgItemMessage(hDlg, IDC_BITRATE_FPS, CB_SETCURSEL, config->fps, 0); SendDlgItemMessage(hDlg, IDC_BITRATE_AFORMAT, CB_SETCURSEL, config->audio_type, 0); CheckRadioButton(hDlg, IDC_BITRATE_AMODE_RATE, IDC_BITRATE_AMODE_SIZE, config->audio_mode == 0 ? IDC_BITRATE_AMODE_RATE : IDC_BITRATE_AMODE_SIZE); SetDlgItemInt(hDlg, IDC_BITRATE_ARATE, config->audio_rate, FALSE); SetDlgItemInt(hDlg, IDC_BITRATE_ASIZE, config->audio_size, FALSE); break; case IDD_ZONE : SetDlgItemInt(hDlg, IDC_ZONE_FRAME, config->zones[config->cur_zone].frame, FALSE); CheckDlgButton(hDlg, IDC_ZONE_MODE_WEIGHT, config->zones[config->cur_zone].mode == RC_ZONE_WEIGHT); CheckDlgButton(hDlg, IDC_ZONE_MODE_QUANT, config->zones[config->cur_zone].mode == RC_ZONE_QUANT); set_dlgitem_float(hDlg, IDC_ZONE_WEIGHT, config->zones[config->cur_zone].weight); set_dlgitem_float(hDlg, IDC_ZONE_QUANT, config->zones[config->cur_zone].quant); CheckDlgButton(hDlg, IDC_ZONE_FORCEIVOP, config->zones[config->cur_zone].type==XVID_TYPE_IVOP); CheckDlgButton(hDlg, IDC_ZONE_GREYSCALE, config->zones[config->cur_zone].greyscale); CheckDlgButton(hDlg, IDC_ZONE_CHROMAOPT, config->zones[config->cur_zone].chroma_opt); CheckDlg(hDlg, IDC_CARTOON, config->zones[config->cur_zone].cartoon_mode); SetDlgItemInt(hDlg, IDC_ZONE_BVOPTHRESHOLD, config->zones[config->cur_zone].bvop_threshold, TRUE); break; case IDD_MOTION : SendDlgItemMessage(hDlg, IDC_MOTION, CB_SETCURSEL, config->motion_search, 0); SendDlgItemMessage(hDlg, IDC_VHQ, CB_SETCURSEL, config->vhq_mode, 0); CheckDlg(hDlg, IDC_VHQ_BFRAME, config->vhq_bframe); CheckDlg(hDlg, IDC_CHROMAME, config->chromame); CheckDlg(hDlg, IDC_TURBO, config->turbo); SetDlgItemInt(hDlg, IDC_FRAMEDROP, config->frame_drop_ratio, FALSE); SetDlgItemInt(hDlg, IDC_MAXKEY, config->max_key_interval, FALSE); break; case IDD_QUANT : SetDlgItemInt(hDlg, IDC_MINIQUANT, config->min_iquant, FALSE); SetDlgItemInt(hDlg, IDC_MAXIQUANT, config->max_iquant, FALSE); SetDlgItemInt(hDlg, IDC_MINPQUANT, config->min_pquant, FALSE); SetDlgItemInt(hDlg, IDC_MAXPQUANT, config->max_pquant, FALSE); SetDlgItemInt(hDlg, IDC_MINBQUANT, config->min_bquant, FALSE); SetDlgItemInt(hDlg, IDC_MAXBQUANT, config->max_bquant, FALSE); CheckDlg(hDlg, IDC_TRELLISQUANT, config->trellis_quant); break; case IDD_DEBUG : CheckDlg(hDlg, IDC_CPU_MMX, (config->cpu & XVID_CPU_MMX)); CheckDlg(hDlg, IDC_CPU_MMXEXT, (config->cpu & XVID_CPU_MMXEXT)); CheckDlg(hDlg, IDC_CPU_SSE, (config->cpu & XVID_CPU_SSE)); CheckDlg(hDlg, IDC_CPU_SSE2, (config->cpu & XVID_CPU_SSE2)); CheckDlg(hDlg, IDC_CPU_3DNOW, (config->cpu & XVID_CPU_3DNOW)); CheckDlg(hDlg, IDC_CPU_3DNOWEXT, (config->cpu & XVID_CPU_3DNOWEXT)); CheckRadioButton(hDlg, IDC_CPU_AUTO, IDC_CPU_FORCE, config->cpu & XVID_CPU_FORCE ? IDC_CPU_FORCE : IDC_CPU_AUTO ); SetDlgItemInt(hDlg, IDC_NUMTHREADS, config->num_threads, FALSE); SendDlgItemMessage(hDlg, IDC_FOURCC, CB_SETCURSEL, config->fourcc_used, 0); set_dlgitem_hex(hDlg, IDC_DEBUG, config->debug); CheckDlg(hDlg, IDC_VOPDEBUG, config->vop_debug); CheckDlg(hDlg, IDC_DISPLAY_STATUS, config->display_status); break; case IDD_DEC : SendDlgItemMessage(hDlg, IDC_DEC_BRIGHTNESS, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)pp_brightness); CheckDlg(hDlg, IDC_DEC_DY, pp_dy); CheckDlg(hDlg, IDC_DEC_DUV, pp_duv); CheckDlg(hDlg, IDC_DEC_DRY, pp_dry); CheckDlg(hDlg, IDC_DEC_DRUV,pp_druv); CheckDlg(hDlg, IDC_DEC_FE, pp_fe); EnableDlgWindow(hDlg, IDC_DEC_DRY, pp_dy); EnableDlgWindow(hDlg, IDC_DEC_DRUV, pp_duv); break; }}/* download config data from dialog */static void adv_download(HWND hDlg, int idd, CONFIG * config){ switch (idd) { case IDD_PROFILE : config->profile = SendDlgItemMessage(hDlg, IDC_PROFILE_PROFILE, CB_GETCURSEL, 0, 0); config->quant_type = SendDlgItemMessage(hDlg, IDC_QUANTTYPE, CB_GETCURSEL, 0, 0); config->lum_masking = IsDlgChecked(hDlg, IDC_LUMMASK); config->interlacing = IsDlgChecked(hDlg, IDC_INTERLACING); config->tff = IsDlgChecked(hDlg, IDC_TFF); config->qpel = IsDlgChecked(hDlg, IDC_QPEL); config->gmc = IsDlgChecked(hDlg, IDC_GMC); config->use_bvop = IsDlgChecked(hDlg, IDC_BVOP); config->max_bframes = config_get_uint(hDlg, IDC_MAXBFRAMES, config->max_bframes); config->bquant_ratio = get_dlgitem_float(hDlg, IDC_BQUANTRATIO, config->bquant_ratio); config->bquant_offset = get_dlgitem_float(hDlg, IDC_BQUANTOFFSET, config->bquant_offset); config->packed = IsDlgChecked(hDlg, IDC_PACKED); break; case IDD_AR: config->ar_mode = IsDlgChecked(hDlg, IDC_PAR) ? 0:1; config->ar_x = config_get_uint(hDlg, IDC_ARX, config->ar_x); config->ar_y = config_get_uint(hDlg, IDC_ARY, config->ar_y); config->display_aspect_ratio = SendDlgItemMessage(hDlg, IDC_ASPECT_RATIO, CB_GETCURSEL, 0, 0); if (config->display_aspect_ratio == 5) { config->par_x = config_get_uint(hDlg, IDC_PARX, config->par_x); config->par_y = config_get_uint(hDlg, IDC_PARY, config->par_y); } break; case IDD_LEVEL : config->profile = SendDlgItemMessage(hDlg, IDC_LEVEL_PROFILE, CB_GETCURSEL, 0, 0); break; case IDD_RC_CBR : config->rc_reaction_delay_factor = config_get_uint(hDlg, IDC_CBR_REACTIONDELAY, config->rc_reaction_delay_factor); config->rc_averaging_period = config_get_uint(hDlg, IDC_CBR_AVERAGINGPERIOD, config->rc_averaging_period); config->rc_buffer = config_get_uint(hDlg, IDC_CBR_BUFFER, config->rc_buffer); break; case IDD_RC_2PASS1 : if (GetDlgItemText(hDlg, IDC_STATS, config->stats, MAX_PATH) == 0) lstrcpy(config->stats, CONFIG_2PASS_FILE); config->discard1pass = IsDlgChecked(hDlg, IDC_DISCARD1PASS); config->full1pass = IsDlgChecked(hDlg, IDC_FULL1PASS); break; case IDD_RC_2PASS2 : if (GetDlgItemText(hDlg, IDC_STATS, config->stats, MAX_PATH) == 0) lstrcpy(config->stats, CONFIG_2PASS_FILE); config->keyframe_boost = GetDlgItemInt(hDlg, IDC_KFBOOST, NULL, FALSE); config->kfreduction = GetDlgItemInt(hDlg, IDC_KFREDUCTION, NULL, FALSE); CONSTRAINVAL(config->keyframe_boost, 0, 1000); config->overflow_control_strength = GetDlgItemInt(hDlg, IDC_OVERFLOW_CONTROL_STRENGTH, NULL, FALSE); config->twopass_max_overflow_improvement = config_get_uint(hDlg, IDC_OVERIMP, config->twopass_max_overflow_improvement); config->twopass_max_overflow_degradation = config_get_uint(hDlg, IDC_OVERDEG, config->twopass_max_overflow_degradation); CONSTRAINVAL(config->twopass_max_overflow_improvement, 1, 80); CONSTRAINVAL(config->twopass_max_overflow_degradation, 1, 80); CONSTRAINVAL(config->overflow_control_strength, 0, 100); config->curve_compression_high = GetDlgItemInt(hDlg, IDC_CURVECOMPH, NULL, FALSE); config->curve_compression_low = GetDlgItemInt(hDlg, IDC_CURVECOMPL, NULL, FALSE); CONSTRAINVAL(config->curve_compression_high, 0, 100); CONSTRAINVAL(config->curve_compression_low, 0, 100); config->kfthreshold = config_get_uint(hDlg, IDC_MINKEY, config->kfthreshold); break; case IDD_BITRATE : config->container_type = SendDlgItemMessage(hDlg, IDC_BITRATE_CFORMAT, CB_GETCURSEL, 0, 0); config->target_size = config_get_uint(hDlg, IDC_BITRATE_TSIZE, config->target_size); config->subtitle_size = config_get_uint(hDlg, IDC_BITRATE_SSIZE, config->subtitle_size); config->hours = config_get_uint(hDlg, IDC_BITRATE_HOURS, config->hours); config->minutes = config_get_uint(hDlg, IDC_BITRATE_MINUTES, config->minutes); config->seconds = config_get_uint(hDlg, IDC_BITRATE_SECONDS, config->seconds); config->fps = SendDlgItemMessage(hDlg, IDC_BITRATE_FPS, CB_GETCURSEL, 0, 0); config->audio_type = SendDlgItemMessage(hDlg, IDC_BITRATE_AFORMAT, CB_GETCURSEL, 0, 0); config->audio_mode = IsDlgChecked(hDlg, IDC_BITRATE_AMODE_SIZE) ? 1 : 0 ; config->audio_rate = config_get_uint(hDlg, IDC_BITRATE_ARATE, config->audio_rate); config->audio_size = config_get_uint(hDlg, IDC_BITRATE_ASIZE, config->audio_size); /* the main window uses "AVI bitrate/filesize" not "video bitrate/filesize", so we have to compensate by frames * 24 bytes */ { int frame_compensate = 24 * (int)( (3600*config->hours + 60*config->minutes + config->seconds) * video_fps_list[config->fps].value) / 1024; int bitrate_compensate = (int)(24 * video_fps_list[config->fps].value) / 125; config->desired_size = config_get_uint(hDlg, IDC_BITRATE_VSIZE, config->desired_size) + frame_compensate; config->bitrate = config_get_uint(hDlg, IDC_BITRATE_VRATE, config->bitrate) + bitrate_compensate; } break; case IDD_ZONE : config->zones[config->cur_zone].frame = config_get_uint(hDlg, IDC_ZONE_FRAME, config->zones[config->cur_zone].frame); if (IsDlgChecked(hDlg, IDC_ZONE_MODE_WEIGHT)) { config->zones[config->cur_zone].mode = RC_ZONE_WEIGHT; }else if (IsDlgChecked(hDlg, IDC_ZONE_MODE_QUANT)) { config->zones[config->cur_zone].mode = RC_ZONE_QUANT; } config->zones[config->cur_zone].weight = get_dlgitem_float(hDlg, IDC_ZONE_WEIGHT, config->zones[config->cur_zone].weight); config->zones[config->cur_zone].quant = get_dlgitem_float(hDlg, IDC_ZONE_QUANT, config->zones[config->cur_zone].quant); config->zones[config->cur_zone].type = IsDlgButtonChecked(hDlg, IDC_ZONE_FORCEIVOP)?XVID_TYPE_IVOP:XVID_TYPE_AUTO; config->zones[config->cur_zone].greyscale = IsDlgButtonChecked(hDlg, IDC_ZONE_GREYSCALE); config->zones[config->cur_zone].chroma_opt = IsDlgButtonChecked(hDlg, IDC_ZONE_CHROMAOPT); config->zones[config->cur_zone].bvop_threshold = config_get_int(hDlg, IDC_ZONE_BVOPTHRESHOLD, config->zones[config->cur_zone].bvop_threshold); config->zones[config->cur_zone].cartoon_mode = IsDlgChecked(hDlg, IDC_CARTOON); break; case IDD_MOTION : config->motion_search = SendDlgItemMessage(hDlg, IDC_MOTION, CB_GETCURSEL, 0, 0); config->vhq_mode = SendDlgItemMessage(hDlg, IDC_VHQ, CB_GETCURSEL, 0, 0); config->vhq_bframe = IsDlgButtonChecked(hDlg, IDC_VHQ_BFRAME); config->chromame = IsDlgChecked(hDlg, IDC_CHROMAME); config->turbo = IsDlgChecked(hDlg, IDC_TURBO); config->frame_drop_ratio = config_get_uint(hDlg, IDC_FRAMEDROP, config->frame_drop_ratio); config->max_key_interval = config_get_uint(hDlg, IDC_MAXKEY, config->max_key_interval); break; case IDD_QUANT : config->min_iquant = config_get_uint(hDlg, IDC_MINIQUANT, config->min_iquant); config->max_iquant = config_get_uint(hDlg, IDC_MAXIQUANT, config->max_iquant); config->min_pquant = config_get_uint(hDlg, IDC_MINPQUANT, config->min_pquant); config->max_pquant = config_get_uint(hDlg, IDC_MAXPQUANT, config->max_pquant); config->min_bquant = config_get_uint(hDlg, IDC_MINBQUANT, config->min_bquant); config->max_bquant = config_get_uint(hDlg, IDC_MAXBQUANT, config->max_bquant); CONSTRAINVAL(config->min_iquant, 1, 31); CONSTRAINVAL(config->max_iquant, config->min_iquant, 31); CONSTRAINVAL(config->min_pquant, 1, 31); CONSTRAINVAL(config->max_pquant, config->min_pquant, 31); CONSTRAINVAL(config->min_bquant, 1, 31); CONSTRAINVAL(config->max_bquant, config->min_bquant, 31); config->trellis_quant = IsDlgChecked(hDlg, IDC_TRELLISQUANT); break; case IDD_DEBUG : config->cpu = 0; config->cpu |= IsDlgChecked(hDlg, IDC_CPU_MMX) ? XVID_CPU_MMX : 0; config->cpu |= IsDlgChecked(hDlg, IDC_CPU_MMXEXT) ? XVID_CPU_MMXEXT : 0; config->cpu |= IsDlgChecked(hDlg, IDC_CPU_SSE) ? XVID_CPU_SSE : 0; config->cpu |= IsDlgChecked(hDlg, IDC_CPU_SSE2) ? XVID_CPU_SSE2 : 0; config->cpu |= IsDlgChecked(hDlg, IDC_CPU_3DNOW) ? XVID_CPU_3DNOW : 0; config->cpu |= IsDlgChecked(hDlg, IDC_CPU_3DNOWEXT) ? XVID_CPU_3DNOWEXT : 0; config->cpu |= IsDlgChecked(hDlg, IDC_CPU_FORCE) ? XVID_CPU_FORCE : 0; config->num_threads = config_get_uint(hDlg, IDC_NUMTHREADS, config->num_threads); config->fourcc_used = SendDlgItemMessage(hDlg, IDC_FOURCC, CB_GETCURSEL, 0, 0); config->debug = get_dlgitem_hex(hDlg, IDC_DEBUG, config->debug); config->vop_debug = IsDlgChecked(hDlg, IDC_VOPDEBUG); config->display_status = IsDlgChecked(hDlg, IDC_DISPLAY_STATUS); break; case IDD_DEC : pp_brightness = SendDlgItemMessage(hDlg, IDC_DEC_BRIGHTNESS, TBM_GETPOS, (WPARAM)NULL, (LPARAM)NULL); pp_dy = IsDlgChecked(hDlg, IDC_DEC_DY); pp_duv = IsDlgChecked(hDlg, IDC_DEC_DUV); pp_dry = IsDlgChecked(hDlg, IDC_DEC_DRY); pp_druv = IsDlgChecked(hDlg, IDC_DEC_DRUV); pp_fe = IsDlgChecked(hDlg, IDC_DEC_FE); break; }}/* advanced dialog proc */static BOOL CALLBACK adv_proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam){ PROPSHEETINFO *psi; psi = (PROPSHEETINFO*)GetWindowLong(hDlg, GWL_USERDATA); switch (uMsg) { case WM_INITDIALOG : psi = (PROPSHEETINFO*) ((LPPROPSHEETPAGE)lParam)->lParam; SetWindowLong(hDlg, GWL_USERDATA, (LPARAM)psi); if (g_hTooltip) EnumChildWindows(hDlg, enum_tooltips, 0); adv_init(hDlg, psi->idd, psi->config); break; case WM_COMMAND : if (HIWORD(wParam) == BN_CLICKED) { switch (LOWORD(wParam)) { case IDC_INTERLACING : case IDC_VHQ_BFRAME : case IDC_BVOP : case IDC_ZONE_MODE_WEIGHT : case IDC_ZONE_MODE_QUANT : case IDC_ZONE_BVOPTHRESHOLD_ENABLE : case IDC_CPU_AUTO : case IDC_CPU_FORCE : case IDC_AR : case IDC_PAR : case IDC_BITRATE_AMODE_RATE : case IDC_BITRATE_AMODE_SIZE : adv_mode(hDlg, psi->idd, psi->config); break; case IDC_BITRATE_SSELECT :
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -