📄 config.c.svn-base
字号:
{ OPENFILENAME ofn; char tmp[MAX_PATH]; GetDlgItemText( hDlg, 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( hDlg, IDC_STATSFILE, tmp ); } break; } break; case EN_CHANGE : switch( LOWORD( wParam ) ) { case IDC_BITRATEEDIT : config->bitrate = GetDlgItemInt( hDlg, IDC_BITRATEEDIT, FALSE, FALSE ); SendDlgItemMessage( hDlg, IDC_BITRATESLIDER, TBM_SETPOS, TRUE, config->bitrate ); break; case IDC_QUANTEDIT : config->i_qp = GetDlgItemInt( hDlg, IDC_QUANTEDIT, FALSE, FALSE ); SendDlgItemMessage( hDlg, IDC_QUANTSLIDER, TBM_SETPOS, TRUE, config->i_qp ); break; case IDC_2PASSBITRATE : config->i_2passbitrate = GetDlgItemInt( hDlg, IDC_2PASSBITRATE, FALSE, FALSE ); SendDlgItemMessage( hDlg, IDC_2PASSBITRATE_S, TBM_SETPOS, TRUE, config->i_2passbitrate ); break; case IDC_STATSFILE : if( GetDlgItemText( hDlg, IDC_STATSFILE, config->stats, MAX_PATH ) == 0 ) lstrcpy( config->stats, ".\\x264.stats" ); break; } break; default: break; } break; case WM_HSCROLL : if( (HWND) lParam == GetDlgItem( hDlg, IDC_BITRATESLIDER ) ) { config->bitrate = SendDlgItemMessage( hDlg, IDC_BITRATESLIDER, TBM_GETPOS, 0, 0 ); SetDlgItemInt( hDlg, IDC_BITRATEEDIT, config->bitrate, FALSE ); } else if( (HWND) lParam == GetDlgItem( hDlg, IDC_QUANTSLIDER ) ) { config->i_qp = SendDlgItemMessage( hDlg, IDC_QUANTSLIDER, TBM_GETPOS, 0, 0 ); SetDlgItemInt( hDlg, IDC_QUANTEDIT, config->i_qp, FALSE ); } else if( (HWND) lParam == GetDlgItem( hDlg, IDC_2PASSBITRATE_S ) ) { config->i_2passbitrate = SendDlgItemMessage( hDlg, IDC_2PASSBITRATE_S, TBM_GETPOS, 0, 0 ); SetDlgItemInt( hDlg, IDC_2PASSBITRATE, config->i_2passbitrate, FALSE ); } break; default : return 0; } return 1;}/* About dialog */BOOL CALLBACK callback_about( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ){ switch( uMsg ) { case WM_INITDIALOG : { char temp[1024]; sprintf( temp, "Core %d%s, build %s %s", X264_BUILD, X264_VERSION, __DATE__, __TIME__ ); SetDlgItemText( hDlg, IDC_BUILD, temp ); break; } case WM_COMMAND: if (LOWORD(wParam) == IDC_HOMEPAGE && HIWORD(wParam) == STN_CLICKED) ShellExecute( hDlg, "open", X264_WEBSITE, NULL, NULL, SW_SHOWNORMAL ); else if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) EndDialog( hDlg, LOWORD(wParam) ); break; default : return 0; } return 1;}static void set_dlgitem_int(HWND hDlg, UINT item, int value){ char buf[8]; sprintf(buf, "%i", value); SetDlgItemText(hDlg, item, buf);}static void adv_update_dlg( HWND hDlg, CONFIG * config ){ char fourcc[5]; SendDlgItemMessage(hDlg, IDC_DIRECTPRED, CB_ADDSTRING, 0, (LPARAM)"Spatial"); SendDlgItemMessage(hDlg, IDC_DIRECTPRED, CB_ADDSTRING, 0, (LPARAM)"Temporal"); SendDlgItemMessage(hDlg, IDC_SUBPEL, CB_ADDSTRING, 0, (LPARAM)"1 (Fastest)"); SendDlgItemMessage(hDlg, IDC_SUBPEL, CB_ADDSTRING, 0, (LPARAM)"2"); SendDlgItemMessage(hDlg, IDC_SUBPEL, CB_ADDSTRING, 0, (LPARAM)"3"); SendDlgItemMessage(hDlg, IDC_SUBPEL, CB_ADDSTRING, 0, (LPARAM)"4"); SendDlgItemMessage(hDlg, IDC_SUBPEL, CB_ADDSTRING, 0, (LPARAM)"5 (Max Quality)"); CheckDlgButton( hDlg,IDC_CABAC, config->b_cabac ? BST_CHECKED : BST_UNCHECKED ); CheckDlgButton( hDlg,IDC_LOOPFILTER, config->b_filter ? BST_CHECKED: BST_UNCHECKED ); CheckDlgButton( hDlg,IDC_WBPRED, config->b_b_wpred ? BST_CHECKED: BST_UNCHECKED ); CheckDlgButton( hDlg,IDC_BREFS, config->b_b_refs ? BST_CHECKED: BST_UNCHECKED ); CheckDlgButton( hDlg,IDC_P16X16, config->b_psub16x16 ? BST_CHECKED: BST_UNCHECKED ); CheckDlgButton( hDlg,IDC_P8X8, config->b_psub8x8 ? BST_CHECKED: BST_UNCHECKED ); CheckDlgButton( hDlg,IDC_B16X16, config->b_bsub16x16 ? BST_CHECKED: BST_UNCHECKED ); CheckDlgButton( hDlg,IDC_I4X4, config->b_i4x4 ? BST_CHECKED: BST_UNCHECKED ); SetDlgItemInt( hDlg, IDC_KEYINTMIN, config->i_keyint_min, FALSE ); SetDlgItemInt( hDlg, IDC_KEYINTMAX, config->i_keyint_max, FALSE ); SetDlgItemInt( hDlg, IDC_REFFRAMES, config->i_refmax, FALSE ); SetDlgItemInt( hDlg, IDC_BFRAME, config->i_bframe, FALSE ); SetDlgItemInt( hDlg, IDC_IPRATIO, config->i_key_boost, FALSE ); SetDlgItemInt( hDlg, IDC_PBRATIO, config->i_b_red, FALSE ); SetDlgItemInt( hDlg, IDC_CURVECOMP, config->i_curve_comp, FALSE ); SendDlgItemMessage(hDlg, IDC_DIRECTPRED, CB_SETCURSEL, (config->i_direct_mv_pred), 0); SendDlgItemMessage(hDlg, IDC_SUBPEL, CB_SETCURSEL, (config->i_subpel_refine), 0); SendDlgItemMessage( hDlg, IDC_INLOOP_A, TBM_SETRANGE, TRUE, (LPARAM) MAKELONG( -6, 6 ) ); SendDlgItemMessage( hDlg, IDC_INLOOP_A, TBM_SETPOS, TRUE, config->i_inloop_a ); set_dlgitem_int( hDlg, IDC_LOOPA_TXT, config->i_inloop_a); EnableWindow( GetDlgItem( hDlg, IDC_P8X8 ), config->b_psub16x16 ); EnableWindow( GetDlgItem( hDlg, IDC_BREFS ), config->i_bframe > 1 ); EnableWindow( GetDlgItem( hDlg, IDC_WBPRED ), config->i_bframe > 1 ); EnableWindow( GetDlgItem( hDlg, IDC_DIRECTPRED ), config->i_bframe > 0 ); memcpy( fourcc, config->fcc, 4 ); fourcc[4] = '\0'; SetDlgItemText( hDlg, IDC_FOURCC, fourcc );}/* advanced configuration dialog process */BOOL CALLBACK callback_advanced( 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; adv_update_dlg( hDlg, config ); break; case WM_COMMAND: switch ( HIWORD( wParam ) ) { case BN_CLICKED : switch( LOWORD( wParam ) ) { case IDOK : EndDialog( hDlg, LOWORD( wParam ) ); break; case IDC_CABAC : config->b_cabac = ( IsDlgButtonChecked( hDlg, IDC_CABAC ) == BST_CHECKED ); break; case IDC_LOOPFILTER : config->b_filter = ( IsDlgButtonChecked( hDlg, IDC_LOOPFILTER ) == BST_CHECKED ); break; case IDC_BREFS : config->b_b_refs = ( IsDlgButtonChecked( hDlg, IDC_BREFS ) == BST_CHECKED ); break; case IDC_WBPRED : config->b_b_wpred = ( IsDlgButtonChecked( hDlg, IDC_WBPRED ) == BST_CHECKED ); break; case IDC_P16X16 : config->b_psub16x16 = ( IsDlgButtonChecked( hDlg, IDC_P16X16 ) == BST_CHECKED ); EnableWindow( GetDlgItem( hDlg, IDC_P8X8 ), config->b_psub16x16 ); break; case IDC_P8X8 : config->b_psub8x8 = ( IsDlgButtonChecked( hDlg, IDC_P8X8 ) == BST_CHECKED ); break; case IDC_B16X16 : config->b_bsub16x16 = ( IsDlgButtonChecked( hDlg, IDC_B16X16 ) == BST_CHECKED ); break; case IDC_I4X4 : config->b_i4x4 = ( IsDlgButtonChecked( hDlg, IDC_I4X4 ) == BST_CHECKED ); break; } break; case EN_CHANGE : switch( LOWORD( wParam ) ) { case IDC_KEYINTMIN : config->i_keyint_min = GetDlgItemInt( hDlg, IDC_KEYINTMIN, FALSE, FALSE ); break; case IDC_KEYINTMAX : config->i_keyint_max = GetDlgItemInt( hDlg, IDC_KEYINTMAX, FALSE, FALSE ); break; case IDC_REFFRAMES : config->i_refmax = GetDlgItemInt( hDlg, IDC_REFFRAMES, FALSE, FALSE ); if( config->i_refmax > 16 ) { config->i_refmax = 16; SetDlgItemInt( hDlg, IDC_REFFRAMES, config->i_refmax, FALSE ); } break; case IDC_FOURCC : GetDlgItemText( hDlg, IDC_FOURCC, config->fcc, 5 ); break; case IDC_BFRAME : config->i_bframe = GetDlgItemInt( hDlg, IDC_BFRAME, FALSE, FALSE ); if( config->i_bframe > 5 ) { config->i_bframe = 5; SetDlgItemInt( hDlg, IDC_BFRAME, config->i_bframe, FALSE ); } EnableWindow( GetDlgItem( hDlg, IDC_BREFS ), config->i_bframe > 1 ); EnableWindow( GetDlgItem( hDlg, IDC_WBPRED ), config->i_bframe > 1 ); EnableWindow( GetDlgItem( hDlg, IDC_DIRECTPRED ), config->i_bframe > 0 ); break; case IDC_IPRATIO : config->i_key_boost = GetDlgItemInt( hDlg, IDC_IPRATIO, FALSE, FALSE ); if (config->i_key_boost < 0) { config->i_key_boost = 0; SetDlgItemInt( hDlg, IDC_IPRATIO, config->i_key_boost, FALSE ); } else if (config->i_key_boost > 70) { config->i_key_boost = 70; SetDlgItemInt( hDlg, IDC_IPRATIO, config->i_key_boost, FALSE ); } break; case IDC_PBRATIO : config->i_b_red = GetDlgItemInt( hDlg, IDC_PBRATIO, FALSE, FALSE ); if (config->i_b_red < 0) { config->i_b_red = 0; SetDlgItemInt( hDlg, IDC_PBRATIO, config->i_b_red, FALSE ); } else if (config->i_b_red > 60) { config->i_b_red = 60; SetDlgItemInt( hDlg, IDC_PBRATIO, config->i_b_red, FALSE ); } break; case IDC_CURVECOMP: config->i_curve_comp = GetDlgItemInt( hDlg, IDC_CURVECOMP, FALSE, FALSE ); if( config->i_curve_comp < 0 ) { config->i_curve_comp = 0; SetDlgItemInt( hDlg, IDC_CURVECOMP, config->i_curve_comp, FALSE ); } else if( config->i_curve_comp > 100 ) { config->i_curve_comp = 100; SetDlgItemInt( hDlg, IDC_CURVECOMP, config->i_curve_comp, FALSE ); } break; } break; case LBN_SELCHANGE : switch ( LOWORD( wParam ) ) { case IDC_DIRECTPRED: config->i_direct_mv_pred = SendDlgItemMessage(hDlg, IDC_DIRECTPRED, CB_GETCURSEL, 0, 0); break; case IDC_SUBPEL: config->i_subpel_refine = SendDlgItemMessage(hDlg, IDC_SUBPEL, CB_GETCURSEL, 0, 0); break; } break; } break; case WM_HSCROLL : if( (HWND) lParam == GetDlgItem( hDlg, IDC_INLOOP_A ) ) { config->i_inloop_a = SendDlgItemMessage( hDlg, IDC_INLOOP_A, TBM_GETPOS, 0, 0 ); set_dlgitem_int( hDlg, IDC_LOOPA_TXT, config->i_inloop_a); } break; case WM_CLOSE: EndDialog( hDlg, LOWORD( wParam ) ); break; default : return 0; } return 1;}/* error console dialog process */BOOL CALLBACK callback_err_console( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ){ switch( uMsg ) { case WM_INITDIALOG : break; case WM_DESTROY : break; case WM_COMMAND : if( HIWORD( wParam ) == BN_CLICKED ) { switch( LOWORD( wParam ) ) { case IDOK : DestroyWindow( hWnd ); break; case IDC_COPYCLIP : if( OpenClipboard( hWnd ) ) { int i; int num_lines = SendDlgItemMessage( hWnd, IDC_CONSOLE, LB_GETCOUNT, 0, 0 ); int text_size; char *buffer; HGLOBAL clipbuffer; if( num_lines <= 0 ) break; /* calculate text size */ for( i = 0, text_size = 0; i < num_lines; i++ ) text_size += SendDlgItemMessage( hWnd, IDC_CONSOLE, LB_GETTEXTLEN, ( WPARAM )i, 0 ); /* CR-LF for each line + terminating NULL */ text_size += 2 * num_lines + 1; EmptyClipboard( ); clipbuffer = GlobalAlloc( GMEM_MOVEABLE | GMEM_DDESHARE, text_size ); buffer = (char *)GlobalLock( clipbuffer ); /* concatenate lines of text in the global buffer */ for( i = 0; i < num_lines; i++ ) { char msg_buf[1024]; SendDlgItemMessage( hWnd, IDC_CONSOLE, LB_GETTEXT, ( WPARAM )i, ( LPARAM )msg_buf ); strcat( msg_buf, "\r\n" ); memcpy( buffer, msg_buf, strlen( msg_buf ) ); buffer += strlen( msg_buf ); } *buffer = 0; /* null-terminate the buffer */ GlobalUnlock( clipbuffer ); SetClipboardData( CF_TEXT, clipbuffer ); CloseClipboard( ); } break; default : return 0; } break; } break; default : return DefWindowProc( hWnd, uMsg, wParam, lParam ); } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -