diff -uNrp 1/x264vfw/config.c 2/x264vfw/config.c --- 1/x264vfw/config.c 2008-11-03 10:22:56 +0200 +++ 2/x264vfw/config.c 2008-11-10 14:20:06 +0200 @@ -866,6 +866,9 @@ void tabs_update_items(CONFIG *config) CheckDlgButton(hMainDlg, IDC_CONFIG_USE_CMDLINE, config->b_use_cmdline); SendMessage(GetDlgItem(hMainDlg, IDC_CONFIG_CMDLINE), EM_LIMITTEXT, MAX_CMDLINE - 1, 0); SetDlgItemText(hMainDlg, IDC_CONFIG_CMDLINE, config->cmdline); +#if X264VFW_USE_EXTERNAL_CONFIG + CheckDlgButton(hMainDlg, IDC_CONFIG_USE_EXTERNAL_GUI, 0); +#endif } /* Assigns tooltips */ @@ -1000,6 +1003,19 @@ BOOL CALLBACK callback_main(HWND hDlg, U EnableWindow(GetDlgItem(hMainDlg, IDC_CONFIG_CMDLINE), config->b_use_cmdline); break; +#if X264VFW_USE_EXTERNAL_CONFIG + case IDC_CONFIG_USE_EXTERNAL_GUI: + { + HKEY hKey; + int b_use_new_gui; + b_use_new_gui = IsDlgButtonChecked(hMainDlg, IDC_CONFIG_USE_EXTERNAL_GUI); + RegOpenKeyEx( HKEY_CURRENT_USER, "Software\\GNU\\x264", 0, KEY_WRITE, &hKey ); + RegSetValueEx(hKey, ".GUI.USE", 0, REG_DWORD, (LPBYTE)&b_use_new_gui, sizeof(int)); + RegCloseKey( hKey ); + break; + } +#endif + default: return FALSE; } diff -uNrp 1/x264vfw/driverproc.c 2/x264vfw/driverproc.c --- 1/x264vfw/driverproc.c 2008-11-03 10:22:56 +0200 +++ 2/x264vfw/driverproc.c 2008-11-10 14:18:24 +0200 @@ -71,6 +71,63 @@ static void log_callback(void* ptr, int } #endif +#if X264VFW_USE_EXTERNAL_CONFIG +static int ConfigExternal(void) +{ + //Call External GUI + HKEY hKey; + int config_int_use; + char config_str_pth[1000]; + char config_str_fun[1000]; + DWORD i_size; + typedef BOOL (WINAPI LPFUNC1)(void); + LPFUNC1* ConfigFunc = NULL; + + i_size = sizeof(int); + RegOpenKeyEx( HKEY_CURRENT_USER, "Software\\GNU\\x264", 0, KEY_READ, &hKey ); + if ( RegQueryValueEx( hKey, ".GUI.USE", 0, 0, (LPBYTE)&config_int_use, &i_size ) != ERROR_SUCCESS ) { + RegCloseKey( hKey ); + return 0; + } else { + if ( config_int_use == 0 ) { + RegCloseKey( hKey ); + return 0; + } + i_size = sizeof(config_str_pth); + if ( RegQueryValueEx( hKey, ".GUI.PATH", 0, 0, (LPBYTE)&config_str_pth, &i_size ) != ERROR_SUCCESS ) { + RegCloseKey( hKey ); + return 0; + } + i_size = sizeof(config_str_fun); + if ( RegQueryValueEx( hKey, ".GUI.FUNC", 0, 0, (LPBYTE)&config_str_fun, &i_size ) != ERROR_SUCCESS ) { + RegCloseKey( hKey ); + return 0; + } + + static HINSTANCE hGUI; // handle to the preloaded GUI + hGUI = LoadLibraryA( (LPCTSTR)&config_str_pth ); + if( hGUI == (HMODULE)NULL ) { + RegCloseKey( hKey ); + return 0; + } + ConfigFunc = (LPFUNC1*)GetProcAddress((HMODULE)hGUI,(LPCSTR)&config_str_fun); + if ( ConfigFunc != NULL ) { + i_size = (*ConfigFunc)(); + } else { + FreeLibrary( hGUI ); + RegCloseKey( hKey ); + return 0; + } + FreeLibrary( hGUI ); + RegCloseKey( hKey ); + return 1; + } + RegCloseKey(hKey); + return 0; +} + +#endif + /* This little puppy handles the calls which vfw programs send out to the codec */ LRESULT WINAPI attribute_align_arg DriverProc(DWORD dwDriverId, HDRVR hDriver, UINT uMsg, LPARAM lParam1, LPARAM lParam2) { @@ -195,6 +252,11 @@ LRESULT WINAPI attribute_align_arg Drive codec->config.b_save = FALSE; memcpy(&temp, &codec->config, sizeof(CONFIG)); +#if X264VFW_USE_EXTERNAL_CONFIG + if ( ConfigExternal() == 1 ) + config_reg_load(&codec->config); + else +#endif DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_CONFIG), (HWND)lParam1, callback_main, (LPARAM)&temp); if (temp.b_save) diff -uNrp 1/x264vfw/resource.h 2/x264vfw/resource.h --- 1/x264vfw/resource.h 2008-11-03 10:22:56 +0200 +++ 2/x264vfw/resource.h 2008-11-10 14:20:48 +0200 @@ -138,6 +138,10 @@ #define IDC_VUI_CHROMALOC 1112 #define IDC_VUI_CHROMALOC_SPIN 1113 +#if X264VFW_USE_EXTERNAL_CONFIG +#define IDC_CONFIG_USE_EXTERNAL_GUI 1114 +#endif + // Next default values for new objects // #ifdef APSTUDIO_INVOKED diff -uNrp 1/x264vfw/resource.rc 2/x264vfw/resource.rc --- 1/x264vfw/resource.rc 2008-11-03 10:22:56 +0200 +++ 2/x264vfw/resource.rc 2008-11-10 14:21:33 +0200 @@ -82,7 +82,10 @@ FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "OK",IDOK,426,314,66,12 CONTROL "",IDC_CONFIG_TABCONTROL,"SysTabControl32",TCS_MULTILINE | WS_TABSTOP,0,0,504,266 - CONTROL "Use command line:",IDC_CONFIG_USE_CMDLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,270,480,12 + CONTROL "Use command line:",IDC_CONFIG_USE_CMDLINE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,270,80,12 +#if X264VFW_USE_EXTERNAL_CONFIG + CONTROL "Use external GUI",IDC_CONFIG_USE_EXTERNAL_GUI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,112,270,80,12 +#endif EDITTEXT IDC_CONFIG_CMDLINE,12,286,480,24,ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL PUSHBUTTON "Load Defaults",IDC_CONFIG_DEFAULTS,12,314,66,12 PUSHBUTTON "Cancel",IDCANCEL,342,314,66,12 diff -uNrp 1/x264vfw/x264vfw_config.h 2/x264vfw/x264vfw_config.h --- 1/x264vfw/x264vfw_config.h 2008-11-03 10:22:56 +0200 +++ 2/x264vfw/x264vfw_config.h 2008-11-10 14:18:36 +0200 @@ -12,5 +12,6 @@ #define X264_PATCH_HDR 0 #define FFMPEG_HAVE_RGB24_FIXED 1 #define FFMPEG_HAVE_IMG_CONVERT 1 +#define X264VFW_USE_EXTERNAL_CONFIG 1 #endif