📄 config.c.svn-base
字号:
(LPARAM) MAKELONG( 0, BITRATE_MAX ) ); EnableWindow( GetDlgItem( hTabs[0], IDC_UPDATESTATS ), FALSE ); EnableWindow( GetDlgItem( hTabs[0], IDC_STATSFILE ), FALSE ); EnableWindow( GetDlgItem( hTabs[0], IDC_STATSFILE_BROWSE ), FALSE ); break; case 1 : /* 1 Pass, Quantizer Based */ SetDlgItemText( hTabs[0], IDC_BITRATELABEL, "Quantizer" ); SetDlgItemText( hTabs[0], IDC_BITRATELOW, "0 (High Quality)" ); sprintf(szTmp, "(Low Quality) %d", QUANT_MAX); SetDlgItemText( hTabs[0], IDC_BITRATEHIGH, szTmp ); SendDlgItemMessage( hTabs[0], IDC_BITRATESLIDER, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG( 0, QUANT_MAX ) ); EnableWindow( GetDlgItem( hTabs[0], IDC_UPDATESTATS ), FALSE ); EnableWindow( GetDlgItem( hTabs[0], IDC_STATSFILE ), FALSE ); EnableWindow( GetDlgItem( hTabs[0], IDC_STATSFILE_BROWSE ), FALSE ); break; case 2 : /* 2 Pass */ SetDlgItemText( hTabs[0], IDC_BITRATELABEL, "Target Bitrate" ); SetDlgItemText( hTabs[0], IDC_BITRATELOW, "0" ); sprintf(szTmp, "%d", BITRATE_MAX); SetDlgItemText( hTabs[0], IDC_BITRATEHIGH, szTmp ); SendDlgItemMessage( hTabs[0], IDC_BITRATESLIDER, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG( 0, BITRATE_MAX ) ); EnableWindow( GetDlgItem( hTabs[0], IDC_UPDATESTATS ), TRUE ); EnableWindow( GetDlgItem( hTabs[0], IDC_STATSFILE ), TRUE ); EnableWindow( GetDlgItem( hTabs[0], IDC_STATSFILE_BROWSE ), TRUE ); break; } EnableWindow( GetDlgItem( hTabs[1], IDC_DIRECTPRED ), config->i_bframe > 0 ); EnableWindow( GetDlgItem( hTabs[3], IDC_INLOOP_A ), config->b_filter ); EnableWindow( GetDlgItem( hTabs[3], IDC_INLOOP_B ), config->b_filter ); EnableWindow( GetDlgItem( hTabs[2], IDC_P8X8 ), config->b_psub16x16 ); EnableWindow( GetDlgItem( hTabs[2], IDC_I8X8 ), config->b_dct8x8 ); EnableWindow( GetDlgItem( hTabs[2], IDC_BREFS ), config->i_bframe > 1 ); EnableWindow( GetDlgItem( hTabs[2], IDC_WBPRED ), config->i_bframe > 1 ); EnableWindow( GetDlgItem( hTabs[2], IDC_BADAPT ), config->i_bframe > 0 ); EnableWindow( GetDlgItem( hTabs[2], IDC_BBIAS ), config->i_bframe > 0 ); EnableWindow( GetDlgItem( hTabs[2], IDC_BBIASSLIDER ), config->i_bframe > 0 ); EnableWindow( GetDlgItem( hTabs[3], IDC_MERANGE ), config->i_me_method > 1 ); EnableWindow( GetDlgItem( hTabs[3], IDC_CHROMAME ), config->i_subpel_refine >= 4 );}void tabs_update_items( HWND hDlg, CONFIG * config ){ char fourcc[5]; /* update bitrate tab */ if (SendMessage( GetDlgItem(hTabs[0],IDC_BITRATEMODE), CB_GETCOUNT, 0, 0 ) == 0) { SendDlgItemMessage(hTabs[0], IDC_BITRATEMODE, CB_ADDSTRING, 0, (LPARAM)"Single Pass - Bitrate"); SendDlgItemMessage(hTabs[0], IDC_BITRATEMODE, CB_ADDSTRING, 0, (LPARAM)"Single Pass - Quantizer"); SendDlgItemMessage(hTabs[0], IDC_BITRATEMODE, CB_ADDSTRING, 0, (LPARAM)"Multipass - First Pass"); SendDlgItemMessage(hTabs[0], IDC_BITRATEMODE, CB_ADDSTRING, 0, (LPARAM)"Multipass - First Pass (fast)"); SendDlgItemMessage(hTabs[0], IDC_BITRATEMODE, CB_ADDSTRING, 0, (LPARAM)"Multipass - Nth Pass"); } switch( config->i_encoding_type ) { case 0 : /* 1 Pass, Bitrate Based */ SendDlgItemMessage(hTabs[0], IDC_BITRATEMODE, CB_SETCURSEL, 0, 0); SetDlgItemInt( hTabs[0], IDC_BITRATEEDIT, config->bitrate, FALSE ); SendDlgItemMessage(hTabs[0], IDC_BITRATESLIDER, TBM_SETPOS, TRUE, config->bitrate ); break; case 1 : /* 1 Pass, Quantizer Based */ SendDlgItemMessage(hTabs[0], IDC_BITRATEMODE, CB_SETCURSEL, 1, 0); SetDlgItemInt( hTabs[0], IDC_BITRATEEDIT, config->i_qp, FALSE ); SendDlgItemMessage(hTabs[0], IDC_BITRATESLIDER, TBM_SETPOS, TRUE, config->i_qp ); break; case 2 : /* 2 Pass */ if (config->i_pass >= 2) { SendDlgItemMessage(hTabs[0], IDC_BITRATEMODE, CB_SETCURSEL, 4, 0); } else if (config->b_fast1pass) { SendDlgItemMessage(hTabs[0], IDC_BITRATEMODE, CB_SETCURSEL, 3, 0); } else { SendDlgItemMessage(hTabs[0], IDC_BITRATEMODE, CB_SETCURSEL, 2, 0); } SetDlgItemInt( hTabs[0], IDC_BITRATEEDIT, config->i_2passbitrate, FALSE ); SendDlgItemMessage(hTabs[0], IDC_BITRATESLIDER, TBM_SETPOS, TRUE, config->i_2passbitrate ); break; } CheckDlgButton( hTabs[0], IDC_UPDATESTATS, config->b_updatestats ? BST_CHECKED : BST_UNCHECKED ); SetDlgItemText( hTabs[0], IDC_STATSFILE, config->stats ); /* update rate control tab */ if (SendMessage( GetDlgItem(hTabs[1],IDC_DIRECTPRED), CB_GETCOUNT, 0, 0 ) == 0) { SendDlgItemMessage(hTabs[1], IDC_DIRECTPRED, CB_ADDSTRING, 0, (LPARAM)"Spatial"); SendDlgItemMessage(hTabs[1], IDC_DIRECTPRED, CB_ADDSTRING, 0, (LPARAM)"Temporal"); } SetDlgItemInt( hTabs[1], IDC_QPMIN, config->i_qp_min, FALSE ); SetDlgItemInt( hTabs[1], IDC_QPMAX, config->i_qp_max, FALSE ); SetDlgItemInt( hTabs[1], IDC_QPSTEP, config->i_qp_step, FALSE ); SetDlgItemInt( hTabs[1], IDC_IPRATIO, config->i_key_boost, FALSE ); SetDlgItemInt( hTabs[1], IDC_PBRATIO, config->i_b_red, FALSE ); SetDlgItemInt( hTabs[1], IDC_CURVECOMP, config->i_curve_comp, FALSE ); SendDlgItemMessage(hTabs[1], IDC_DIRECTPRED, CB_SETCURSEL, (config->i_direct_mv_pred), 0); /* update debug tab */ if (SendMessage( GetDlgItem(hTabs[3],IDC_LOG), CB_GETCOUNT, 0, 0 ) == 0) { SendDlgItemMessage(hTabs[3], IDC_LOG, CB_ADDSTRING, 0, (LPARAM)"None"); SendDlgItemMessage(hTabs[3], IDC_LOG, CB_ADDSTRING, 0, (LPARAM)"Error"); SendDlgItemMessage(hTabs[3], IDC_LOG, CB_ADDSTRING, 0, (LPARAM)"Warning"); SendDlgItemMessage(hTabs[3], IDC_LOG, CB_ADDSTRING, 0, (LPARAM)"Info"); SendDlgItemMessage(hTabs[3], IDC_LOG, CB_ADDSTRING, 0, (LPARAM)"Debug"); } SendDlgItemMessage(hTabs[3], IDC_LOG, CB_SETCURSEL, (config->i_log_level), 0); memcpy( fourcc, config->fcc, 4 ); fourcc[4] = '\0'; SetDlgItemText( hTabs[3], IDC_FOURCC, fourcc ); /* update misc. tab */ SetDlgItemInt( hTabs[3], IDC_THREADEDIT, config->i_threads, FALSE ); CheckDlgButton( hTabs[3],IDC_CABAC, config->b_cabac ? BST_CHECKED : BST_UNCHECKED ); CheckDlgButton( hTabs[3],IDC_LOOPFILTER, config->b_filter ? BST_CHECKED: BST_UNCHECKED ); SetDlgItemInt( hTabs[3], IDC_SAR_W, config->i_sar_width, FALSE ); SetDlgItemInt( hTabs[3], IDC_SAR_H, config->i_sar_height, FALSE ); SendDlgItemMessage( hTabs[3], IDC_INLOOP_A, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG( -6, 6 ) ); SendDlgItemMessage( hTabs[3], IDC_INLOOP_A, TBM_SETPOS, TRUE, config->i_inloop_a ); set_dlgitem_int( hTabs[3], IDC_LOOPA_TXT, config->i_inloop_a); SendDlgItemMessage( hTabs[3], IDC_INLOOP_B, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG( -6, 6 ) ); SendDlgItemMessage( hTabs[3], IDC_INLOOP_B, TBM_SETPOS, TRUE, config->i_inloop_b ); set_dlgitem_int( hTabs[3], IDC_LOOPB_TXT, config->i_inloop_b); /* update i/p-frames tab */ CheckDlgButton( hTabs[2],IDC_P16X16, config->b_psub16x16 ? BST_CHECKED: BST_UNCHECKED ); CheckDlgButton( hTabs[2],IDC_P8X8, config->b_psub8x8 ? BST_CHECKED: BST_UNCHECKED ); CheckDlgButton( hTabs[2],IDC_I4X4, config->b_i4x4 ? BST_CHECKED: BST_UNCHECKED ); CheckDlgButton( hTabs[2],IDC_I8X8, config->b_i8x8 ? BST_CHECKED: BST_UNCHECKED ); CheckDlgButton( hTabs[2],IDC_DCT8X8, config->b_dct8x8 ? BST_CHECKED: BST_UNCHECKED ); CheckDlgButton( hTabs[2],IDC_MIXEDREF, config->b_mixedref ? BST_CHECKED: BST_UNCHECKED ); SetDlgItemInt( hTabs[2], IDC_REFFRAMES, config->i_refmax, FALSE ); /* update b-frames tab */ CheckDlgButton( hTabs[2],IDC_WBPRED, config->b_b_wpred ? BST_CHECKED: BST_UNCHECKED ); CheckDlgButton( hTabs[2],IDC_BADAPT, config->b_bframe_adaptive ? BST_CHECKED: BST_UNCHECKED ); CheckDlgButton( hTabs[2],IDC_BREFS, config->b_b_refs ? BST_CHECKED: BST_UNCHECKED ); CheckDlgButton( hTabs[2],IDC_B16X16, config->b_bsub16x16 ? BST_CHECKED: BST_UNCHECKED ); SetDlgItemInt( hTabs[2], IDC_BFRAME, config->i_bframe, FALSE ); SetDlgItemInt( hTabs[2], IDC_BBIAS, config->i_bframe_bias, TRUE ); SendDlgItemMessage( hTabs[2], IDC_BBIASSLIDER, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG( -100, 100 ) ); SendDlgItemMessage( hTabs[2], IDC_BBIASSLIDER, TBM_SETPOS, TRUE, config->i_bframe_bias ); /* update scene-cuts tab */ SetDlgItemInt( hTabs[1], IDC_KEYINTMIN, config->i_keyint_min, FALSE ); SetDlgItemInt( hTabs[1], IDC_KEYINTMAX, config->i_keyint_max, FALSE ); SetDlgItemInt( hTabs[1], IDC_SCENECUT, config->i_scenecut_threshold, TRUE ); /* update motion estimation tab */ if (SendMessage( GetDlgItem(hTabs[3],IDC_ME_METHOD), CB_GETCOUNT, 0, 0 ) == 0) { SendDlgItemMessage(hTabs[3], IDC_ME_METHOD, CB_ADDSTRING, 0, (LPARAM)"Diamond Search"); SendDlgItemMessage(hTabs[3], IDC_ME_METHOD, CB_ADDSTRING, 0, (LPARAM)"Hexagonal Search"); SendDlgItemMessage(hTabs[3], IDC_ME_METHOD, CB_ADDSTRING, 0, (LPARAM)"Uneven Multi-Hexagon"); SendDlgItemMessage(hTabs[3], IDC_ME_METHOD, CB_ADDSTRING, 0, (LPARAM)"Exhaustive Search"); SendDlgItemMessage(hTabs[3], IDC_SUBPEL, CB_ADDSTRING, 0, (LPARAM)"1 (Fastest)"); SendDlgItemMessage(hTabs[3], IDC_SUBPEL, CB_ADDSTRING, 0, (LPARAM)"2"); SendDlgItemMessage(hTabs[3], IDC_SUBPEL, CB_ADDSTRING, 0, (LPARAM)"3"); SendDlgItemMessage(hTabs[3], IDC_SUBPEL, CB_ADDSTRING, 0, (LPARAM)"4"); SendDlgItemMessage(hTabs[3], IDC_SUBPEL, CB_ADDSTRING, 0, (LPARAM)"5 (High Quality)"); SendDlgItemMessage(hTabs[3], IDC_SUBPEL, CB_ADDSTRING, 0, (LPARAM)"6 (RDO - Slowest)"); } SendDlgItemMessage(hTabs[3], IDC_ME_METHOD, CB_SETCURSEL, (config->i_me_method), 0); SendDlgItemMessage(hTabs[3], IDC_SUBPEL, CB_SETCURSEL, (config->i_subpel_refine), 0); SetDlgItemInt( hTabs[3], IDC_MERANGE, config->i_me_range, FALSE ); CheckDlgButton( hTabs[3],IDC_CHROMAME, config->b_chroma_me ? BST_CHECKED: BST_UNCHECKED );}BOOL CALLBACK callback_tabs( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ){ CONFIG* config = (CONFIG*)GetWindowLong(hDlg, GWL_USERDATA); switch( uMsg ) { case WM_INITDIALOG : SetWindowLong( hDlg, GWL_USERDATA, lParam ); config = (CONFIG*)lParam; break; case WM_COMMAND: switch ( HIWORD( wParam ) ) { case BN_CLICKED : switch( LOWORD( wParam ) ) { case IDC_CABAC : config->b_cabac = ( IsDlgButtonChecked( hTabs[3], IDC_CABAC ) == BST_CHECKED ); break; case IDC_LOOPFILTER : config->b_filter = ( IsDlgButtonChecked( hTabs[3], IDC_LOOPFILTER ) == BST_CHECKED ); EnableWindow( GetDlgItem( hTabs[3], IDC_INLOOP_A ), config->b_filter ); EnableWindow( GetDlgItem( hTabs[3], IDC_INLOOP_B ), config->b_filter ); break; case IDC_BREFS : config->b_b_refs = ( IsDlgButtonChecked( hTabs[2], IDC_BREFS ) == BST_CHECKED ); break; case IDC_WBPRED : config->b_b_wpred = ( IsDlgButtonChecked( hTabs[2], IDC_WBPRED ) == BST_CHECKED ); break; case IDC_BADAPT : config->b_bframe_adaptive = ( IsDlgButtonChecked( hTabs[2], IDC_BADAPT ) == BST_CHECKED ); break; case IDC_P16X16 : config->b_psub16x16 = ( IsDlgButtonChecked( hTabs[2], IDC_P16X16 ) == BST_CHECKED ); EnableWindow( GetDlgItem( hTabs[2], IDC_P8X8 ), config->b_psub16x16 ); break; case IDC_P8X8 : config->b_psub8x8 = ( IsDlgButtonChecked( hTabs[2], IDC_P8X8 ) == BST_CHECKED ); break; case IDC_B16X16 : config->b_bsub16x16 = ( IsDlgButtonChecked( hTabs[2], IDC_B16X16 ) == BST_CHECKED ); break; case IDC_I4X4 : config->b_i4x4 = ( IsDlgButtonChecked( hTabs[2], IDC_I4X4 ) == BST_CHECKED ); break; case IDC_I8X8 : config->b_i8x8 = ( IsDlgButtonChecked( hTabs[2], IDC_I8X8 ) == BST_CHECKED ); break; case IDC_DCT8X8 : config->b_dct8x8 = ( IsDlgButtonChecked( hTabs[2], IDC_DCT8X8 ) == BST_CHECKED ); EnableWindow( GetDlgItem( hTabs[2], IDC_I8X8 ), config->b_dct8x8 ); break; case IDC_MIXEDREF : config->b_mixedref = ( IsDlgButtonChecked( hTabs[2], IDC_MIXEDREF ) == BST_CHECKED ); break; case IDC_CHROMAME : config->b_chroma_me = ( IsDlgButtonChecked( hTabs[3], IDC_CHROMAME ) == BST_CHECKED ); break; case IDC_UPDATESTATS : config->b_updatestats = ( IsDlgButtonChecked( hTabs[0], IDC_UPDATESTATS ) == BST_CHECKED ); break; case IDC_STATSFILE_BROWSE : { OPENFILENAME ofn; char tmp[MAX_PATH]; GetDlgItemText( hTabs[0], IDC_STATSFILE, tmp, MAX_PATH ); memset( &ofn, 0, sizeof( OPENFILENAME ) ); ofn.lStructSize = sizeof( OPENFILENAME ); ofn.hwndOwner = hDlg; ofn.lpstrFilter = "Statsfile (*.stats)\0*.stats\0All files (*.*)\0*.*\0\0"; ofn.lpstrFile = tmp; ofn.nMaxFile = MAX_PATH-4; ofn.Flags = OFN_PATHMUSTEXIST; if( config->i_pass == 1 ) ofn.Flags |= OFN_OVERWRITEPROMPT; else ofn.Flags |= OFN_FILEMUSTEXIST; if( ( config->i_pass == 1 && GetSaveFileName( &ofn ) ) || ( config->i_pass > 1 && GetOpenFileName( &ofn ) ) ) SetDlgItemText( hTabs[0], IDC_STATSFILE, tmp ); } break; } break; case EN_CHANGE : switch( LOWORD( wParam ) ) { case IDC_FOURCC : GetDlgItemText( hTabs[3], IDC_FOURCC, config->fcc, 5 ); break; case IDC_THREADEDIT : config->i_threads = GetDlgItemInt( hTabs[3], IDC_THREADEDIT, FALSE, FALSE ); if (config->i_threads < 1) { config->i_threads = 1; SetDlgItemInt( hTabs[3], IDC_THREADEDIT, config->i_threads, FALSE ); } else if (config->i_threads > 4) { config->i_threads = 4; SetDlgItemInt( hTabs[3], IDC_THREADEDIT, config->i_threads, FALSE ); } break; case IDC_BITRATEEDIT : switch (config->i_encoding_type) { case 0: config->bitrate = GetDlgItemInt( hTabs[0], IDC_BITRATEEDIT, FALSE, FALSE ); SendDlgItemMessage( hTabs[0], IDC_BITRATESLIDER, TBM_SETPOS, TRUE, config->bitrate ); break; case 1: config->i_qp = GetDlgItemInt( hTabs[0], IDC_BITRATEEDIT, FALSE, FALSE ); SendDlgItemMessage( hTabs[0], IDC_BITRATESLIDER, TBM_SETPOS, TRUE, config->i_qp ); break; case 2: config->i_2passbitrate = GetDlgItemInt( hTabs[0], IDC_BITRATEEDIT, FALSE, FALSE ); SendDlgItemMessage( hTabs[0], IDC_BITRATESLIDER, TBM_SETPOS, TRUE, config->i_2passbitrate ); break; } break; case IDC_STATSFILE : if( GetDlgItemText( hTabs[0], IDC_STATSFILE, config->stats, MAX_PATH ) == 0 ) lstrcpy( config->stats, ".\\x264.stats" ); break; case IDC_KEYINTMIN : config->i_keyint_min = GetDlgItemInt( hTabs[1], IDC_KEYINTMIN, FALSE, FALSE ); break; case IDC_KEYINTMAX : config->i_keyint_max = GetDlgItemInt( hTabs[1], IDC_KEYINTMAX, FALSE, FALSE ); break; case IDC_SCENECUT : config->i_scenecut_threshold = GetDlgItemInt( hTabs[1], IDC_SCENECUT, FALSE, TRUE ); if( config->i_scenecut_threshold > 100 ) { config->i_scenecut_threshold = 100; SetDlgItemInt( hTabs[1], IDC_SCENECUT, config->i_scenecut_threshold, TRUE ); } else if ( config->i_scenecut_threshold < -1 ) { config->i_scenecut_threshold = -1; SetDlgItemInt( hTabs[1], IDC_SCENECUT, config->i_scenecut_threshold, TRUE ); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -