📄 config.c
字号:
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 : if (config->quality==quality_table_num) { config->quality_user.motion_search = SendDlgItemMessage(hDlg, IDC_MOTION, CB_GETCURSEL, 0, 0); config->quality_user.vhq_mode = SendDlgItemMessage(hDlg, IDC_VHQ, CB_GETCURSEL, 0, 0); config->quality_user.vhq_bframe = IsDlgButtonChecked(hDlg, IDC_VHQ_BFRAME); config->quality_user.chromame = IsDlgChecked(hDlg, IDC_CHROMAME); config->quality_user.turbo = IsDlgChecked(hDlg, IDC_TURBO); config->quality_user.frame_drop_ratio = config_get_uint(hDlg, IDC_FRAMEDROP, config->quality_user.frame_drop_ratio); config->quality_user.max_key_interval = config_get_uint(hDlg, IDC_MAXKEY, config->quality_user.max_key_interval); } break; case IDD_QUANT : if (config->quality==quality_table_num) { config->quality_user.min_iquant = config_get_uint(hDlg, IDC_MINIQUANT, config->quality_user.min_iquant); config->quality_user.max_iquant = config_get_uint(hDlg, IDC_MAXIQUANT, config->quality_user.max_iquant); config->quality_user.min_pquant = config_get_uint(hDlg, IDC_MINPQUANT, config->quality_user.min_pquant); config->quality_user.max_pquant = config_get_uint(hDlg, IDC_MAXPQUANT, config->quality_user.max_pquant); config->quality_user.min_bquant = config_get_uint(hDlg, IDC_MINBQUANT, config->quality_user.min_bquant); config->quality_user.max_bquant = config_get_uint(hDlg, IDC_MAXBQUANT, config->quality_user.max_bquant); CONSTRAINVAL(config->quality_user.min_iquant, 1, 31); CONSTRAINVAL(config->quality_user.max_iquant, config->quality_user.min_iquant, 31); CONSTRAINVAL(config->quality_user.min_pquant, 1, 31); CONSTRAINVAL(config->quality_user.max_pquant, config->quality_user.min_pquant, 31); CONSTRAINVAL(config->quality_user.min_bquant, 1, 31); CONSTRAINVAL(config->quality_user.max_bquant, config->quality_user.min_bquant, 31); config->quality_user.trellis_quant = IsDlgChecked(hDlg, IDC_TRELLISQUANT); } break; case IDD_COMMON : 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->debug = get_dlgitem_hex(hDlg, IDC_DEBUG, config->debug); break; case IDD_ENC : config->num_threads = config_get_uint(hDlg, IDC_NUMTHREADS, config->num_threads); config->fourcc_used = SendDlgItemMessage(hDlg, IDC_FOURCC, CB_GETCURSEL, 0, 0); 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 : case IDC_BITRATE_ASELECT : { OPENFILENAME ofn; char filename[MAX_PATH] = ""; memset(&ofn, 0, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hDlg; if (LOWORD(wParam)==IDC_BITRATE_SSELECT) { ofn.lpstrFilter = "Subtitle files (*.sub, *.ssa, *.txt, *.dat)\0*.sub;*.ssa;*.txt;*.dat\0All files (*.*)\0*.*\0\0"; }else{ ofn.lpstrFilter = "Audio files (*.mp3, *.ac3, *.aac, *.ogg, *.wav)\0*.mp3; *.ac3; *.aac; *.ogg; *.wav\0All files (*.*)\0*.*\0\0"; } ofn.lpstrFile = filename; ofn.nMaxFile = MAX_PATH; ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; if (GetOpenFileName(&ofn)) { HANDLE hFile; DWORD filesize; if ((hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)) == INVALID_HANDLE_VALUE || (filesize = GetFileSize(hFile, NULL)) == INVALID_FILE_SIZE) { MessageBox(hDlg, "Could not get file size", "Error", 0); }else{ SetDlgItemInt(hDlg, LOWORD(wParam)==IDC_BITRATE_SSELECT? IDC_BITRATE_SSIZE : IDC_BITRATE_ASIZE, filesize / 1024, FALSE); CloseHandle(hFile); } } } break; case IDC_QUANTMATRIX : DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_QUANTMATRIX), hDlg, quantmatrix_proc, (LPARAM)psi->config); break; case IDC_STATS_BROWSE : { OPENFILENAME ofn; char tmp[MAX_PATH]; GetDlgItemText(hDlg, IDC_STATS, tmp, MAX_PATH); memset(&ofn, 0, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hDlg; ofn.lpstrFilter = "bitrate curve (*.pass)\0*.pass\0All files (*.*)\0*.*\0\0"; ofn.lpstrFile = tmp; ofn.nMaxFile = MAX_PATH; ofn.Flags = OFN_PATHMUSTEXIST; if (psi->idd == IDD_RC_2PASS1) { ofn.Flags |= OFN_OVERWRITEPROMPT; }else{ ofn.Flags |= OFN_FILEMUSTEXIST; } if ((psi->idd==IDD_RC_2PASS1 && GetSaveFileName(&ofn)) || (psi->idd==IDD_RC_2PASS2 && GetOpenFileName(&ofn))) { SetDlgItemText(hDlg, IDC_STATS, tmp); } } break; case IDC_ZONE_FETCH : SetDlgItemInt(hDlg, IDC_ZONE_FRAME, psi->config->ci.ciActiveFrame, FALSE); break; case IDC_AR_DEFAULT: CheckRadioButton(hDlg, IDC_AR, IDC_PAR, IDC_PAR); SendDlgItemMessage(hDlg, IDC_ASPECT_RATIO, CB_SETCURSEL, 0, 0); adv_mode(hDlg, psi->idd, psi->config); break; case IDC_AR_4_3: SetDlgItemInt(hDlg, IDC_ARX, 4, FALSE); SetDlgItemInt(hDlg, IDC_ARY, 3, FALSE); CheckRadioButton(hDlg, IDC_AR, IDC_PAR, IDC_AR); adv_mode(hDlg, psi->idd, psi->config); break; case IDC_AR_16_9: SetDlgItemInt(hDlg, IDC_ARX, 16, FALSE); SetDlgItemInt(hDlg, IDC_ARY, 9, FALSE); CheckRadioButton(hDlg, IDC_AR, IDC_PAR, IDC_AR); adv_mode(hDlg, psi->idd, psi->config); break; case IDC_AR_235_100: SetDlgItemInt(hDlg, IDC_ARX, 235, FALSE); SetDlgItemInt(hDlg, IDC_ARY, 100, FALSE); CheckRadioButton(hDlg, IDC_AR, IDC_PAR, IDC_AR); adv_mode(hDlg, psi->idd, psi->config); break; case IDC_DEC_DY: case IDC_DEC_DUV: EnableDlgWindow(hDlg, IDC_DEC_DRY, IsDlgChecked(hDlg, IDC_DEC_DY)); EnableDlgWindow(hDlg, IDC_DEC_DRUV, IsDlgChecked(hDlg, IDC_DEC_DUV)); break; default : return TRUE; } }else if ((HIWORD(wParam) == CBN_EDITCHANGE || HIWORD(wParam)==CBN_SELCHANGE) && (LOWORD(wParam)==IDC_BITRATE_TSIZE || LOWORD(wParam)==IDC_BITRATE_ARATE )) { adv_mode(hDlg, psi->idd, psi->config); }else if (HIWORD(wParam) == LBN_SELCHANGE && (LOWORD(wParam) == IDC_PROFILE_PROFILE || LOWORD(wParam) == IDC_LEVEL_PROFILE || LOWORD(wParam) == IDC_QUANTTYPE || LOWORD(wParam) == IDC_ASPECT_RATIO || LOWORD(wParam) == IDC_BITRATE_CFORMAT || LOWORD(wParam) == IDC_BITRATE_AFORMAT || LOWORD(wParam) == IDC_BITRATE_FPS)) { adv_mode(hDlg, psi->idd, psi->config); }else if (HIWORD(wParam) == EN_UPDATE && (LOWORD(wParam)==IDC_ZONE_WEIGHT || LOWORD(wParam)==IDC_ZONE_QUANT)) { SendDlgItemMessage(hDlg, IDC_ZONE_SLIDER, TBM_SETPOS, TRUE, get_dlgitem_float(hDlg, LOWORD(wParam), 100)); } else if (HIWORD(wParam) == EN_UPDATE && (LOWORD(wParam)==IDC_PARX || LOWORD(wParam)==IDC_PARY)) { if (5 == SendDlgItemMessage(hDlg, IDC_ASPECT_RATIO, CB_GETCURSEL, 0, 0)) { if(LOWORD(wParam)==IDC_PARX) psi->config->par_x = config_get_uint(hDlg, LOWORD(wParam), psi->config->par_x); else psi->config->par_y = config_get_uint(hDlg, LOWORD(wParam), psi->config->par_y); } } else if (HIWORD(wParam) == EN_UPDATE && (LOWORD(wParam)==IDC_BITRATE_SSIZE || LOWORD(wParam)==IDC_BITRATE_HOURS || LOWORD(wParam)==IDC_BITRATE_MINUTES || LOWORD(wParam)==IDC_BITRATE_SECONDS || LOWORD(wParam)==IDC_BITRATE_ASIZE)) { adv_mode(hDlg, psi->idd, psi->config); } else return 0; break; case WM_HSCROLL : if((HWND)lParam == GetDlgItem(hDlg, IDC_ZONE_SLIDER)) { int idc = IsDlgChecked(hDlg, IDC_ZONE_MODE_WEIGHT) ? IDC_ZONE_WEIGHT : IDC_ZONE_QUANT; set_dlgitem_float(hDlg, idc, SendMessage((HWND)lParam, TBM_GETPOS, 0, 0) ); break; } return 0; case WM_NOTIFY : switch (((NMHDR *)lParam)->code) { case PSN_SETACTIVE : DPRINTF("PSN_SET"); adv_upload(hDlg, psi->idd, psi->config); adv_mode(hDlg, psi->idd, psi->config); SetWindowLong(hDlg, DWL_MSGRESULT, FALSE); break; case PSN_KILLACTIVE : DPRINTF("PSN_KILL"); adv_download(hDlg, psi->idd, psi->config); SetWindowLong(hDlg, DWL_MSGRESULT, FALSE); break; case PSN_APPLY : DPRINTF("PSN_APPLY"); psi->config->save = TRUE; SetWindowLong(hDlg, DWL_MSGRESULT, FALSE); break; } break; default : return 0; } return 1;}/* load advanced options property sheet returns true, if the user accepted the changes or fasle if changes were canceled. */#ifndef PSH_NOCONTEXTHELP#define PSH_NOCONTEXTHELP 0x02000000#endifstatic BOOL adv_dialog(HWND hParent, CONFIG * config, const int * dlgs, int size){ PROPSHEETINFO psi[6]; PROPSHEETPAGE psp[6]; PROPSHEETHEADER psh; CONFIG temp; int i; config->save = FALSE; memcpy(&temp, config, sizeof(CONFIG)); for (i=0; i<size; i++) { psp[i].dwSize = sizeof(PROPSHEETPAGE); psp[i].dwFlags = 0; psp[i].hInstance = g_hInst; psp[i].pfnDlgProc = adv_proc; psp[i].lParam = (LPARAM)&psi[i]; psp[i].pfnCallback = NULL; psp[i].pszTemplate = MAKEINTRESOURCE(dlgs[i]); psi[i].idd = dlgs[i]; psi[i].config = &temp; } psh.dwSize = sizeof(PROPSHEETHEADER); psh.dwFlags = PSH_PROPSHEETPAGE | PSH_NOAPPLYNOW | PSH_NOCONTEXTHELP; psh.hwndParent = hParent; psh.hInstance = g_hInst; psh.pszCaption = (LPSTR) "Xvid Configuration"; psh.nPages = size; psh.nStartPage = 0; psh.ppsp = (LPCPROPSHEETPAGE)&psp; psh.pfnCallback = NULL; PropertySheet(&psh); if (temp.save) memcpy(config, &temp, sizeof(CONFIG)); return temp.save;}/* ===================================================================================== *//* MAIN DIALOG =======================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -