--- trunk/xvidcore/vfw/src/config.c 2004/04/01 11:11:28 1397 +++ trunk/xvidcore/vfw/src/config.c 2005/01/08 12:28:48 1588 @@ -78,7 +78,7 @@ static int g_use_bitrate = 1; -int pp_brightness, pp_dy, pp_duv, pp_dr, pp_fe; /* decoder options */ +int pp_brightness, pp_dy, pp_duv, pp_fe, pp_dry, pp_druv; /* decoder options */ /* enumerates child windows, assigns tooltips */ BOOL CALLBACK enum_tooltips(HWND hWnd, LPARAM lParam) @@ -104,7 +104,7 @@ /* MPEG-4 PROFILES/LEVELS ============================================================== */ /* ===================================================================================== */ - +#define DXN_PROFILES /* default vbv_occupancy is (64/170)*vbv_buffer_size */ @@ -169,13 +169,15 @@ } named_int_t; -#define NO_AUDIO 5 +#define NO_AUDIO 7 static const named_int_t audio_type_list[] = { { "MP3-CBR", 1000, 48000/1152/6 }, { "MP3-VBR", 24, 48000/1152/6 }, { "OGG", /*?*/1000, 48000*(0.7F/1024 + 0.3F/180) }, { "AC3", 64, 48000/1536/6 }, { "DTS", 21, /*?*/48000/1152/6 }, + { "AAC", 21, 48000/1024/6 }, + { "HE-AAC", 42, 48000/1024/6 }, { "(None)", 0, 0 }, }; @@ -198,6 +200,7 @@ {"quant_type", ®.quant_type, 0}, {"lum_masking", ®.lum_masking, 0}, {"interlacing", ®.interlacing, 0}, + {"tff", ®.tff, 0}, {"qpel", ®.qpel, 0}, {"gmc", ®.gmc, 0}, {"reduced_resolution", ®.reduced_resolution, 0}, @@ -254,8 +257,8 @@ /* motion */ {"motion_search", ®.motion_search, 6}, {"vhq_mode", ®.vhq_mode, 1}, + {"vhq_bframe", ®.vhq_bframe, 0}, {"chromame", ®.chromame, 1}, - {"cartoon_mode", ®.cartoon_mode, 0}, {"turbo", ®.turbo, 0}, {"max_key_interval", ®.max_key_interval, 300}, {"frame_drop_ratio", ®.frame_drop_ratio, 0}, @@ -279,13 +282,14 @@ {"Brightness", &pp_brightness, 0}, {"Deblock_Y", &pp_dy, 0}, {"Deblock_UV", &pp_duv, 0}, - {"Dering", &pp_dr, 0}, + {"Dering_Y", &pp_dry, 0}, + {"Dering_UV", &pp_druv, 0}, {"FilmEffect", &pp_fe, 0}, }; static const REG_STR reg_strs[] = { - {"profile", reg.profile_name, "AS @ L5"}, + {"profile", reg.profile_name, "(unrestricted)"}, {"stats", reg.stats, CONFIG_2PASS_FILE}, }; @@ -300,6 +304,7 @@ {"zone%i_greyscale", &stmp.greyscale, 0}, {"zone%i_chroma_opt", &stmp.chroma_opt, 0}, {"zone%i_bvop_threshold", &stmp.bvop_threshold, 0}, + {"zone%i_cartoon_mode", &stmp.cartoon_mode, 0}, }; static const BYTE default_qmatrix_intra[] = { @@ -838,6 +843,7 @@ EnableDlgWindow(hDlg, IDC_QUANTMATRIX, custom_quant); EnableDlgWindow(hDlg, IDC_LUMMASK, profiles[profile].flags&PROFILE_ADAPTQUANT); EnableDlgWindow(hDlg, IDC_INTERLACING, profiles[profile].flags&PROFILE_INTERLACE); + EnableDlgWindow(hDlg, IDC_TFF, IsDlgChecked(hDlg, IDC_INTERLACING)); EnableDlgWindow(hDlg, IDC_QPEL, profiles[profile].flags&PROFILE_QPEL); EnableDlgWindow(hDlg, IDC_GMC, profiles[profile].flags&PROFILE_GMC); EnableDlgWindow(hDlg, IDC_REDUCED, profiles[profile].flags&PROFILE_REDUCED); @@ -934,7 +940,11 @@ /* step 2: calculate audio_size (kbytes)*/ if (audio_type!=NO_AUDIO) { if (audio_mode==0) { - audio_size = (duration * audio_rate) / 8; + audio_size = (int)( (1000.0 * duration * audio_rate) / (8.0*1024) ); + SetDlgItemInt(hDlg, IDC_BITRATE_ASIZE, audio_size, TRUE); + }else{ + int tmp_rate = (int)( (audio_size * 8.0 * 1024) / (1000.0 * duration) ); + SetDlgItemInt(hDlg, IDC_BITRATE_ARATE, tmp_rate, TRUE); } }else{ audio_size = 0; @@ -974,8 +984,8 @@ overhead /= 1024; break; - case 3 : /* OGM: inaccurate model */ - overhead = (int)(0.0039F * (target_size - subtitle_size)); + case 3 : /* alexnoe formula */ + overhead = (int)( (target_size - subtitle_size) * (28.0/4224.0 + (1.0/255.0)) ); break; default : /* (none) */ @@ -1047,6 +1057,7 @@ SendDlgItemMessage(hDlg, IDC_QUANTTYPE, CB_SETCURSEL, config->quant_type, 0); 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_REDUCED, config->reduced_resolution); @@ -1125,14 +1136,16 @@ 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_CARTOON, config->cartoon_mode); CheckDlg(hDlg, IDC_TURBO, config->turbo); SetDlgItemInt(hDlg, IDC_FRAMEDROP, config->frame_drop_ratio, FALSE); SetDlgItemInt(hDlg, IDC_MAXKEY, config->max_key_interval, FALSE); @@ -1171,8 +1184,11 @@ 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_DR, pp_dr); + 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; } } @@ -1190,6 +1206,7 @@ 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->reduced_resolution = IsDlgChecked(hDlg, IDC_REDUCED); @@ -1304,13 +1321,14 @@ 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->cartoon_mode = IsDlgChecked(hDlg, IDC_CARTOON); config->turbo = IsDlgChecked(hDlg, IDC_TURBO); config->frame_drop_ratio = config_get_uint(hDlg, IDC_FRAMEDROP, config->frame_drop_ratio); @@ -1358,7 +1376,8 @@ 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_dr = IsDlgChecked(hDlg, IDC_DEC_DR); + pp_dry = IsDlgChecked(hDlg, IDC_DEC_DRY); + pp_druv = IsDlgChecked(hDlg, IDC_DEC_DRUV); pp_fe = IsDlgChecked(hDlg, IDC_DEC_FE); break; } @@ -1391,6 +1410,8 @@ { switch (LOWORD(wParam)) { + case IDC_INTERLACING : + case IDC_VHQ_BFRAME : case IDC_BVOP : case IDC_ZONE_MODE_WEIGHT : case IDC_ZONE_MODE_QUANT : @@ -1415,9 +1436,9 @@ ofn.hwndOwner = hDlg; if (LOWORD(wParam)==IDC_BITRATE_SSELECT) { - ofn.lpstrFilter = "Subtitle files (*.sub, *.ssa)\0*.sub;*.ssa\0All files (*.*)\0*.*\0\0"; + 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)\0*.mp3; *.ac3\0All files (*.*)\0*.*\0\0"; + ofn.lpstrFilter = "Audio files (*.mp3, *.ac3, *.aac, *.ogg, *.wav)\0*.mp3; *.ac3; *.aac; *.ogg; *.wav\0All files (*.*)\0*.*\0\0"; } ofn.lpstrFile = filename; @@ -1428,7 +1449,7 @@ HANDLE hFile; DWORD filesize; - if ((hFile = CreateFile(filename, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)) == INVALID_HANDLE_VALUE || + 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{ @@ -1501,7 +1522,11 @@ 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; } @@ -2003,6 +2028,8 @@ case IDC_DEFAULTS : config_reg_default(config); + SendDlgItemMessage(hDlg, IDC_PROFILE, CB_SETCURSEL, config->profile, 0); + SendDlgItemMessage(hDlg, IDC_MODE, CB_SETCURSEL, config->mode, 0); main_mode(hDlg, config); main_upload(hDlg, config); break; @@ -2070,6 +2097,61 @@ } +/* ===================================================================================== */ +/* LICENSE DIALOG ====================================================================== */ +/* ===================================================================================== */ + +static BOOL CALLBACK license_proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + switch (uMsg) + { + case WM_INITDIALOG : + { + HRSRC hRSRC; + HGLOBAL hGlobal = NULL; + if ((hRSRC = FindResource(g_hInst, MAKEINTRESOURCE(IDR_GPL), "TEXT"))) { + if ((hGlobal = LoadResource(g_hInst, hRSRC))) { + LPVOID lpData; + if ((lpData = LockResource(hGlobal))) { + SendDlgItemMessage(hDlg, IDC_LICENSE_TEXT, WM_SETFONT, (WPARAM)GetStockObject(ANSI_FIXED_FONT), MAKELPARAM(TRUE, 0)); + SetDlgItemText(hDlg, IDC_LICENSE_TEXT, lpData); + SendDlgItemMessage(hDlg, IDC_LICENSE_TEXT, EM_SETSEL, (WPARAM)-1, (LPARAM)0); + } + } + } + SetWindowLong(hDlg, GWL_USERDATA, (LONG)hGlobal); + } + break; + + case WM_DESTROY : + { + HGLOBAL hGlobal = (HGLOBAL)GetWindowLong(hDlg, GWL_USERDATA); + if (hGlobal) { + FreeResource(hGlobal); + } + } + break; + + case WM_COMMAND : + if (HIWORD(wParam) == BN_CLICKED) { + switch(LOWORD(wParam)) { + case IDOK : + case IDCANCEL : + EndDialog(hDlg, 0); + break; + default : + return 0; + } + break; + } + break; + + default : + return 0; + } + + return 1; +} /* ===================================================================================== */ /* ABOUT DIALOG ======================================================================== */ @@ -2137,12 +2219,11 @@ return 0; case WM_COMMAND : - if (LOWORD(wParam) == IDC_WEBSITE && HIWORD(wParam) == STN_CLICKED) - { + if (LOWORD(wParam) == IDC_WEBSITE && HIWORD(wParam) == STN_CLICKED) { ShellExecute(hDlg, "open", XVID_WEBSITE, NULL, NULL, SW_SHOWNORMAL); - } - else if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) - { + }else if (LOWORD(wParam) == IDC_LICENSE) { + DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_LICENSE), hDlg, license_proc, (LPARAM)0); + } else if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); } break;