mirror of
https://github.com/WinampDesktop/winamp.git
synced 2024-12-12 07:11:01 -05:00
847 lines
36 KiB
C++
847 lines
36 KiB
C++
|
/****************************************************************************
|
||
|
*
|
||
|
* Module Title : vfw_config_dlg.c
|
||
|
*
|
||
|
* Description : Configuration Parameters dialog module.
|
||
|
*
|
||
|
****************************************************************************/
|
||
|
|
||
|
/****************************************************************************
|
||
|
* Header Files
|
||
|
****************************************************************************/
|
||
|
#include <windows.h>
|
||
|
#include <stdio.h>
|
||
|
#include <commctrl.h>
|
||
|
#include "type_aliases.h"
|
||
|
#include "vp60_comp_interface.h"
|
||
|
#include "resource.h" // Must be the version resident in the VCAP dll directory!!!
|
||
|
#include "vpvfwver.h"
|
||
|
#include "vp6vfw.h"
|
||
|
#include "vp60_comp_interface.h"
|
||
|
#include <commdlg.h>
|
||
|
//#include <cderr.h>
|
||
|
extern HINSTANCE hInstance;
|
||
|
|
||
|
void BuildVersionInfo(char *modname,char *VersionInfo,int *vers)
|
||
|
{
|
||
|
|
||
|
// ************************************************************
|
||
|
// The next bit of code reads version information from resource
|
||
|
VersionInfo[0]=0;
|
||
|
char szFullPath[256];
|
||
|
DWORD dwVerHnd;
|
||
|
DWORD dwVerInfoSize;
|
||
|
GetModuleFileName(/*GetModuleHandle(modname)*/hInstance, szFullPath, sizeof(szFullPath));
|
||
|
dwVerInfoSize = GetFileVersionInfoSize(szFullPath, &dwVerHnd);
|
||
|
|
||
|
if (dwVerInfoSize)
|
||
|
{
|
||
|
// If we were able to get the information, process it:
|
||
|
HANDLE hMem;
|
||
|
LPVOID lpvMem;
|
||
|
|
||
|
hMem = GlobalAlloc(GMEM_MOVEABLE, dwVerInfoSize);
|
||
|
lpvMem = GlobalLock(hMem);
|
||
|
GetFileVersionInfo(szFullPath, dwVerHnd, dwVerInfoSize, lpvMem);
|
||
|
|
||
|
UINT cchVer = 0;
|
||
|
LPSTR lszVer = NULL;
|
||
|
strcat(VersionInfo, "\r");
|
||
|
VerQueryValue(lpvMem,TEXT("\\StringFileInfo\\040904E4\\FileDescription"), (void **) &lszVer, &cchVer);
|
||
|
strcat(VersionInfo,lszVer);
|
||
|
strcat(VersionInfo, "\r\r");
|
||
|
VerQueryValue(lpvMem,TEXT("\\StringFileInfo\\040904E4\\LegalCopyright"), (void **) &lszVer, &cchVer);
|
||
|
strcat(VersionInfo,lszVer);
|
||
|
strcat(VersionInfo, "\r");
|
||
|
strcat(VersionInfo, " Version ");
|
||
|
VerQueryValue(lpvMem,TEXT("\\StringFileInfo\\040904E4\\ProductVersion"), (void **) &lszVer, &cchVer);
|
||
|
strcat(VersionInfo,lszVer);
|
||
|
|
||
|
GlobalUnlock(hMem);
|
||
|
GlobalFree(hMem);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
BOOL FAR PASCAL Advanced_ParamsDlgProc( HWND hWndDlg,UINT Message,WPARAM wParam,LPARAM lParam );
|
||
|
BOOL FAR PASCAL General_ParamsDlgProc( HWND hWndDlg,UINT Message,WPARAM wParam,LPARAM lParam );
|
||
|
BOOL FAR PASCAL Settings_ParamsDlgProc( HWND hWndDlg,UINT Message,WPARAM wParam,LPARAM lParam );
|
||
|
BOOL FAR PASCAL Main_ParamsDlgProc( HWND hWndDlg,
|
||
|
UINT Message,
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam)
|
||
|
{
|
||
|
COMP_CONFIG_VP6 *compConfig = (COMP_CONFIG_VP6 *)GetWindowLong(hWndDlg,GWL_USERDATA);
|
||
|
|
||
|
switch(Message)
|
||
|
{
|
||
|
case WM_NOTIFY:
|
||
|
{
|
||
|
switch(wParam)
|
||
|
{
|
||
|
case IDC_TAB1:
|
||
|
{
|
||
|
NMHDR *msg = (NMHDR *) lParam;
|
||
|
|
||
|
switch(msg->code)
|
||
|
{
|
||
|
case TCN_SELCHANGE:
|
||
|
{
|
||
|
HWND hwndTab = GetDlgItem(hWndDlg, IDC_TAB1);
|
||
|
int whichTab = TabCtrl_GetCurSel(hwndTab);
|
||
|
switch(whichTab)
|
||
|
{
|
||
|
case 2:
|
||
|
{
|
||
|
if(compConfig->PlaceHolder)
|
||
|
DestroyWindow((HWND) compConfig->PlaceHolder);
|
||
|
compConfig->PlaceHolder = (INT32) CreateDialogParam(hInstance,"SETTINGS",hWndDlg,Settings_ParamsDlgProc ,(LPARAM) compConfig);
|
||
|
ShowWindow((HWND) compConfig->PlaceHolder,SW_SHOW);
|
||
|
return TRUE;
|
||
|
}
|
||
|
case 0:
|
||
|
{
|
||
|
if(compConfig->PlaceHolder)
|
||
|
DestroyWindow((HWND) compConfig->PlaceHolder);
|
||
|
compConfig->PlaceHolder = (INT32) CreateDialogParam(hInstance,"GENERAL",hWndDlg,General_ParamsDlgProc ,(LPARAM) compConfig);
|
||
|
ShowWindow((HWND) compConfig->PlaceHolder,SW_SHOW);
|
||
|
return TRUE;
|
||
|
}
|
||
|
case 1:
|
||
|
{
|
||
|
|
||
|
if(compConfig->PlaceHolder)
|
||
|
DestroyWindow((HWND) compConfig->PlaceHolder);
|
||
|
compConfig->PlaceHolder = (INT32) CreateDialogParam(hInstance,"ADVANCED",hWndDlg,Advanced_ParamsDlgProc ,(LPARAM) compConfig);
|
||
|
ShowWindow((HWND) compConfig->PlaceHolder,SW_SHOW);
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
return (FALSE);
|
||
|
}
|
||
|
case WM_CTLCOLORSTATIC:
|
||
|
{
|
||
|
HDC hdc = (HDC) wParam;
|
||
|
HWND hwndStatic = (HWND) lParam;
|
||
|
|
||
|
if ( hwndStatic == GetDlgItem ( hWndDlg, IDC_TITLE ) ||
|
||
|
hwndStatic == GetDlgItem ( hWndDlg, IDC_FRAME ) )
|
||
|
{
|
||
|
return (LRESULT) GetStockObject(WHITE_BRUSH); ;
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
case WM_INITDIALOG:
|
||
|
{
|
||
|
|
||
|
HWND hwndTab = GetDlgItem(hWndDlg, IDC_TAB1);
|
||
|
TC_ITEM tie;
|
||
|
|
||
|
SetWindowLong(hWndDlg, GWL_USERDATA, (unsigned long)lParam);
|
||
|
compConfig = (COMP_CONFIG_VP6 *) lParam;
|
||
|
|
||
|
tie.mask = TCIF_TEXT | TCIF_STATE | TCIF_IMAGE;
|
||
|
tie.iImage = -1;
|
||
|
|
||
|
tie.pszText = "General";
|
||
|
if (TabCtrl_InsertItem(hwndTab, 0, &tie) == -1)
|
||
|
return NULL;
|
||
|
|
||
|
tie.pszText = "Advanced";
|
||
|
if (TabCtrl_InsertItem(hwndTab, 1, &tie) == -1)
|
||
|
return NULL;
|
||
|
|
||
|
tie.pszText = "Settings";
|
||
|
if (TabCtrl_InsertItem(hwndTab, 2, &tie) == -1)
|
||
|
return NULL;
|
||
|
|
||
|
char VersionString[2048]={0};
|
||
|
int vers;
|
||
|
BuildVersionInfo("VP6VFW.DLL",VersionString,&vers);
|
||
|
SetDlgItemText( hWndDlg, IDC_TITLE, VersionString);
|
||
|
|
||
|
|
||
|
compConfig->PlaceHolder = (INT32) CreateDialogParam(hInstance,"GENERAL",hWndDlg,General_ParamsDlgProc ,(LPARAM) compConfig);
|
||
|
ShowWindow((HWND) compConfig->PlaceHolder,SW_SHOW);
|
||
|
|
||
|
|
||
|
return (TRUE);
|
||
|
}
|
||
|
|
||
|
|
||
|
case WM_CLOSE: /* Close the dialog. */
|
||
|
/* Closing the Dialog behaves the same as Cancel */
|
||
|
PostMessage(hWndDlg, WM_COMMAND, IDCANCEL, 0L);
|
||
|
return (TRUE);
|
||
|
|
||
|
case WM_COMMAND: /* A control has been activated. */
|
||
|
switch(LOWORD(wParam))
|
||
|
{
|
||
|
/* OK leaves the current settings in force */
|
||
|
case IDOK:
|
||
|
EndDialog(hWndDlg, IDOK);
|
||
|
break;
|
||
|
|
||
|
case IDCANCEL:
|
||
|
EndDialog(hWndDlg, IDCANCEL);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
return (FALSE);
|
||
|
|
||
|
}
|
||
|
return (FALSE);
|
||
|
|
||
|
default:
|
||
|
return (FALSE);
|
||
|
|
||
|
} /* End of Main Dialog case statement. */
|
||
|
|
||
|
return FALSE;
|
||
|
} /* End of WndProc */
|
||
|
|
||
|
|
||
|
|
||
|
BOOL FAR PASCAL General_ParamsDlgProc( HWND hWndDlg,
|
||
|
UINT Message,
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam)
|
||
|
{
|
||
|
COMP_CONFIG_VP6 *compConfig = (COMP_CONFIG_VP6 *)GetWindowLong(hWndDlg,GWL_USERDATA);
|
||
|
|
||
|
switch(Message)
|
||
|
{
|
||
|
case WM_SETFOCUS:
|
||
|
Message+=0;
|
||
|
break;
|
||
|
case WM_INITDIALOG:
|
||
|
{
|
||
|
SetWindowLong(hWndDlg, GWL_USERDATA, (unsigned long)lParam);
|
||
|
compConfig = (COMP_CONFIG_VP6 *) lParam;
|
||
|
|
||
|
// fill mode box
|
||
|
SendDlgItemMessage(hWndDlg, IDD_MODE, CB_ADDSTRING, 0, (LPARAM) (LPCSTR) "Realtime / Live Encoding");
|
||
|
SendDlgItemMessage(hWndDlg, IDD_MODE, CB_ADDSTRING, 0, (LPARAM) (LPCSTR) "Good Quality Fast Encoding");
|
||
|
SendDlgItemMessage(hWndDlg, IDD_MODE, CB_ADDSTRING, 0, (LPARAM) (LPCSTR) "One Pass - Best Quality");
|
||
|
SendDlgItemMessage(hWndDlg, IDD_MODE, CB_ADDSTRING, 0, (LPARAM) (LPCSTR) "Two Pass - First Pass" );
|
||
|
SendDlgItemMessage(hWndDlg, IDD_MODE, CB_ADDSTRING, 0, (LPARAM) (LPCSTR) "Two Pass - Second Pass - Good Quality");
|
||
|
SendDlgItemMessage(hWndDlg, IDD_MODE, CB_ADDSTRING, 0, (LPARAM) (LPCSTR) "Two Pass - Second Pass - Best Quality");
|
||
|
|
||
|
// set mode
|
||
|
SendDlgItemMessage(hWndDlg, IDD_MODE, CB_SETCURSEL, (LPARAM) compConfig->Mode,0);
|
||
|
|
||
|
// set end usage
|
||
|
switch(compConfig->EndUsage)
|
||
|
{
|
||
|
case 0:
|
||
|
CheckDlgButton( hWndDlg, IDC_ENDUSAGE1, 1);
|
||
|
CheckDlgButton( hWndDlg, IDC_ENDUSAGE2, 0);
|
||
|
break;
|
||
|
default:
|
||
|
CheckDlgButton( hWndDlg, IDC_ENDUSAGE2, 1);
|
||
|
CheckDlgButton( hWndDlg, IDC_ENDUSAGE1, 0);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
// set material
|
||
|
switch(compConfig->Interlaced)
|
||
|
{
|
||
|
case 1:
|
||
|
CheckDlgButton( hWndDlg, IDC_MATERIAL1, 1);
|
||
|
CheckDlgButton( hWndDlg, IDC_MATERIAL2, 0);
|
||
|
break;
|
||
|
default:
|
||
|
CheckDlgButton( hWndDlg, IDC_MATERIAL2, 1);
|
||
|
CheckDlgButton( hWndDlg, IDC_MATERIAL1, 0);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
// setup noise reduction slider
|
||
|
SendDlgItemMessage(hWndDlg, IDC_NOISEREDUCTION_SLIDER, TBM_SETRANGE, (WPARAM) TRUE, (LPARAM) MAKELONG(0, 6));
|
||
|
|
||
|
// set noise reduction
|
||
|
SetDlgItemInt( hWndDlg, IDC_NOISEREDUCTION, compConfig->NoiseSensitivity, FALSE );
|
||
|
SendDlgItemMessage(hWndDlg, IDC_NOISEREDUCTION_SLIDER, TBM_SETPOS, (WPARAM) TRUE,(LPARAM) compConfig->NoiseSensitivity);
|
||
|
SendDlgItemMessage(hWndDlg, IDC_NOISEREDUCTION_SLIDER, TBM_SETTICFREQ, (WPARAM) 1,(LPARAM) 1);
|
||
|
|
||
|
// set auto keyframe
|
||
|
CheckDlgButton( hWndDlg, IDC_AUTOKEYFRAME_CHECK, (compConfig->AutoKeyFrameEnabled) ? 1 : 0 );
|
||
|
|
||
|
// set max frames btw keys
|
||
|
SetDlgItemInt( hWndDlg, IDC_MAXFRAMESBTWKEYS, compConfig->ForceKeyFrameEvery, FALSE );
|
||
|
|
||
|
return (TRUE);
|
||
|
}
|
||
|
case WM_HSCROLL:
|
||
|
{
|
||
|
// change edit box to match slider
|
||
|
SetDlgItemInt( hWndDlg, IDC_NOISEREDUCTION, SendDlgItemMessage(hWndDlg, IDC_NOISEREDUCTION_SLIDER, TBM_GETPOS, 0,0), FALSE );
|
||
|
return (TRUE);
|
||
|
}
|
||
|
|
||
|
case WM_DESTROY: //case WM_CLOSE: /* Close the dialog. */
|
||
|
|
||
|
// save everything to our structure
|
||
|
compConfig->AutoKeyFrameEnabled = SendDlgItemMessage(hWndDlg, IDC_AUTOKEYFRAME_CHECK, BM_GETCHECK, 0, 0);
|
||
|
compConfig->EndUsage = (END_USAGE) SendDlgItemMessage(hWndDlg, IDC_ENDUSAGE2, BM_GETCHECK, 0, 0);
|
||
|
compConfig->Interlaced = SendDlgItemMessage(hWndDlg, IDC_MATERIAL1, BM_GETCHECK, 0, 0);
|
||
|
compConfig->ForceKeyFrameEvery = GetDlgItemInt(hWndDlg, IDC_MAXFRAMESBTWKEYS, NULL, FALSE );
|
||
|
compConfig->Mode = (MODE) SendDlgItemMessage(hWndDlg, IDD_MODE, CB_GETCURSEL, 0, 0);
|
||
|
compConfig->NoiseSensitivity = GetDlgItemInt(hWndDlg, IDC_NOISEREDUCTION, NULL, FALSE );
|
||
|
return (TRUE);
|
||
|
|
||
|
case WM_COMMAND: /* A control has been activated. */
|
||
|
{
|
||
|
switch(HIWORD(wParam))
|
||
|
{
|
||
|
case EN_KILLFOCUS:
|
||
|
{
|
||
|
// error checking
|
||
|
int value = GetDlgItemInt(hWndDlg, LOWORD(wParam), NULL, FALSE );
|
||
|
|
||
|
switch(LOWORD(wParam))
|
||
|
{
|
||
|
case IDC_NOISEREDUCTION:
|
||
|
{
|
||
|
if(value < 0) value = 0;
|
||
|
if(value > 6) value = 6;
|
||
|
|
||
|
SendDlgItemMessage(hWndDlg, IDC_NOISEREDUCTION_SLIDER, TBM_SETPOS, (WPARAM) TRUE, value );
|
||
|
SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE );
|
||
|
break;
|
||
|
}
|
||
|
break;
|
||
|
case IDC_MAXFRAMESBTWKEYS:
|
||
|
{
|
||
|
if(value < 0) value = 0;
|
||
|
SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE );
|
||
|
break;
|
||
|
}
|
||
|
default:
|
||
|
return (FALSE);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
return (FALSE);
|
||
|
}
|
||
|
|
||
|
|
||
|
default:
|
||
|
return (FALSE);
|
||
|
|
||
|
} /* End of Main Dialog case statement. */
|
||
|
|
||
|
return FALSE;
|
||
|
} /* End of WndProc */
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
BOOL FAR PASCAL Advanced_ParamsDlgProc( HWND hWndDlg,
|
||
|
UINT Message,
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam)
|
||
|
{
|
||
|
COMP_CONFIG_VP6 *compConfig = (COMP_CONFIG_VP6 *)GetWindowLong(hWndDlg,GWL_USERDATA);
|
||
|
switch(Message)
|
||
|
{
|
||
|
case WM_INITDIALOG:
|
||
|
{
|
||
|
|
||
|
SetWindowLong(hWndDlg, GWL_USERDATA, (unsigned long)lParam);
|
||
|
compConfig = (COMP_CONFIG_VP6 *) lParam;
|
||
|
|
||
|
if ( compConfig->EndUsage == 1)
|
||
|
{
|
||
|
EnableWindow(GetDlgItem(hWndDlg, IDC_EDIT_MAXBITRATE), 0);
|
||
|
EnableWindow(GetDlgItem(hWndDlg, STREAMING_PARAMETERS), 0);
|
||
|
EnableWindow(GetDlgItem(hWndDlg, PEAK_BITRATE), 0);
|
||
|
EnableWindow(GetDlgItem(hWndDlg, PREBUFFER), 0);
|
||
|
EnableWindow(GetDlgItem(hWndDlg, IDC_EDIT_PREBUFFER), 0);
|
||
|
EnableWindow(GetDlgItem(hWndDlg, OPTIMAL_BUFFER), 0);
|
||
|
EnableWindow(GetDlgItem(hWndDlg, IDC_EDIT_OPTIMAL), 0);
|
||
|
EnableWindow(GetDlgItem(hWndDlg, MAX_BUFFER), 0);
|
||
|
EnableWindow(GetDlgItem(hWndDlg, IDC_EDIT_MAXBUFFER), 0);
|
||
|
}
|
||
|
if(compConfig->Mode < 4)
|
||
|
{
|
||
|
EnableWindow(GetDlgItem(hWndDlg, TWO_PASS_SECTION_DATARATE), 0);
|
||
|
EnableWindow(GetDlgItem(hWndDlg, VARIABILITY), 0);
|
||
|
EnableWindow(GetDlgItem(hWndDlg, IDC_DATARATEVARIABILITY), 0);
|
||
|
EnableWindow(GetDlgItem(hWndDlg, MIN_SECTION), 0);
|
||
|
EnableWindow(GetDlgItem(hWndDlg, IDC_EDIT_MINBANDWIDTH), 0);
|
||
|
EnableWindow(GetDlgItem(hWndDlg, MAX_SECTION), 0);
|
||
|
EnableWindow(GetDlgItem(hWndDlg, IDC_EDIT_MAXBANDWIDTH), 0);
|
||
|
}
|
||
|
|
||
|
// set buffer stats
|
||
|
SetDlgItemInt( hWndDlg, IDC_EDIT_PREBUFFER, compConfig->StartingBufferLevel, FALSE );
|
||
|
SetDlgItemInt( hWndDlg, IDC_EDIT_OPTIMAL, compConfig->OptimalBufferLevel, FALSE );
|
||
|
SetDlgItemInt( hWndDlg, IDC_EDIT_MAXBUFFER, compConfig->MaximumBufferSize, FALSE );
|
||
|
|
||
|
// setup vbr slider
|
||
|
SendDlgItemMessage(hWndDlg, IDC_DATARATEVARIABILITY_SLIDER, TBM_SETRANGE, (WPARAM) TRUE, (LPARAM) MAKELONG(0, 100));
|
||
|
SendDlgItemMessage(hWndDlg, IDC_DATARATEVARIABILITY_SLIDER, TBM_SETTICFREQ, (WPARAM) 10,(LPARAM) 10);
|
||
|
|
||
|
// set vbr settings
|
||
|
SendDlgItemMessage(hWndDlg, IDC_DATARATEVARIABILITY_SLIDER, TBM_SETPOS, (WPARAM) TRUE,(LPARAM) compConfig->TwoPassVBRBias);
|
||
|
SetDlgItemInt( hWndDlg, IDC_DATARATEVARIABILITY, compConfig->TwoPassVBRBias, FALSE );
|
||
|
SetDlgItemInt( hWndDlg, IDC_EDIT_MINBANDWIDTH, compConfig->TwoPassVBRMinSection, FALSE );
|
||
|
SetDlgItemInt( hWndDlg, IDC_EDIT_MAXBANDWIDTH, compConfig->TwoPassVBRMaxSection, FALSE );
|
||
|
SetDlgItemInt( hWndDlg, IDC_EDIT_MAXBITRATE, compConfig->MaxAllowedDatarate, FALSE );
|
||
|
|
||
|
|
||
|
|
||
|
// datarate control options
|
||
|
SetDlgItemInt( hWndDlg, IDC_EDIT_UNDERSHOOT, compConfig->UnderShootPct, FALSE );
|
||
|
|
||
|
// set adjust quantizer control
|
||
|
CheckDlgButton( hWndDlg, IDC_ADJUSTQ_CHECK, (compConfig->FixedQ) ? 0 : 1 );
|
||
|
SetDlgItemInt( hWndDlg, IDC_EDIT_MINQUALITY, compConfig->BestAllowedQ, FALSE );
|
||
|
SetDlgItemInt( hWndDlg, IDC_EDIT_MAXQUALITY, compConfig->Quality, FALSE );
|
||
|
|
||
|
// allowing dropped frames
|
||
|
CheckDlgButton( hWndDlg, IDC_ALLOW_DROPPED_FRAMES_CHECK, (compConfig->AllowDF) ? 1 : 0 );
|
||
|
SetDlgItemInt( hWndDlg, IDC_EDIT_TEMPORAL_DOWN, compConfig->DropFramesWaterMark, FALSE );
|
||
|
|
||
|
// allowing spatial resampling
|
||
|
CheckDlgButton( hWndDlg, IDC_SCALE_CHECK, (compConfig->AllowSpatialResampling) ? 1 : 0 );
|
||
|
SetDlgItemInt( hWndDlg, IDC_EDIT_SPATIAL_DOWN, compConfig->ResampleDownWaterMark, FALSE );
|
||
|
SetDlgItemInt( hWndDlg, IDC_EDIT_SPATIAL_UP, compConfig->ResampleUpWaterMark, FALSE );
|
||
|
|
||
|
|
||
|
return (TRUE);
|
||
|
}
|
||
|
|
||
|
|
||
|
case WM_DESTROY: //case WM_CLOSE: /* Close the dialog. */
|
||
|
|
||
|
// save everything to our structure
|
||
|
compConfig->StartingBufferLevel = GetDlgItemInt(hWndDlg, IDC_EDIT_PREBUFFER, NULL, FALSE );
|
||
|
compConfig->OptimalBufferLevel = GetDlgItemInt(hWndDlg, IDC_EDIT_OPTIMAL, NULL, FALSE );
|
||
|
compConfig->MaximumBufferSize = GetDlgItemInt(hWndDlg, IDC_EDIT_MAXBUFFER, NULL, FALSE );
|
||
|
compConfig->TwoPassVBRBias = GetDlgItemInt(hWndDlg, IDC_DATARATEVARIABILITY, NULL, FALSE );
|
||
|
compConfig->TwoPassVBRMinSection = GetDlgItemInt(hWndDlg, IDC_EDIT_MINBANDWIDTH, NULL, FALSE );
|
||
|
compConfig->TwoPassVBRMaxSection = GetDlgItemInt(hWndDlg, IDC_EDIT_MAXBANDWIDTH, NULL, FALSE );
|
||
|
compConfig->MaxAllowedDatarate = GetDlgItemInt(hWndDlg, IDC_EDIT_MAXBITRATE, NULL, FALSE );
|
||
|
compConfig->UnderShootPct = GetDlgItemInt(hWndDlg, IDC_EDIT_UNDERSHOOT, NULL, FALSE );
|
||
|
compConfig->FixedQ = !SendDlgItemMessage(hWndDlg, IDC_ADJUSTQ_CHECK, BM_GETCHECK, 0, 0);
|
||
|
compConfig->BestAllowedQ = GetDlgItemInt(hWndDlg, IDC_EDIT_MINQUALITY, NULL, FALSE );
|
||
|
compConfig->Quality = GetDlgItemInt(hWndDlg, IDC_EDIT_MAXQUALITY, NULL, FALSE );
|
||
|
compConfig->AllowDF = SendDlgItemMessage(hWndDlg, IDC_ALLOW_DROPPED_FRAMES_CHECK, BM_GETCHECK, 0, 0);
|
||
|
compConfig->DropFramesWaterMark = GetDlgItemInt(hWndDlg, IDC_EDIT_TEMPORAL_DOWN, NULL, FALSE );
|
||
|
compConfig->AllowSpatialResampling = SendDlgItemMessage(hWndDlg, IDC_SCALE_CHECK, BM_GETCHECK, 0, 0);
|
||
|
compConfig->ResampleDownWaterMark = GetDlgItemInt(hWndDlg, IDC_EDIT_SPATIAL_DOWN, NULL, FALSE );
|
||
|
compConfig->ResampleUpWaterMark = GetDlgItemInt(hWndDlg, IDC_EDIT_SPATIAL_UP, NULL, FALSE );
|
||
|
|
||
|
return (TRUE);
|
||
|
|
||
|
case WM_HSCROLL:
|
||
|
{
|
||
|
// change edit box to match slider
|
||
|
SetDlgItemInt( hWndDlg, IDC_DATARATEVARIABILITY, SendDlgItemMessage(hWndDlg, IDC_DATARATEVARIABILITY_SLIDER, TBM_GETPOS, 0,0), FALSE );
|
||
|
return (TRUE);
|
||
|
}
|
||
|
|
||
|
case WM_COMMAND: /* A control has been activated. */
|
||
|
{
|
||
|
switch(HIWORD(wParam))
|
||
|
{
|
||
|
case EN_KILLFOCUS:
|
||
|
{
|
||
|
// error checking
|
||
|
int value = GetDlgItemInt(hWndDlg, LOWORD(wParam), NULL, FALSE );
|
||
|
|
||
|
switch(LOWORD(wParam))
|
||
|
{
|
||
|
case IDC_DATARATEVARIABILITY:
|
||
|
{
|
||
|
if(value < 0) value = 0;
|
||
|
if(value > 100 ) value = 100;
|
||
|
SendDlgItemMessage(hWndDlg, IDC_DATARATEVARIABILITY_SLIDER, TBM_SETPOS, (WPARAM) TRUE, value );
|
||
|
SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE );
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
// save everything to our structure
|
||
|
case IDC_EDIT_PREBUFFER:
|
||
|
{
|
||
|
if(value < 0) value = 0;
|
||
|
if(value > 30 ) value = 30;
|
||
|
SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE );
|
||
|
break;
|
||
|
}
|
||
|
case IDC_EDIT_OPTIMAL:
|
||
|
{
|
||
|
if(value < 0) value = 0;
|
||
|
if(value > 30 ) value = 30;
|
||
|
SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE );
|
||
|
break;
|
||
|
}
|
||
|
case IDC_EDIT_MAXBUFFER:
|
||
|
{
|
||
|
if(value < 0) value = 0;
|
||
|
if(value > 30 ) value = 30;
|
||
|
SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE );
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case IDC_EDIT_MINBANDWIDTH:
|
||
|
{
|
||
|
if(value < 0) value = 0;
|
||
|
if(value > 100 ) value = 100;
|
||
|
SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE );
|
||
|
break;
|
||
|
}
|
||
|
case IDC_EDIT_MAXBANDWIDTH:
|
||
|
{
|
||
|
if(value < 100) value = 100;
|
||
|
if(value > 1000 ) value = 1000;
|
||
|
SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE );
|
||
|
break;
|
||
|
}
|
||
|
case IDC_EDIT_UNDERSHOOT:
|
||
|
{
|
||
|
if(value < 50) value = 50;
|
||
|
if(value > 100 ) value = 100;
|
||
|
SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE );
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case IDC_EDIT_MINQUALITY:
|
||
|
{
|
||
|
if(value < 0) value = 0;
|
||
|
if(value > 63 ) value = 63;
|
||
|
SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE );
|
||
|
break;
|
||
|
}
|
||
|
case IDC_EDIT_MAXQUALITY:
|
||
|
{
|
||
|
if(value < 0) value = 0;
|
||
|
if(value > 63 ) value = 63;
|
||
|
SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE );
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
case IDC_EDIT_TEMPORAL_DOWN :
|
||
|
{
|
||
|
if(value < 0) value = 0;
|
||
|
if(value > 100 ) value = 100;
|
||
|
SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE );
|
||
|
break;
|
||
|
}
|
||
|
case IDC_EDIT_SPATIAL_DOWN :
|
||
|
{
|
||
|
if(value < 0) value = 0;
|
||
|
if(value > 100 ) value = 100;
|
||
|
|
||
|
SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE );
|
||
|
break;
|
||
|
}
|
||
|
case IDC_EDIT_SPATIAL_UP :
|
||
|
{
|
||
|
if(value < 0) value = 0;
|
||
|
if(value > 100 ) value = 100;
|
||
|
|
||
|
SetDlgItemInt( hWndDlg, LOWORD(wParam), value, FALSE );
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
default:
|
||
|
return (FALSE);
|
||
|
}
|
||
|
|
||
|
return (FALSE);
|
||
|
}
|
||
|
|
||
|
default:
|
||
|
return (FALSE);
|
||
|
|
||
|
} /* End of Main Dialog case statement. */
|
||
|
|
||
|
return FALSE;
|
||
|
} /* End of WndProc */
|
||
|
|
||
|
|
||
|
|
||
|
BOOL FAR PASCAL Settings_ParamsDlgProc( HWND hWndDlg,
|
||
|
UINT Message,
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam)
|
||
|
{
|
||
|
COMP_CONFIG_VP6 *compConfig = (COMP_CONFIG_VP6 *)GetWindowLong(hWndDlg,GWL_USERDATA);
|
||
|
|
||
|
switch(Message)
|
||
|
{
|
||
|
case WM_INITDIALOG:
|
||
|
{
|
||
|
SetWindowLong(hWndDlg, GWL_USERDATA, (unsigned long)lParam);
|
||
|
compConfig = (COMP_CONFIG_VP6 *) lParam;
|
||
|
|
||
|
if(!memcmp(compConfig->SettingsFile,compConfig->RootDirectory,strlen(compConfig->RootDirectory)))
|
||
|
{
|
||
|
strcpy(compConfig->SettingsFile,compConfig->SettingsFile+strlen(compConfig->RootDirectory));
|
||
|
}
|
||
|
if(!memcmp(compConfig->SettingsFile+strlen(compConfig->SettingsFile)-4,".vps",4))
|
||
|
{
|
||
|
compConfig->SettingsFile[strlen(compConfig->SettingsFile)-4]=0;
|
||
|
}
|
||
|
SetDlgItemText(hWndDlg,IDC_FIRSTPASS,compConfig->FirstPassFile);
|
||
|
SetDlgItemText(hWndDlg,IDC_SETTINGSFILE,compConfig->SettingsFile);
|
||
|
|
||
|
WIN32_FIND_DATA wfd;
|
||
|
|
||
|
char FileFilter[512];
|
||
|
strncpy(FileFilter,compConfig->RootDirectory,512);
|
||
|
strcat(FileFilter,"\\*.vps");
|
||
|
HANDLE ffh = FindFirstFile(FileFilter,&wfd);
|
||
|
if( ffh !=INVALID_HANDLE_VALUE)
|
||
|
{
|
||
|
do
|
||
|
{
|
||
|
wfd.cFileName[strlen(wfd.cFileName)-4]=0;
|
||
|
SendDlgItemMessage(hWndDlg, IDC_SETTINGS_LIST, LB_ADDSTRING, 0, (LPARAM) (LPCSTR) wfd.cFileName);
|
||
|
}
|
||
|
while ( FindNextFile(ffh,&wfd));
|
||
|
FindClose(ffh);
|
||
|
}
|
||
|
|
||
|
|
||
|
return (TRUE);
|
||
|
}
|
||
|
|
||
|
case WM_DESTROY: //case WM_CLOSE: /* Close the dialog. */
|
||
|
|
||
|
// save everything to our structure
|
||
|
GetDlgItemText(hWndDlg,IDC_FIRSTPASS,compConfig->FirstPassFile,512);
|
||
|
GetDlgItemText(hWndDlg,IDC_SETTINGSFILE,compConfig->SettingsFile,512);
|
||
|
if(compConfig->SettingsFile[1] != ':' && compConfig->SettingsFile[1] != '\\')
|
||
|
{
|
||
|
char tmp[512];
|
||
|
strncpy(tmp,compConfig->SettingsFile,512);
|
||
|
strncpy(compConfig->SettingsFile,compConfig->RootDirectory,512);
|
||
|
strcat(compConfig->SettingsFile,tmp);
|
||
|
}
|
||
|
if(compConfig->SettingsFile[strlen(compConfig->SettingsFile)-4] != '.' )
|
||
|
{
|
||
|
strcat(compConfig->SettingsFile,".vps");
|
||
|
}
|
||
|
|
||
|
return (TRUE);
|
||
|
|
||
|
case WM_COMMAND: /* A control has been activated. */
|
||
|
{
|
||
|
switch(HIWORD(wParam))
|
||
|
{
|
||
|
case LBN_SELCHANGE :
|
||
|
{
|
||
|
int curSel =SendDlgItemMessage(hWndDlg, IDC_SETTINGS_LIST, LB_GETCURSEL, 0, 0);
|
||
|
SendDlgItemMessage(hWndDlg, IDC_SETTINGS_LIST, LB_GETTEXT, curSel, (DWORD) compConfig->SettingsFile);
|
||
|
SetDlgItemText(hWndDlg,IDC_SETTINGSFILE,compConfig->SettingsFile);
|
||
|
if(compConfig->SettingsFile[1] != ':' && compConfig->SettingsFile[1] != '\\')
|
||
|
{
|
||
|
char tmp[512];
|
||
|
strncpy(tmp,compConfig->SettingsFile,512);
|
||
|
strncpy(compConfig->SettingsFile,compConfig->RootDirectory,512);
|
||
|
strcat(compConfig->SettingsFile,"\\");
|
||
|
strcat(compConfig->SettingsFile,tmp);
|
||
|
}
|
||
|
if(compConfig->SettingsFile[strlen(compConfig->SettingsFile)-4] != '.' )
|
||
|
{
|
||
|
strcat(compConfig->SettingsFile,".vps");
|
||
|
}
|
||
|
FILE *f = fopen(compConfig->SettingsFile,"rb");
|
||
|
if(f)
|
||
|
{
|
||
|
char tmp[512];
|
||
|
HWND still = (HWND) compConfig->PlaceHolder;
|
||
|
strncpy(tmp,compConfig->RootDirectory,512);
|
||
|
fread(compConfig,sizeof COMP_CONFIG_VP6,1,f);
|
||
|
strncpy(compConfig->RootDirectory,tmp,512);
|
||
|
fclose(f);
|
||
|
compConfig->PlaceHolder = (INT32) still;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
case BN_CLICKED:
|
||
|
switch(LOWORD(wParam))
|
||
|
{
|
||
|
case ID_SAVE:
|
||
|
{
|
||
|
FILE *f;
|
||
|
|
||
|
GetDlgItemText(hWndDlg,IDC_SETTINGSFILE,compConfig->SettingsFile,512);
|
||
|
GetDlgItemText(hWndDlg,IDC_FIRSTPASS,compConfig->FirstPassFile,512);
|
||
|
|
||
|
if(compConfig->SettingsFile[1] != ':' && compConfig->SettingsFile[1] != '\\')
|
||
|
{
|
||
|
char tmp[512];
|
||
|
strncpy(tmp,compConfig->SettingsFile,512);
|
||
|
strncpy(compConfig->SettingsFile,compConfig->RootDirectory,512);
|
||
|
strcat(compConfig->SettingsFile,"\\");
|
||
|
strcat(compConfig->SettingsFile,tmp);
|
||
|
}
|
||
|
if(compConfig->SettingsFile[strlen(compConfig->SettingsFile)-4] != '.' )
|
||
|
{
|
||
|
strcat(compConfig->SettingsFile,".vps");
|
||
|
}
|
||
|
|
||
|
f=fopen(compConfig->SettingsFile,"wb");
|
||
|
if(f)
|
||
|
{
|
||
|
fwrite(compConfig,10+sizeof COMP_CONFIG_VP6,1,f);
|
||
|
fclose(f);
|
||
|
}
|
||
|
int curSel = SendDlgItemMessage(hWndDlg, IDC_SETTINGS_LIST, LB_FINDSTRING, 0, (LPARAM) (LPCSTR) compConfig->SettingsFile );
|
||
|
if( curSel == LB_ERR)
|
||
|
{
|
||
|
WIN32_FIND_DATA wfd;
|
||
|
|
||
|
int curSel = SendDlgItemMessage(hWndDlg, IDC_SETTINGS_LIST, LB_RESETCONTENT, 0, 0 );
|
||
|
char FileFilter[512];
|
||
|
strncpy(FileFilter,compConfig->RootDirectory,512);
|
||
|
strcat(FileFilter,"\\*.vps");
|
||
|
HANDLE ffh = FindFirstFile(FileFilter,&wfd);
|
||
|
if( ffh !=INVALID_HANDLE_VALUE)
|
||
|
{
|
||
|
do
|
||
|
{
|
||
|
wfd.cFileName[strlen(wfd.cFileName)-4]=0;
|
||
|
SendDlgItemMessage(hWndDlg, IDC_SETTINGS_LIST, LB_ADDSTRING, 0, (LPARAM) (LPCSTR) wfd.cFileName);
|
||
|
}
|
||
|
while ( FindNextFile(ffh,&wfd));
|
||
|
FindClose(ffh);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
return TRUE;
|
||
|
};
|
||
|
case ID_DELETE:
|
||
|
{
|
||
|
int curSel =SendDlgItemMessage(hWndDlg, IDC_SETTINGS_LIST, LB_GETCURSEL, 0, 0);
|
||
|
SendDlgItemMessage(hWndDlg, IDC_SETTINGS_LIST, LB_DELETESTRING, curSel, 0);
|
||
|
|
||
|
|
||
|
DeleteFile(compConfig->SettingsFile);
|
||
|
|
||
|
return TRUE;
|
||
|
};
|
||
|
case IDC_LOAD_FIRSTPASS:
|
||
|
{
|
||
|
static TCHAR szFilterLoad[] = TEXT("VP First Pass \0*.vpf\0\0");
|
||
|
OPENFILENAME ofn;
|
||
|
TCHAR szTitle[64];
|
||
|
TCHAR szT[256];
|
||
|
ofn.lStructSize= sizeof(ofn);
|
||
|
ofn.hInstance= 0;
|
||
|
ofn.lpstrFilter= szFilterLoad;
|
||
|
ofn.lpstrCustomFilter= NULL;
|
||
|
ofn.nMaxCustFilter= 0;
|
||
|
ofn.nFilterIndex= 0;
|
||
|
ofn.lpstrFileTitle= szTitle;
|
||
|
ofn.nMaxFileTitle= sizeof(szTitle);
|
||
|
ofn.lpstrInitialDir= compConfig->RootDirectory;
|
||
|
ofn.lpstrTitle= NULL;
|
||
|
ofn.nFileOffset= 0;
|
||
|
ofn.nFileExtension= 0;
|
||
|
ofn.lpstrDefExt= "vps";
|
||
|
ofn.lCustData= 0L;
|
||
|
ofn.lpfnHook= NULL;
|
||
|
ofn.lpTemplateName= NULL;
|
||
|
ofn.hwndOwner= hWndDlg;
|
||
|
ofn.lpstrFile= szT;
|
||
|
ofn.nMaxFile= sizeof(szT);
|
||
|
ofn.Flags= 0;
|
||
|
szTitle[0] = TEXT('\0');
|
||
|
szT[0] = TEXT('\0');
|
||
|
if(GetOpenFileName(&ofn))
|
||
|
{
|
||
|
strncpy(compConfig->FirstPassFile,ofn.lpstrFile,512);
|
||
|
SetDlgItemText(hWndDlg,IDC_FIRSTPASS,compConfig->FirstPassFile);
|
||
|
}
|
||
|
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
case IDC_LOAD_SETTINGS:
|
||
|
{
|
||
|
static TCHAR szFilterLoad[] = TEXT("VP Setting Files\0*.vps\0\0");
|
||
|
OPENFILENAME ofn;
|
||
|
TCHAR szTitle[64];
|
||
|
TCHAR szT[256];
|
||
|
ofn.lStructSize= sizeof(ofn);
|
||
|
ofn.hInstance= 0;
|
||
|
ofn.lpstrFilter= szFilterLoad;
|
||
|
ofn.lpstrCustomFilter= NULL;
|
||
|
ofn.nMaxCustFilter= 0;
|
||
|
ofn.nFilterIndex= 0;
|
||
|
ofn.lpstrFileTitle= szTitle;
|
||
|
ofn.nMaxFileTitle= sizeof(szTitle);
|
||
|
ofn.lpstrInitialDir= compConfig->RootDirectory;
|
||
|
ofn.lpstrTitle= NULL;
|
||
|
ofn.nFileOffset= 0;
|
||
|
ofn.nFileExtension= 0;
|
||
|
ofn.lpstrDefExt= "vps";
|
||
|
ofn.lCustData= 0L;
|
||
|
ofn.lpfnHook= NULL;
|
||
|
ofn.lpTemplateName= NULL;
|
||
|
ofn.hwndOwner= hWndDlg;
|
||
|
ofn.lpstrFile= szT;
|
||
|
ofn.nMaxFile= sizeof(szT);
|
||
|
ofn.Flags= 0;
|
||
|
szTitle[0] = TEXT('\0');
|
||
|
szT[0] = TEXT('\0');
|
||
|
if(GetOpenFileName(&ofn))
|
||
|
{
|
||
|
|
||
|
strncpy(compConfig->SettingsFile,ofn.lpstrFile,512);
|
||
|
|
||
|
FILE *f = fopen(compConfig->SettingsFile,"rb");
|
||
|
if(f)
|
||
|
{
|
||
|
HWND still = (HWND) compConfig->PlaceHolder;
|
||
|
fread(compConfig,sizeof COMP_CONFIG_VP6,1,f);
|
||
|
fclose(f);
|
||
|
compConfig->PlaceHolder = (INT32) still;
|
||
|
}
|
||
|
if(!memcmp(compConfig->SettingsFile,compConfig->RootDirectory,strlen(compConfig->RootDirectory)))
|
||
|
{
|
||
|
strcpy(compConfig->SettingsFile,compConfig->SettingsFile+strlen(compConfig->RootDirectory));
|
||
|
}
|
||
|
if(!memcmp(compConfig->SettingsFile+strlen(compConfig->SettingsFile)-4,".vps",4))
|
||
|
{
|
||
|
compConfig->SettingsFile[strlen(compConfig->SettingsFile)-4]=0;
|
||
|
}
|
||
|
SetDlgItemText(hWndDlg,IDC_SETTINGSFILE,compConfig->SettingsFile);
|
||
|
}
|
||
|
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
default:
|
||
|
return (FALSE);
|
||
|
|
||
|
} /* End of Main Dialog case statement. */
|
||
|
|
||
|
return FALSE;
|
||
|
} /* End of WndProc */
|