19 |
* along with this program; if not, write to the Free Software |
* along with this program; if not, write to the Free Software |
20 |
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
21 |
* |
* |
22 |
* $Id: config.c,v 1.42 2010-12-21 16:56:42 Isibaar Exp $ |
* $Id$ |
23 |
* |
* |
24 |
*************************************************************************/ |
*************************************************************************/ |
25 |
|
|
125 |
{ "MPEG4 Advanced Simple @ L4", "MPEG4 ASP @ L4", 0xf4, 352, 576, 30, 4, 2376, 792, 23760, 50, 80*16368, 8192, 3000000, 0, -1, PROFILE_AS }, |
{ "MPEG4 Advanced Simple @ L4", "MPEG4 ASP @ L4", 0xf4, 352, 576, 30, 4, 2376, 792, 23760, 50, 80*16368, 8192, 3000000, 0, -1, PROFILE_AS }, |
126 |
{ "MPEG4 Advanced Simple @ L5", "MPEG4 ASP @ L5", 0xf5, 720, 576, 30, 4, 4860, 1620, 48600, 25, 112*16368, 16384, 8000000, 0, -1, PROFILE_AS }, |
{ "MPEG4 Advanced Simple @ L5", "MPEG4 ASP @ L5", 0xf5, 720, 576, 30, 4, 4860, 1620, 48600, 25, 112*16368, 16384, 8000000, 0, -1, PROFILE_AS }, |
127 |
|
|
128 |
{ "(unrestricted)", "(unrestricted)", 0x00, 0, 0, 0, 0, 0, 0, 0, 100, 0*16368, -1, 0, 0, -1, 0xffffffff & ~(PROFILE_EXTRA | PROFILE_PACKED)}, |
{ "(unrestricted)", "(unrestricted)", 0x00, 0, 0, 0, 0, 0, 0, 0, 100, 0*16368, -1, 0, 0, -1, 0xffffffff & ~(PROFILE_EXTRA | PROFILE_PACKED | PROFILE_XVID)}, |
129 |
}; |
}; |
130 |
|
|
131 |
|
|
132 |
const quality_t quality_table[] = |
const quality_t quality_table[] = |
133 |
{ |
{ |
134 |
/* name | m vhq bf cme tbo kfi fdr | iquant pquant bquant trellis */ |
/* name | m vhq mtc bf cme tbo kfi fdr | iquant pquant bquant trellis */ |
135 |
{ "Real-time", 1, 0, 0, 0, 0, 300, 0, 1, 31, 1, 31, 1, 31, 0 }, |
{ "Real-time", 1, 0, 0, 0, 0, 0, 300, 0, 1, 31, 1, 31, 1, 31, 0 }, |
136 |
{ QUALITY_GENERAL_STRING, 6, 1, 0, 1, 0, 300, 0, 1, 31, 1, 31, 1, 31, 1 }, |
{ QUALITY_GENERAL_STRING, 6, 1, 0, 0, 1, 0, 300, 0, 1, 31, 1, 31, 1, 31, 1 }, |
137 |
}; |
}; |
138 |
|
|
139 |
const int quality_table_num = sizeof(quality_table)/sizeof(quality_t); |
const int quality_table_num = sizeof(quality_table)/sizeof(quality_t); |
201 |
{"bquant_ratio", ®.bquant_ratio, 150}, /* 100-base float */ |
{"bquant_ratio", ®.bquant_ratio, 150}, /* 100-base float */ |
202 |
{"bquant_offset", ®.bquant_offset, 100}, /* 100-base float */ |
{"bquant_offset", ®.bquant_offset, 100}, /* 100-base float */ |
203 |
{"packed", ®.packed, 1}, |
{"packed", ®.packed, 1}, |
204 |
|
{"num_slices", ®.num_slices, 1}, |
205 |
|
|
206 |
/* aspect ratio */ |
/* aspect ratio */ |
207 |
{"ar_mode", ®.ar_mode, 0}, |
{"ar_mode", ®.ar_mode, 0}, |
270 |
{"debug", ®.debug, 0x0}, |
{"debug", ®.debug, 0x0}, |
271 |
{"vop_debug", ®.vop_debug, 0}, |
{"vop_debug", ®.vop_debug, 0}, |
272 |
{"display_status", ®.display_status, 1}, |
{"display_status", ®.display_status, 1}, |
273 |
|
{"cpu_flags", ®.cpu, 0}, |
274 |
|
|
275 |
/* smp */ |
/* smp */ |
276 |
{"num_threads", ®.num_threads, 0}, |
{"num_threads", ®.num_threads, 0}, |
|
{"num_slices", ®.num_slices, 1}, |
|
277 |
|
|
278 |
/* decoder, shared with dshow */ |
/* decoder, shared with dshow */ |
279 |
{"Brightness", &pp_brightness, 0}, |
{"Brightness", &pp_brightness, 0}, |
354 |
FreeLibrary(m_hdll); |
FreeLibrary(m_hdll); |
355 |
} |
} |
356 |
|
|
|
reg.cpu = info.cpu_flags; |
|
|
reg.num_threads = info.num_threads; |
|
|
|
|
357 |
RegOpenKeyEx(XVID_REG_KEY, XVID_REG_PARENT "\\" XVID_REG_CHILD, 0, KEY_READ, &hKey); |
RegOpenKeyEx(XVID_REG_KEY, XVID_REG_PARENT "\\" XVID_REG_CHILD, 0, KEY_READ, &hKey); |
358 |
|
|
359 |
/* read integer values */ |
/* read integer values */ |
418 |
memcpy(&config->zones[i], &stmp, sizeof(zone_t)); |
memcpy(&config->zones[i], &stmp, sizeof(zone_t)); |
419 |
} |
} |
420 |
|
|
421 |
if (config->num_threads == 0) |
if (!(config->cpu&XVID_CPU_FORCE)) { |
422 |
config->num_threads = info.num_threads; /* old autodetect */ |
config->cpu = info.cpu_flags; |
423 |
|
config->num_threads = info.num_threads; /* autodetect */ |
424 |
|
} |
425 |
|
|
426 |
RegCloseKey(hKey); |
RegCloseKey(hKey); |
427 |
} |
} |
853 |
int cpu_force; |
int cpu_force; |
854 |
int custom_quant, bvops; |
int custom_quant, bvops; |
855 |
int ar_mode, ar_par; |
int ar_mode, ar_par; |
856 |
|
int qpel_checked, mot_srch_prec, vhq_enabled, bvhq_enabled; |
857 |
|
|
858 |
switch(idd) { |
switch(idd) { |
859 |
case IDD_PROFILE : |
case IDD_PROFILE : |
870 |
EnableDlgWindow(hDlg, IDC_TFF, IsDlgChecked(hDlg, IDC_INTERLACING)); |
EnableDlgWindow(hDlg, IDC_TFF, IsDlgChecked(hDlg, IDC_INTERLACING)); |
871 |
EnableDlgWindow(hDlg, IDC_QPEL, profiles[profile].flags&PROFILE_QPEL); |
EnableDlgWindow(hDlg, IDC_QPEL, profiles[profile].flags&PROFILE_QPEL); |
872 |
EnableDlgWindow(hDlg, IDC_GMC, profiles[profile].flags&PROFILE_GMC); |
EnableDlgWindow(hDlg, IDC_GMC, profiles[profile].flags&PROFILE_GMC); |
873 |
|
EnableDlgWindow(hDlg, IDC_SLICES, profiles[profile].flags&PROFILE_RESYNCMARKER); |
874 |
|
|
875 |
bvops = (profiles[profile].flags&PROFILE_BVOP) && IsDlgChecked(hDlg, IDC_BVOP); |
bvops = (profiles[profile].flags&PROFILE_BVOP) && IsDlgChecked(hDlg, IDC_BVOP); |
876 |
EnableDlgWindow(hDlg, IDC_MAXBFRAMES, bvops); |
EnableDlgWindow(hDlg, IDC_MAXBFRAMES, bvops); |
1172 |
EnableDlgWindow(hDlg, IDC_NUMTHREADS, cpu_force); |
EnableDlgWindow(hDlg, IDC_NUMTHREADS, cpu_force); |
1173 |
EnableDlgWindow(hDlg, IDC_NUMTHREADS_STATIC, cpu_force); |
EnableDlgWindow(hDlg, IDC_NUMTHREADS_STATIC, cpu_force); |
1174 |
break; |
break; |
1175 |
|
|
1176 |
|
case IDD_MOTION: |
1177 |
|
{ |
1178 |
|
const int userdef = (config->quality==quality_table_num); |
1179 |
|
if (userdef) { |
1180 |
|
bvops = (profiles[config->profile].flags&PROFILE_BVOP) && config->use_bvop; |
1181 |
|
qpel_checked = (profiles[config->profile].flags&PROFILE_QPEL) && config->qpel; |
1182 |
|
mot_srch_prec = SendDlgItemMessage(hDlg, IDC_MOTION, CB_GETCURSEL, 0, 0); |
1183 |
|
vhq_enabled = SendDlgItemMessage(hDlg, IDC_VHQ, CB_GETCURSEL, 0, 0); |
1184 |
|
bvhq_enabled = IsDlgButtonChecked(hDlg, IDC_VHQ_BFRAME); |
1185 |
|
EnableDlgWindow(hDlg, IDC_VHQ, mot_srch_prec); |
1186 |
|
EnableDlgWindow(hDlg, IDC_VHQ_BFRAME, mot_srch_prec && bvops && vhq_enabled); |
1187 |
|
EnableDlgWindow(hDlg, IDC_CHROMAME, mot_srch_prec); |
1188 |
|
EnableDlgWindow(hDlg, IDC_TURBO, mot_srch_prec && (bvops || qpel_checked)); |
1189 |
|
EnableDlgWindow(hDlg, IDC_VHQ_METRIC, mot_srch_prec && (vhq_enabled || bvhq_enabled)); |
1190 |
|
EnableDlgWindow(hDlg, IDC_FRAMEDROP, mot_srch_prec); |
1191 |
|
EnableDlgWindow(hDlg, IDC_MAXKEY, mot_srch_prec); |
1192 |
|
} |
1193 |
|
break; |
1194 |
|
} |
1195 |
} |
} |
1196 |
} |
} |
1197 |
|
|
1210 |
CheckDlg(hDlg, IDC_TFF, config->tff); |
CheckDlg(hDlg, IDC_TFF, config->tff); |
1211 |
CheckDlg(hDlg, IDC_QPEL, config->qpel); |
CheckDlg(hDlg, IDC_QPEL, config->qpel); |
1212 |
CheckDlg(hDlg, IDC_GMC, config->gmc); |
CheckDlg(hDlg, IDC_GMC, config->gmc); |
1213 |
|
CheckDlg(hDlg, IDC_SLICES, (config->num_slices != 1)); |
1214 |
CheckDlg(hDlg, IDC_BVOP, config->use_bvop); |
CheckDlg(hDlg, IDC_BVOP, config->use_bvop); |
1215 |
|
|
1216 |
SetDlgItemInt(hDlg, IDC_MAXBFRAMES, config->max_bframes, FALSE); |
SetDlgItemInt(hDlg, IDC_MAXBFRAMES, config->max_bframes, FALSE); |
1294 |
{ |
{ |
1295 |
const int userdef = (config->quality==quality_table_num); |
const int userdef = (config->quality==quality_table_num); |
1296 |
const quality_t* quality_preset = userdef ? &config->quality_user : &quality_table[config->quality]; |
const quality_t* quality_preset = userdef ? &config->quality_user : &quality_table[config->quality]; |
1297 |
|
int bvops = (profiles[config->profile].flags&PROFILE_BVOP) && config->use_bvop; |
1298 |
|
int qpel_checked = (profiles[config->profile].flags&PROFILE_QPEL) && config->qpel; |
1299 |
|
int bvops_qpel_motion = (bvops || qpel_checked) && quality_preset->motion_search; |
1300 |
|
int vhq_or_bvhq = quality_preset->vhq_mode || quality_preset->vhq_bframe; |
1301 |
|
|
1302 |
SendDlgItemMessage(hDlg, IDC_MOTION, CB_SETCURSEL, quality_preset->motion_search, 0); |
SendDlgItemMessage(hDlg, IDC_MOTION, CB_SETCURSEL, quality_preset->motion_search, 0); |
1303 |
SendDlgItemMessage(hDlg, IDC_VHQ, CB_SETCURSEL, quality_preset->vhq_mode, 0); |
SendDlgItemMessage(hDlg, IDC_VHQ, CB_SETCURSEL, quality_preset->vhq_mode, 0); |
1309 |
SetDlgItemInt(hDlg, IDC_MAXKEY, quality_preset->max_key_interval, FALSE); |
SetDlgItemInt(hDlg, IDC_MAXKEY, quality_preset->max_key_interval, FALSE); |
1310 |
|
|
1311 |
EnableDlgWindow(hDlg, IDC_MOTION, userdef); |
EnableDlgWindow(hDlg, IDC_MOTION, userdef); |
1312 |
EnableDlgWindow(hDlg, IDC_VHQ, userdef); |
EnableDlgWindow(hDlg, IDC_VHQ, userdef && quality_preset->motion_search); |
1313 |
EnableDlgWindow(hDlg, IDC_VHQ_METRIC, userdef); |
EnableDlgWindow(hDlg, IDC_VHQ_METRIC, userdef && vhq_or_bvhq); |
1314 |
EnableDlgWindow(hDlg, IDC_VHQ_BFRAME, userdef); |
EnableDlgWindow(hDlg, IDC_VHQ_BFRAME, userdef && bvops); |
1315 |
EnableDlgWindow(hDlg, IDC_CHROMAME, userdef); |
EnableDlgWindow(hDlg, IDC_CHROMAME, userdef && quality_preset->motion_search); |
1316 |
EnableDlgWindow(hDlg, IDC_TURBO, userdef); |
EnableDlgWindow(hDlg, IDC_TURBO, userdef && bvops_qpel_motion); |
1317 |
EnableDlgWindow(hDlg, IDC_FRAMEDROP, userdef); |
EnableDlgWindow(hDlg, IDC_FRAMEDROP, userdef && quality_preset->motion_search); |
1318 |
EnableDlgWindow(hDlg, IDC_MAXKEY, userdef); |
EnableDlgWindow(hDlg, IDC_MAXKEY, userdef && quality_preset->motion_search); |
1319 |
|
|
1320 |
break; |
break; |
1321 |
} |
} |
1322 |
|
|
1398 |
config->tff = IsDlgChecked(hDlg, IDC_TFF); |
config->tff = IsDlgChecked(hDlg, IDC_TFF); |
1399 |
config->qpel = IsDlgChecked(hDlg, IDC_QPEL); |
config->qpel = IsDlgChecked(hDlg, IDC_QPEL); |
1400 |
config->gmc = IsDlgChecked(hDlg, IDC_GMC); |
config->gmc = IsDlgChecked(hDlg, IDC_GMC); |
1401 |
|
config->num_slices = (IsDlgChecked(hDlg, IDC_SLICES) ? ((config->num_slices < 2) ? 0 : config->num_slices) : 1); |
1402 |
|
|
1403 |
config->use_bvop = IsDlgChecked(hDlg, IDC_BVOP); |
config->use_bvop = IsDlgChecked(hDlg, IDC_BVOP); |
1404 |
config->max_bframes = config_get_uint(hDlg, IDC_MAXBFRAMES, config->max_bframes); |
config->max_bframes = config_get_uint(hDlg, IDC_MAXBFRAMES, config->max_bframes); |
1738 |
LOWORD(wParam) == IDC_LEVEL_PROFILE || |
LOWORD(wParam) == IDC_LEVEL_PROFILE || |
1739 |
LOWORD(wParam) == IDC_QUANTTYPE || |
LOWORD(wParam) == IDC_QUANTTYPE || |
1740 |
LOWORD(wParam) == IDC_ASPECT_RATIO || |
LOWORD(wParam) == IDC_ASPECT_RATIO || |
1741 |
|
LOWORD(wParam) == IDC_MOTION || |
1742 |
|
LOWORD(wParam) == IDC_VHQ || |
1743 |
LOWORD(wParam) == IDC_BITRATE_CFORMAT || |
LOWORD(wParam) == IDC_BITRATE_CFORMAT || |
1744 |
LOWORD(wParam) == IDC_BITRATE_AFORMAT || |
LOWORD(wParam) == IDC_BITRATE_AFORMAT || |
1745 |
LOWORD(wParam) == IDC_BITRATE_FPS)) { |
LOWORD(wParam) == IDC_BITRATE_FPS)) { |
2038 |
SendDlgItemMessage(hDlg, IDC_MODE, CB_ADDSTRING, 0, (LPARAM)"Null test speed"); |
SendDlgItemMessage(hDlg, IDC_MODE, CB_ADDSTRING, 0, (LPARAM)"Null test speed"); |
2039 |
#endif |
#endif |
2040 |
|
|
2041 |
for (i=0; i<quality_table_num; i++) |
for (i=0; i<(unsigned int)quality_table_num; i++) |
2042 |
SendDlgItemMessage(hDlg, IDC_QUALITY, CB_ADDSTRING, 0, (LPARAM)quality_table[i].name); |
SendDlgItemMessage(hDlg, IDC_QUALITY, CB_ADDSTRING, 0, (LPARAM)quality_table[i].name); |
2043 |
SendDlgItemMessage(hDlg, IDC_QUALITY, CB_ADDSTRING, 0, (LPARAM)QUALITY_USER_STRING); |
SendDlgItemMessage(hDlg, IDC_QUALITY, CB_ADDSTRING, 0, (LPARAM)QUALITY_USER_STRING); |
2044 |
|
|