--- trunk/xvidcore/vfw/src/config.c 2004/07/13 12:22:46 1490 +++ trunk/xvidcore/vfw/src/config.c 2005/01/10 06:07:07 1594 @@ -104,7 +104,7 @@ /* MPEG-4 PROFILES/LEVELS ============================================================== */ /* ===================================================================================== */ - +#define DXN_PROFILES /* default vbv_occupancy is (64/170)*vbv_buffer_size */ @@ -203,13 +203,11 @@ {"tff", ®.tff, 0}, {"qpel", ®.qpel, 0}, {"gmc", ®.gmc, 0}, - {"reduced_resolution", ®.reduced_resolution, 0}, {"use_bvop", ®.use_bvop, 1}, {"max_bframes", ®.max_bframes, 2}, {"bquant_ratio", ®.bquant_ratio, 150}, /* 100-base float */ {"bquant_offset", ®.bquant_offset, 100}, /* 100-base float */ {"packed", ®.packed, 1}, - {"closed_gov", ®.closed_gov, 1}, /* aspect ratio */ {"ar_mode", ®.ar_mode, 0}, @@ -257,8 +255,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}, @@ -270,7 +268,7 @@ {"max_pquant", ®.max_pquant, 31}, {"min_bquant", ®.min_bquant, 1}, {"max_bquant", ®.max_bquant, 31}, - {"trellis_quant", ®.trellis_quant, 0}, + {"trellis_quant", ®.trellis_quant, 1}, /* debug */ {"fourcc_used", ®.fourcc_used, 0}, @@ -289,7 +287,7 @@ }; static const REG_STR reg_strs[] = { - {"profile", reg.profile_name, "AS @ L5"}, + {"profile", reg.profile_name, "(unrestricted)"}, {"stats", reg.stats, CONFIG_2PASS_FILE}, }; @@ -304,6 +302,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[] = { @@ -845,7 +844,6 @@ 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); bvops = (profiles[profile].flags&PROFILE_BVOP) && IsDlgChecked(hDlg, IDC_BVOP); EnableDlgWindow(hDlg, IDC_MAXBFRAMES, bvops); @@ -855,7 +853,6 @@ EnableDlgWindow(hDlg, IDC_BQUANTRATIO_S, bvops); EnableDlgWindow(hDlg, IDC_BQUANTOFFSET_S, bvops); EnableDlgWindow(hDlg, IDC_PACKED, bvops); - EnableDlgWindow(hDlg, IDC_CLOSEDGOV, bvops); break; case IDD_AR: @@ -939,8 +936,13 @@ /* step 2: calculate audio_size (kbytes)*/ if (audio_type!=NO_AUDIO) { if (audio_mode==0) { - audio_size = (int)( (1000.0 * duration * audio_rate) / (8.0*1024) ); - SetDlgItemInt(hDlg, IDC_BITRATE_ASIZE, audio_size, TRUE); + int new_audio_size = (int)( (1000.0 * duration * audio_rate) / (8.0*1024) ); + + /* this check is needed to avoid a loop */ + if (new_audio_size!=audio_size) { + audio_size = new_audio_size; + SetDlgItemInt(hDlg, IDC_BITRATE_ASIZE, new_audio_size, TRUE); + } }else{ int tmp_rate = (int)( (audio_size * 8.0 * 1024) / (1000.0 * duration) ); SetDlgItemInt(hDlg, IDC_BITRATE_ARATE, tmp_rate, TRUE); @@ -999,7 +1001,7 @@ if (vsize > 0) { SetDlgItemInt(hDlg, IDC_BITRATE_VSIZE, vsize, TRUE); /* convert from kbytes to kbits-per-second */ - SetDlgItemInt(hDlg, IDC_BITRATE_VRATE, (vsize * 8 * 128) / (duration * 125), TRUE); + SetDlgItemInt(hDlg, IDC_BITRATE_VRATE, (int)(((__int64)vsize * 8 * 128) / (duration * 125)), TRUE); }else{ SetDlgItemText(hDlg, IDC_BITRATE_VSIZE, "Overflow"); SetDlgItemText(hDlg, IDC_BITRATE_VRATE, "Overflow"); @@ -1059,14 +1061,12 @@ 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); 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); - CheckDlg(hDlg, IDC_CLOSEDGOV, config->closed_gov); break; case IDD_AR: @@ -1135,14 +1135,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); @@ -1206,14 +1208,12 @@ 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); 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); - config->closed_gov = IsDlgChecked(hDlg, IDC_CLOSEDGOV); break; case IDD_AR: @@ -1318,13 +1318,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); @@ -1407,6 +1408,7 @@ switch (LOWORD(wParam)) { case IDC_INTERLACING : + case IDC_VHQ_BFRAME : case IDC_BVOP : case IDC_ZONE_MODE_WEIGHT : case IDC_ZONE_MODE_QUANT : @@ -1703,6 +1705,9 @@ strcat(tmp, "G "); if (s->chroma_opt) + strcat(tmp, "O "); + + if (s->cartoon_mode) strcat(tmp, "C "); ListView_SetItemText(hDlg, i, 2, tmp); @@ -2092,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 ======================================================================== */ @@ -2159,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;