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.41 2010-12-02 06:46:07 Isibaar Exp $ |
* $Id: config.c,v 1.44 2010-12-22 16:52:12 Isibaar Exp $ |
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}, |
249 |
/* motion */ |
/* motion */ |
250 |
{"motion_search", ®.quality_user.motion_search, 6}, |
{"motion_search", ®.quality_user.motion_search, 6}, |
251 |
{"vhq_mode", ®.quality_user.vhq_mode, 1}, |
{"vhq_mode", ®.quality_user.vhq_mode, 1}, |
252 |
|
{"vhq_metric", ®.quality_user.vhq_metric, 0}, |
253 |
{"vhq_bframe", ®.quality_user.vhq_bframe, 0}, |
{"vhq_bframe", ®.quality_user.vhq_bframe, 0}, |
254 |
{"chromame", ®.quality_user.chromame, 1}, |
{"chromame", ®.quality_user.chromame, 1}, |
255 |
{"turbo", ®.quality_user.turbo, 0}, |
{"turbo", ®.quality_user.turbo, 0}, |
256 |
{"max_key_interval", ®.quality_user.max_key_interval, 300}, |
{"max_key_interval", ®.quality_user.max_key_interval, 250}, |
257 |
{"frame_drop_ratio", ®.quality_user.frame_drop_ratio, 0}, |
{"frame_drop_ratio", ®.quality_user.frame_drop_ratio, 0}, |
258 |
|
|
259 |
/* quant */ |
/* quant */ |
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}, |
354 |
FreeLibrary(m_hdll); |
FreeLibrary(m_hdll); |
355 |
} |
} |
356 |
|
|
|
reg.cpu = info.cpu_flags; |
|
|
|
|
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->cpu&XVID_CPU_FORCE)) { |
422 |
|
config->cpu = info.cpu_flags; |
423 |
|
config->num_threads = info.num_threads; /* autodetect */ |
424 |
|
} |
425 |
|
|
426 |
RegCloseKey(hKey); |
RegCloseKey(hKey); |
427 |
} |
} |
428 |
|
|
825 |
SendDlgItemMessage(hDlg, IDC_VHQ, CB_ADDSTRING, 0, (LPARAM)"2 - Limited Search"); |
SendDlgItemMessage(hDlg, IDC_VHQ, CB_ADDSTRING, 0, (LPARAM)"2 - Limited Search"); |
826 |
SendDlgItemMessage(hDlg, IDC_VHQ, CB_ADDSTRING, 0, (LPARAM)"3 - Medium Search"); |
SendDlgItemMessage(hDlg, IDC_VHQ, CB_ADDSTRING, 0, (LPARAM)"3 - Medium Search"); |
827 |
SendDlgItemMessage(hDlg, IDC_VHQ, CB_ADDSTRING, 0, (LPARAM)"4 - Wide Search"); |
SendDlgItemMessage(hDlg, IDC_VHQ, CB_ADDSTRING, 0, (LPARAM)"4 - Wide Search"); |
828 |
|
|
829 |
|
SendDlgItemMessage(hDlg, IDC_VHQ_METRIC, CB_ADDSTRING, 0, (LPARAM)"0 - PSNR"); |
830 |
|
SendDlgItemMessage(hDlg, IDC_VHQ_METRIC, CB_ADDSTRING, 0, (LPARAM)"1 - PSNR-HVS-M"); |
831 |
break; |
break; |
832 |
|
|
833 |
case IDD_ENC : |
case IDD_ENC : |
869 |
EnableDlgWindow(hDlg, IDC_TFF, IsDlgChecked(hDlg, IDC_INTERLACING)); |
EnableDlgWindow(hDlg, IDC_TFF, IsDlgChecked(hDlg, IDC_INTERLACING)); |
870 |
EnableDlgWindow(hDlg, IDC_QPEL, profiles[profile].flags&PROFILE_QPEL); |
EnableDlgWindow(hDlg, IDC_QPEL, profiles[profile].flags&PROFILE_QPEL); |
871 |
EnableDlgWindow(hDlg, IDC_GMC, profiles[profile].flags&PROFILE_GMC); |
EnableDlgWindow(hDlg, IDC_GMC, profiles[profile].flags&PROFILE_GMC); |
872 |
|
EnableDlgWindow(hDlg, IDC_SLICES, profiles[profile].flags&PROFILE_RESYNCMARKER); |
873 |
|
|
874 |
bvops = (profiles[profile].flags&PROFILE_BVOP) && IsDlgChecked(hDlg, IDC_BVOP); |
bvops = (profiles[profile].flags&PROFILE_BVOP) && IsDlgChecked(hDlg, IDC_BVOP); |
875 |
EnableDlgWindow(hDlg, IDC_MAXBFRAMES, bvops); |
EnableDlgWindow(hDlg, IDC_MAXBFRAMES, bvops); |
1168 |
EnableDlgWindow(hDlg, IDC_CPU_SSE4, cpu_force); |
EnableDlgWindow(hDlg, IDC_CPU_SSE4, cpu_force); |
1169 |
EnableDlgWindow(hDlg, IDC_CPU_3DNOW, cpu_force); |
EnableDlgWindow(hDlg, IDC_CPU_3DNOW, cpu_force); |
1170 |
EnableDlgWindow(hDlg, IDC_CPU_3DNOWEXT, cpu_force); |
EnableDlgWindow(hDlg, IDC_CPU_3DNOWEXT, cpu_force); |
1171 |
|
EnableDlgWindow(hDlg, IDC_NUMTHREADS, cpu_force); |
1172 |
|
EnableDlgWindow(hDlg, IDC_NUMTHREADS_STATIC, cpu_force); |
1173 |
break; |
break; |
1174 |
} |
} |
1175 |
} |
} |
1189 |
CheckDlg(hDlg, IDC_TFF, config->tff); |
CheckDlg(hDlg, IDC_TFF, config->tff); |
1190 |
CheckDlg(hDlg, IDC_QPEL, config->qpel); |
CheckDlg(hDlg, IDC_QPEL, config->qpel); |
1191 |
CheckDlg(hDlg, IDC_GMC, config->gmc); |
CheckDlg(hDlg, IDC_GMC, config->gmc); |
1192 |
|
CheckDlg(hDlg, IDC_SLICES, (config->num_slices != 1)); |
1193 |
CheckDlg(hDlg, IDC_BVOP, config->use_bvop); |
CheckDlg(hDlg, IDC_BVOP, config->use_bvop); |
1194 |
|
|
1195 |
SetDlgItemInt(hDlg, IDC_MAXBFRAMES, config->max_bframes, FALSE); |
SetDlgItemInt(hDlg, IDC_MAXBFRAMES, config->max_bframes, FALSE); |
1276 |
|
|
1277 |
SendDlgItemMessage(hDlg, IDC_MOTION, CB_SETCURSEL, quality_preset->motion_search, 0); |
SendDlgItemMessage(hDlg, IDC_MOTION, CB_SETCURSEL, quality_preset->motion_search, 0); |
1278 |
SendDlgItemMessage(hDlg, IDC_VHQ, CB_SETCURSEL, quality_preset->vhq_mode, 0); |
SendDlgItemMessage(hDlg, IDC_VHQ, CB_SETCURSEL, quality_preset->vhq_mode, 0); |
1279 |
|
SendDlgItemMessage(hDlg, IDC_VHQ_METRIC, CB_SETCURSEL, quality_preset->vhq_metric, 0); |
1280 |
CheckDlg(hDlg, IDC_VHQ_BFRAME, quality_preset->vhq_bframe); |
CheckDlg(hDlg, IDC_VHQ_BFRAME, quality_preset->vhq_bframe); |
1281 |
CheckDlg(hDlg, IDC_CHROMAME, quality_preset->chromame); |
CheckDlg(hDlg, IDC_CHROMAME, quality_preset->chromame); |
1282 |
CheckDlg(hDlg, IDC_TURBO, quality_preset->turbo); |
CheckDlg(hDlg, IDC_TURBO, quality_preset->turbo); |
1285 |
|
|
1286 |
EnableDlgWindow(hDlg, IDC_MOTION, userdef); |
EnableDlgWindow(hDlg, IDC_MOTION, userdef); |
1287 |
EnableDlgWindow(hDlg, IDC_VHQ, userdef); |
EnableDlgWindow(hDlg, IDC_VHQ, userdef); |
1288 |
|
EnableDlgWindow(hDlg, IDC_VHQ_METRIC, userdef); |
1289 |
EnableDlgWindow(hDlg, IDC_VHQ_BFRAME, userdef); |
EnableDlgWindow(hDlg, IDC_VHQ_BFRAME, userdef); |
1290 |
EnableDlgWindow(hDlg, IDC_CHROMAME, userdef); |
EnableDlgWindow(hDlg, IDC_CHROMAME, userdef); |
1291 |
EnableDlgWindow(hDlg, IDC_TURBO, userdef); |
EnableDlgWindow(hDlg, IDC_TURBO, userdef); |
1330 |
CheckRadioButton(hDlg, IDC_CPU_AUTO, IDC_CPU_FORCE, |
CheckRadioButton(hDlg, IDC_CPU_AUTO, IDC_CPU_FORCE, |
1331 |
config->cpu & XVID_CPU_FORCE ? IDC_CPU_FORCE : IDC_CPU_AUTO ); |
config->cpu & XVID_CPU_FORCE ? IDC_CPU_FORCE : IDC_CPU_AUTO ); |
1332 |
set_dlgitem_hex(hDlg, IDC_DEBUG, config->debug); |
set_dlgitem_hex(hDlg, IDC_DEBUG, config->debug); |
1333 |
|
SetDlgItemInt(hDlg, IDC_NUMTHREADS, config->num_threads, FALSE); |
1334 |
break; |
break; |
1335 |
|
|
1336 |
case IDD_ENC: |
case IDD_ENC: |
|
SetDlgItemInt(hDlg, IDC_NUMTHREADS, config->num_threads, FALSE); |
|
1337 |
if(profiles[config->profile].flags & PROFILE_XVID) |
if(profiles[config->profile].flags & PROFILE_XVID) |
1338 |
SendDlgItemMessage(hDlg, IDC_FOURCC, CB_SETCURSEL, 0, 0); |
SendDlgItemMessage(hDlg, IDC_FOURCC, CB_SETCURSEL, 0, 0); |
1339 |
else |
else |
1372 |
config->tff = IsDlgChecked(hDlg, IDC_TFF); |
config->tff = IsDlgChecked(hDlg, IDC_TFF); |
1373 |
config->qpel = IsDlgChecked(hDlg, IDC_QPEL); |
config->qpel = IsDlgChecked(hDlg, IDC_QPEL); |
1374 |
config->gmc = IsDlgChecked(hDlg, IDC_GMC); |
config->gmc = IsDlgChecked(hDlg, IDC_GMC); |
1375 |
|
config->num_slices = (IsDlgChecked(hDlg, IDC_SLICES) ? ((config->num_slices < 2) ? 0 : config->num_slices) : 1); |
1376 |
|
|
1377 |
config->use_bvop = IsDlgChecked(hDlg, IDC_BVOP); |
config->use_bvop = IsDlgChecked(hDlg, IDC_BVOP); |
1378 |
config->max_bframes = config_get_uint(hDlg, IDC_MAXBFRAMES, config->max_bframes); |
config->max_bframes = config_get_uint(hDlg, IDC_MAXBFRAMES, config->max_bframes); |
1490 |
if (config->quality==quality_table_num) { |
if (config->quality==quality_table_num) { |
1491 |
config->quality_user.motion_search = SendDlgItemMessage(hDlg, IDC_MOTION, CB_GETCURSEL, 0, 0); |
config->quality_user.motion_search = SendDlgItemMessage(hDlg, IDC_MOTION, CB_GETCURSEL, 0, 0); |
1492 |
config->quality_user.vhq_mode = SendDlgItemMessage(hDlg, IDC_VHQ, CB_GETCURSEL, 0, 0); |
config->quality_user.vhq_mode = SendDlgItemMessage(hDlg, IDC_VHQ, CB_GETCURSEL, 0, 0); |
1493 |
|
config->quality_user.vhq_metric = SendDlgItemMessage(hDlg, IDC_VHQ_METRIC, CB_GETCURSEL, 0, 0); |
1494 |
config->quality_user.vhq_bframe = IsDlgButtonChecked(hDlg, IDC_VHQ_BFRAME); |
config->quality_user.vhq_bframe = IsDlgButtonChecked(hDlg, IDC_VHQ_BFRAME); |
1495 |
config->quality_user.chromame = IsDlgChecked(hDlg, IDC_CHROMAME); |
config->quality_user.chromame = IsDlgChecked(hDlg, IDC_CHROMAME); |
1496 |
config->quality_user.turbo = IsDlgChecked(hDlg, IDC_TURBO); |
config->quality_user.turbo = IsDlgChecked(hDlg, IDC_TURBO); |
1533 |
config->cpu |= IsDlgChecked(hDlg, IDC_CPU_3DNOWEXT) ? XVID_CPU_3DNOWEXT : 0; |
config->cpu |= IsDlgChecked(hDlg, IDC_CPU_3DNOWEXT) ? XVID_CPU_3DNOWEXT : 0; |
1534 |
config->cpu |= IsDlgChecked(hDlg, IDC_CPU_FORCE) ? XVID_CPU_FORCE : 0; |
config->cpu |= IsDlgChecked(hDlg, IDC_CPU_FORCE) ? XVID_CPU_FORCE : 0; |
1535 |
config->debug = get_dlgitem_hex(hDlg, IDC_DEBUG, config->debug); |
config->debug = get_dlgitem_hex(hDlg, IDC_DEBUG, config->debug); |
1536 |
|
config->num_threads = min(16, config_get_uint(hDlg, IDC_NUMTHREADS, config->num_threads)); |
1537 |
break; |
break; |
1538 |
|
|
1539 |
case IDD_ENC : |
case IDD_ENC : |
|
config->num_threads = min(4, config_get_uint(hDlg, IDC_NUMTHREADS, config->num_threads)); |
|
1540 |
if(!(profiles[config->profile].flags & PROFILE_XVID)) |
if(!(profiles[config->profile].flags & PROFILE_XVID)) |
1541 |
config->fourcc_used = SendDlgItemMessage(hDlg, IDC_FOURCC, CB_GETCURSEL, 0, 0); |
config->fourcc_used = SendDlgItemMessage(hDlg, IDC_FOURCC, CB_GETCURSEL, 0, 0); |
1542 |
config->vop_debug = IsDlgChecked(hDlg, IDC_VOPDEBUG); |
config->vop_debug = IsDlgChecked(hDlg, IDC_VOPDEBUG); |