-# Microsoft Developer Studio Project File - Name="x264vfw" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
-
-CFG=x264vfw - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "x264vfw.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "x264vfw.mak" CFG="x264vfw - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "x264vfw - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "x264vfw - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-MTL=midl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "x264vfw - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "obj/Release"
-# PROP Intermediate_Dir "obj/Release"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "VFW_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../extras" /I "../../.." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "VFW_EXPORTS" /YX /FD /c
-# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x804 /d "NDEBUG"
-# ADD RSC /l 0x804 /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 winmm.lib vfw32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"bin/x264vfw.dll"
-
-!ELSEIF "$(CFG)" == "x264vfw - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "obj/Debug"
-# PROP Intermediate_Dir "obj/Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "VFW_EXPORTS" /YX /FD /GZ /c
-# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../extras" /I "../../.." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "VFW_EXPORTS" /YX /FD /GZ /c
-# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
-# ADD BASE RSC /l 0x804 /d "_DEBUG"
-# ADD RSC /l 0x804 /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"bin/x264vfw.dll" /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "x264vfw - Win32 Release"
-# Name "x264vfw - Win32 Debug"
-# Begin Group "Source Files"
-
-# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
-# Begin Source File
-
-SOURCE=..\..\codec.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\config.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\driverproc.c
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\driverproc.def
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\resource.rc
-# End Source File
-# End Group
-# Begin Group "Header Files"
-
-# PROP Default_Filter "h;hpp;hxx;hm;inl"
-# Begin Source File
-
-SOURCE=..\..\resource.h
-# End Source File
-# Begin Source File
-
-SOURCE=..\..\x264vfw.h
-# End Source File
-# End Group
-# Begin Group "Resource Files"
-
-# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-# End Group
-# Begin Source File
-
-SOURCE=..\..\..\build\win32\bin\libx264.lib
-# End Source File
-# End Target
-# End Project
+# Microsoft Developer Studio Project File - Name="x264vfw" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** DO NOT EDIT **\r
+\r
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102\r
+\r
+CFG=x264vfw - Win32 Debug\r
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,\r
+!MESSAGE use the Export Makefile command and run\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "x264vfw.mak".\r
+!MESSAGE \r
+!MESSAGE You can specify a configuration when running NMAKE\r
+!MESSAGE by defining the macro CFG on the command line. For example:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "x264vfw.mak" CFG="x264vfw - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE Possible choices for configuration are:\r
+!MESSAGE \r
+!MESSAGE "x264vfw - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE "x264vfw - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=xicl6.exe\r
+MTL=midl.exe\r
+RSC=rc.exe\r
+\r
+!IF "$(CFG)" == "x264vfw - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "obj/Release"\r
+# PROP Intermediate_Dir "obj/Release"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "VFW_EXPORTS" /YX /FD /c\r
+# ADD CPP /nologo /MT /W3 /GX /O2 /I "../../../extras" /I "../../.." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "VFW_EXPORTS" /FR /YX /FD /c\r
+# SUBTRACT CPP /Z<none>\r
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x804 /d "NDEBUG"\r
+# ADD RSC /l 0x804 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=xilink6.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386\r
+# ADD LINK32 winmm.lib vfw32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"bin/x264vfw.dll"\r
+# SUBTRACT LINK32 /debug\r
+\r
+!ELSEIF "$(CFG)" == "x264vfw - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "obj/Debug"\r
+# PROP Intermediate_Dir "obj/Debug"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "VFW_EXPORTS" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../extras" /I "../../.." /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "VFW_EXPORTS" /FR /YX /FD /GZ /c\r
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32\r
+# ADD BASE RSC /l 0x804 /d "_DEBUG"\r
+# ADD RSC /l 0x804 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=xilink6.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 winmm.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"bin/x264vfw.dll" /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "x264vfw - Win32 Release"\r
+# Name "x264vfw - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\codec.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\config.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\driverproc.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\driverproc.def\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\resource.rc\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\resource.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\x264vfw.h\r
+# End Source File\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# End Group\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\build\win32\bin\libx264.lib\r
+# End Source File\r
+# End Target\r
+# End Project\r
#include "x264vfw.h"
+#include <stdio.h> /* debug only */
+
/* get_csp:
* return a valid x264 CSP or X264_CSP_NULL if unsuported */
static int get_csp( BITMAPINFOHEADER *hdr )
{
CONFIG *config = &codec->config;
x264_param_t param;
+ static char statsfile[] = ".\\x264.stats";
/* Destroy previous handle */
if( codec->h != NULL )
/* Get default param */
x264_param_default( ¶m );
+ param.i_log_level = X264_LOG_NONE;
+ param.analyse.b_psnr = 0;
+ param.analyse.inter = param.analyse.intra = 0;
+
/* Set params: TODO to complete */
param.i_width = lpbiInput->bmiHeader.biWidth;
param.i_height= lpbiInput->bmiHeader.biHeight;
- if( codec->fbase > 0 )
- param.f_fps = (float)codec->fincr / (float)codec->fbase;
+ param.i_fps_num = codec->fbase;
+ param.i_fps_den = codec->fincr;
param.i_frame_reference = config->i_refmax;
param.i_idrframe = config->i_idrframe;
param.i_iframe = config->i_iframe;
- param.i_qp_constant = config->i_qp;
param.b_deblocking_filter = config->b_filter;
param.b_cabac = config->b_cabac;
- param.analyse.intra = 0;
- param.analyse.inter = 0;
+ param.i_bframe = config->i_bframe;
+ param.analyse.i_subpel_refine = config->i_subpel_refine + 1; /* 0..4 -> 1..5 */
+
+ /* bframe prediction - gui goes alphabetically, so 0=NONE, 1=SPATIAL, 2=TEMPORAL */
+ switch(config->i_direct_mv_pred) {
+ case 0: param.analyse.i_direct_mv_pred = X264_DIRECT_PRED_NONE; break;
+ case 1: param.analyse.i_direct_mv_pred = X264_DIRECT_PRED_SPATIAL; break;
+ case 2: param.analyse.i_direct_mv_pred = X264_DIRECT_PRED_TEMPORAL; break;
+ }
+ param.i_deblocking_filter_alphac0 = config->i_inloop_a;
+ param.i_deblocking_filter_beta = config->i_inloop_b;
+
+ if( config->b_bsub16x16 )
+ param.analyse.inter |= X264_ANALYSE_BSUB16x16;
+
if( config->b_psub16x16 )
param.analyse.inter |= X264_ANALYSE_PSUB16x16;
if( config->b_psub8x8 )
param.analyse.inter |= X264_ANALYSE_PSUB8x8;
- if( config->b_i4x4 )
- {
+ if( config->b_i4x4 ) {
param.analyse.intra |= X264_ANALYSE_I4x4;
param.analyse.inter |= X264_ANALYSE_I4x4;
}
- switch( config->mode )
+ switch( config->i_encoding_type )
{
- case 0: /* 1 PASS */
+ case 0: /* 1 PASS CBR */
+ param.rc.b_cbr = 1;
+ param.rc.i_bitrate = config->bitrate;
+ break;
+ case 1: /* 1 PASS CQ */
+ param.rc.i_qp_constant = config->i_qp;
break;
default:
+ case 2: /* 2 PASS */
+ param.rc.psz_stat_out = param.rc.psz_stat_in = ".\\x264.stats";
+ if (config->i_pass == 1)
+ param.rc.b_stat_write = 1;
+ else {
+ param.rc.i_bitrate = config->i_2passbitrate;
+ param.rc.b_stat_read = 1;
+ param.rc.b_cbr = 1;
+ }
break;
}
/* encode it */
x264_encoder_encode( codec->h, &nal, &i_nal, &pic );
- /* create bitstream */
+ /* create bitstream, unless we're dropping it in 1st pass */
i_out = 0;
- for( i = 0; i < i_nal; i++ )
- {
- int i_size = outhdr->biSizeImage - i_out;
- x264_nal_encode( (uint8_t*)icc->lpOutput + i_out, &i_size, 1, &nal[i] );
- i_out += i_size;
+ if (codec->config.i_encoding_type != 2 || codec->config.i_pass > 1) {
+ for( i = 0; i < i_nal; i++ ) {
+ int i_size = outhdr->biSizeImage - i_out;
+ x264_nal_encode( (uint8_t*)icc->lpOutput + i_out, &i_size, 1, &nal[i] );
+
+ i_out += i_size;
+ }
}
+
outhdr->biSizeImage = i_out;
/* Set key frame only for IDR, as they are real synch point, I frame
#include <commctrl.h>
/* Registry */
-#define X264_REG_KEY HKEY_CURRENT_USER
-#define X264_REG_PARENT "Software\\GNU\\x264"
+#define X264_REG_KEY HKEY_CURRENT_USER
+#define X264_REG_PARENT "Software\\GNU"
#define X264_REG_CHILD "x264"
#define X264_REG_CLASS "config"
/* window controls */
-#define BITRATE_MAX 5000
-#define QUANT_MAX 51
+#define BITRATE_MAX 5000
+#define QUANT_MAX 51
/* description */
-#define X264_NAME "x264"
-#define X264_DEF_TEXT "Are you sure you want to load default vaules"
+#define X264_NAME "x264"
+#define X264_DEF_TEXT "Are you sure you want to load default vaules"
/* Registery handling */
typedef struct
{ "bitrate", ®.bitrate, 800 },
{ "quantizer", ®.i_qp, 26 },
{ "encoding_type", ®.i_encoding_type, 1 },
+ { "passbitrate", ®.i_2passbitrate, 800 },
+ { "pass_number", ®.i_pass, 1 },
/* Advance dialog */
{ "cabac", ®.b_cabac, 1 },
{ "loop_filter", ®.b_filter, 1 },
{ "idrframe", ®.i_idrframe, 1 },
- { "iframe", ®.i_iframe, 150 },
+ { "iframe", ®.i_iframe, 250},
{ "refmax", ®.i_refmax, 1 },
+ { "bmax", ®.i_bframe, 0 },
+ {"direct_pred", ®.i_direct_mv_pred, 2 },
+ {"inloop_a", ®.i_inloop_a, 0 },
+ {"inloop_b", ®.i_inloop_b, 0 },
/* analysis */
{"i4x4", ®.b_i4x4, 1 },
{"psub16x16", ®.b_psub16x16, 1 },
- {"psub8x8", ®.b_psub8x8, 1 }
+ {"psub8x8", ®.b_psub8x8, 0 },
+ {"bsub16x16", ®.b_bsub16x16, 1 },
+ {"subpel", ®.i_subpel_refine, 3 }
+
};
static const reg_str_t reg_str_table[] =
{
- { "fourcc", reg.fcc, "x264" }
+ { "fourcc", reg.fcc, "h264" }
};
void config_reg_load( CONFIG *config )
{
HKEY hKey;
- /* Just in case */
- memset( config, 0, sizeof( CONFIG ) );
-
- if(RegOpenKeyEx( X264_REG_KEY, X264_REG_PARENT, 0, KEY_ALL_ACCESS, &hKey ))
+ if(RegOpenKeyEx( X264_REG_KEY, X264_REG_PARENT, 0, KEY_ALL_ACCESS, &hKey )) {
return;
- if( RegDeleteKey( hKey, X264_REG_CHILD ) )
+ }
+ if( RegDeleteKey( hKey, X264_REG_CHILD ) ) {
return;
+ }
RegCloseKey( hKey );
+ /* Just in case */
+ memset( config, 0, sizeof( CONFIG ) );
+
config_reg_load( config );
config_reg_save( config );
}
EnableWindow( GetDlgItem( hDlg, IDC_QUANTEDIT ), FALSE );
EnableWindow( GetDlgItem( hDlg, IDC_QUANTSLIDER ), FALSE );
+ EnableWindow( GetDlgItem( hDlg, IDC_2PASS1 ), FALSE );
+ EnableWindow( GetDlgItem( hDlg, IDC_2PASS2 ), FALSE );
+ EnableWindow( GetDlgItem( hDlg, IDC_2PASSBITRATE ), FALSE );
+ EnableWindow( GetDlgItem( hDlg, IDC_2PASSBITRATE_S ), FALSE );
break;
+
case 1 : /* 1 Pass, Quantizer Based */
EnableWindow( GetDlgItem( hDlg, IDC_BITRATEEDIT ), FALSE );
EnableWindow( GetDlgItem( hDlg, IDC_BITRATESLIDER ), FALSE );
EnableWindow( GetDlgItem( hDlg, IDC_QUANTEDIT ), TRUE );
EnableWindow( GetDlgItem( hDlg, IDC_QUANTSLIDER ), TRUE );
+ EnableWindow( GetDlgItem( hDlg, IDC_2PASS1 ), FALSE );
+ EnableWindow( GetDlgItem( hDlg, IDC_2PASS2 ), FALSE );
+ EnableWindow( GetDlgItem( hDlg, IDC_2PASSBITRATE ), FALSE );
+ EnableWindow( GetDlgItem( hDlg, IDC_2PASSBITRATE_S ), FALSE );
break;
+
case 2 : /* 2 Pass */
- /* not yet implemented */
+ EnableWindow( GetDlgItem( hDlg, IDC_BITRATEEDIT ), FALSE );
+ EnableWindow( GetDlgItem( hDlg, IDC_BITRATESLIDER ), FALSE );
+
+ EnableWindow( GetDlgItem( hDlg, IDC_QUANTEDIT ), FALSE );
+ EnableWindow( GetDlgItem( hDlg, IDC_QUANTSLIDER ), FALSE );
+
+ EnableWindow( GetDlgItem( hDlg, IDC_2PASS1 ), TRUE );
+ EnableWindow( GetDlgItem( hDlg, IDC_2PASS2 ), TRUE );
+ EnableWindow( GetDlgItem( hDlg, IDC_2PASSBITRATE ), config->i_pass > 1 );
+ EnableWindow( GetDlgItem( hDlg, IDC_2PASSBITRATE_S ), config->i_pass > 1 );
+
break;
}
(LPARAM) MAKELONG( 0, BITRATE_MAX ) );
SendDlgItemMessage( hDlg, IDC_QUANTSLIDER, TBM_SETRANGE, TRUE,
(LPARAM) MAKELONG( 0, QUANT_MAX ) );
+ SendDlgItemMessage( hDlg, IDC_2PASSBITRATE_S, TBM_SETRANGE, TRUE,
+ (LPARAM) MAKELONG( 0, BITRATE_MAX ) );
+
+
}
/* Updates the window from config */
{
SetDlgItemInt( hDlg, IDC_BITRATEEDIT, config->bitrate, FALSE );
SetDlgItemInt( hDlg, IDC_QUANTEDIT, config->i_qp, FALSE );
+ SetDlgItemInt( hDlg, IDC_2PASSBITRATE, config->i_2passbitrate, FALSE );
switch( config->i_encoding_type )
{
IDC_RADIOBITRATE, IDC_RADIOTWOPASS, IDC_RADIOBITRATE);
break;
case 1 : /* 1 Pass, Quantizer Based */
- CheckRadioButton(hDlg,
- IDC_RADIOBITRATE, IDC_RADIOTWOPASS, IDC_RADIOQUANT);
+ CheckRadioButton( hDlg,
+ IDC_RADIOBITRATE, IDC_RADIOTWOPASS, IDC_RADIOQUANT);
break;
case 2 : /* 2 Pass */
- CheckRadioButton(hDlg,
- IDC_RADIOBITRATE, IDC_RADIOTWOPASS, IDC_RADIOTWOPASS);
+ CheckRadioButton( hDlg,
+ IDC_RADIOBITRATE, IDC_RADIOTWOPASS, IDC_RADIOTWOPASS);
+
+ if (config->i_pass == 1)
+ CheckRadioButton(hDlg,
+ IDC_2PASS1, IDC_2PASS2, IDC_2PASS1);
+ else
+ CheckRadioButton(hDlg,
+ IDC_2PASS1, IDC_2PASS2, IDC_2PASS2);
+ EnableWindow( GetDlgItem( hDlg, IDC_2PASSBITRATE ), config->i_pass > 1 );
+ EnableWindow( GetDlgItem( hDlg, IDC_2PASSBITRATE_S ), config->i_pass > 1 );
+
break;
}
config->bitrate );
SendDlgItemMessage( hDlg, IDC_QUANTSLIDER, TBM_SETPOS, TRUE,
config->i_qp );
+ SendDlgItemMessage( hDlg, IDC_2PASSBITRATE_S, TBM_SETPOS, TRUE,
+ config->i_2passbitrate );
+
}
main_enable_item( hDlg, config );
main_update_dlg( hDlg, config );
break;
+ case IDC_2PASS1 :
+ config->i_pass = 1; /* 1st pass */
+ main_enable_item( hDlg, config );
+ main_update_dlg( hDlg, config );
+ break;
+ case IDC_2PASS2 :
+ config->i_pass = 2; /* 2nd pass */
+ main_enable_item( hDlg, config );
+ main_update_dlg( hDlg, config );
+ break;
}
break;
case EN_CHANGE :
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;
}
break;
default:
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 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)"None");
+ 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_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_IDRFRAMES, config->i_idrframe, FALSE );
SetDlgItemInt( hDlg, IDC_IFRAMES, config->i_iframe, FALSE );
SetDlgItemInt( hDlg, IDC_KEYFRAME, config->i_refmax, FALSE );
+ SetDlgItemInt( hDlg, IDC_BFRAME, config->i_bframe, 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_B, TBM_SETRANGE, TRUE,
+ (LPARAM) MAKELONG( -6, 6 ) );
+
+ SendDlgItemMessage( hDlg, IDC_INLOOP_A, TBM_SETPOS, TRUE,
+ config->i_inloop_a );
+ SendDlgItemMessage( hDlg, IDC_INLOOP_B, TBM_SETPOS, TRUE,
+ config->i_inloop_b );
+ set_dlgitem_int( hDlg, IDC_LOOPA_TXT, config->i_inloop_a);
+ set_dlgitem_int( hDlg, IDC_LOOPB_TXT, config->i_inloop_b);
+
+ EnableWindow( GetDlgItem( hDlg, IDC_P8X8 ), config->b_psub16x16 );
+
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 )
{
case IDC_LOOPFILTER :
config->b_filter = ( IsDlgButtonChecked( hDlg, IDC_LOOPFILTER ) == 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 :
case IDC_FOURCC :
GetDlgItemText( hDlg, IDC_FOURCC, config->fcc, 5 );
break;
+ case IDC_BFRAME :
+ config->i_bframe = GetDlgItemInt( hDlg, IDC_BFRAME, FALSE, 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);
+
+ } else if ( (HWND) lParam == GetDlgItem( hDlg, IDC_INLOOP_B ) ) {
+ config->i_inloop_b = SendDlgItemMessage( hDlg, IDC_INLOOP_B, TBM_GETPOS, 0, 0 );
+ set_dlgitem_int( hDlg, IDC_LOOPB_TXT, config->i_inloop_b);
+ }
+ break;
+ case WM_CLOSE:
+ EndDialog( hDlg, LOWORD( wParam ) );
+ break;
default :
return 0;
}
CONFIG temp;
codec->config.b_save = FALSE;
- memcpy( &temp, &codec->config, sizeof(CONFIG) );
+ memcpy( &temp, &codec->config, sizeof(CONFIG) );
DialogBoxParam( g_hInst, MAKEINTRESOURCE(IDD_MAINCONFIG), (HWND)lParam1, callback_main, (LPARAM)&temp );
- if( temp.b_save )
- {
- memcpy( &codec->config, &temp, sizeof(CONFIG) );
+ if( temp.b_save )
+ {
+ memcpy( &codec->config, &temp, sizeof(CONFIG) );
config_reg_save( &codec->config );
- }
+ }
}
return ICERR_OK;
}
return ICERR_UNSUPPORTED;
#endif
-
default:
- return DefDriverProc( dwDriverId, hDriver, uMsg, lParam1, lParam2 );
+ if (uMsg < DRV_USER)
+ return DefDriverProc(dwDriverId, hDriver, uMsg, lParam1, lParam2);
+ else
+ return ICERR_UNSUPPORTED;
}
}
#define IDC_CABAC 1005
#define IDC_BITRATEEDIT2 1005
#define IDC_QUANTEDIT 1005
+#define IDC_B16X16 1006
+#define IDC_2PASSBITRATE_S 1006
#define IDC_LOOPFILTER 1007
+#define IDC_2PASSBITRATE 1007
+#define IDC_I4X4 1008
#define IDC_BITRATELOW 1009
+#define IDC_P16X16 1009
#define IDC_BITRATELOW2 1010
+#define IDC_P8X8 1010
#define IDC_BITRATEHIGH 1011
#define IDC_BFRAMES 1012
#define IDC_BITRATEHIGH2 1012
#define IDC_IDRFRAMES 1012
#define IDC_BFRAMES2 1013
#define IDC_IFRAMES 1013
+#define IDC_BITRATELOW3 1013
#define IDC_EDIT3 1014
#define IDC_KEYFRAME 1014
+#define IDC_BITRATEHIGH3 1014
+#define IDC_BFRAME 1015
#define IDC_DEFAULTS 1016
#define IDC_CHECK3 1017
#define IDC_ADVANCED 1018
#define IDC_X264 1035
#define IDC_BUILD 1036
#define IDC_FOURCC 1039
+#define IDC_SUBPEL 1040
+#define IDC_DIRECTPRED 1041
+#define IDC_2PASS1 1041
+#define IDC_2PASS2 1042
+#define IDC_INLOOP_A 1044
+#define IDC_INLOOP_B 1045
+#define IDC_LOOPA_TXT 1047
+#define IDC_LOOPB_TXT 1048
// Next default values for new objects
//
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 104
#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1040
+#define _APS_NEXT_CONTROL_VALUE 1049
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
PUSHBUTTON "Cancel",IDCANCEL,168,210,50,14
CONTROL "Slider1",IDC_BITRATESLIDER,"msctls_trackbar32",TBS_BOTH |
TBS_NOTICKS | WS_TABSTOP,13,31,175,15
- EDITTEXT IDC_BITRATEEDIT,191,32,27,14,ES_AUTOHSCROLL | ES_NUMBER
+ EDITTEXT IDC_BITRATEEDIT,189,32,27,14,ES_AUTOHSCROLL | ES_NUMBER
LTEXT "Average Bitrate (kbps)",IDC_STATIC,59,20,73,8
- GROUPBOX "1 Pass, Target Bitrate",IDC_STATIC,7,7,211,47
+ GROUPBOX "",IDC_STATIC,7,7,211,47
LTEXT "0",IDC_BITRATELOW,14,19,22,8
- LTEXT "2500",IDC_BITRATEHIGH,166,21,17,8
+ LTEXT "5000",IDC_BITRATEHIGH,166,21,17,8
PUSHBUTTON "Load Defaults",IDC_DEFAULTS,7,210,57,14
PUSHBUTTON "Advanced",IDC_ADVANCED,67,210,49,14
CONTROL "Slider1",IDC_QUANTSLIDER,"msctls_trackbar32",TBS_BOTH |
TBS_NOTICKS | WS_TABSTOP,13,81,175,15
- EDITTEXT IDC_QUANTEDIT,191,82,27,14,ES_AUTOHSCROLL | ES_NUMBER
+ EDITTEXT IDC_QUANTEDIT,189,82,27,14,ES_AUTOHSCROLL | ES_NUMBER
LTEXT "Quantizer",IDC_STATIC,81,71,31,8
- GROUPBOX "1 Pass, Target Quality",IDC_STATIC,7,57,211,47
+ GROUPBOX "",IDC_STATIC,7,57,211,47
LTEXT "0 (High Quality)",IDC_BITRATELOW2,14,70,50,8
LTEXT "51 (Low Quality)",IDC_BITRATEHIGH2,131,71,53,8
- GROUPBOX "2 Pass (Best Quality at a Given Bitrate)",IDC_STATIC,7,
- 109,211,63
- LTEXT "Not Yet Implemented",IDC_STATIC,79,139,67,8
- GROUPBOX "Mode Select",IDC_MODE,7,176,211,30
+ GROUPBOX "",IDC_STATIC,7,109,211,63
CONTROL "1 Pass, Bitrate",IDC_RADIOBITRATE,"Button",
- BS_AUTORADIOBUTTON | WS_DISABLED,14,188,58,10
+ BS_AUTORADIOBUTTON,13,7,58,10
CONTROL "1 Pass, Quantizer",IDC_RADIOQUANT,"Button",
- BS_AUTORADIOBUTTON,85,188,75,10
- CONTROL "Two Pass",IDC_RADIOTWOPASS,"Button",BS_AUTORADIOBUTTON |
- WS_DISABLED,168,188,43,10
+ BS_AUTORADIOBUTTON,13,57,75,10
+ CONTROL "Two Pass",IDC_RADIOTWOPASS,"Button",BS_AUTORADIOBUTTON,
+ 13,109,43,10
+ CONTROL "First Pass",IDC_2PASS1,"Button",BS_AUTORADIOBUTTON |
+ WS_GROUP,27,126,46,10
+ CONTROL "Second Pass",IDC_2PASS2,"Button",BS_AUTORADIOBUTTON,87,
+ 126,58,10
+ CONTROL "Slider1",IDC_2PASSBITRATE_S,"msctls_trackbar32",
+ TBS_BOTH | TBS_NOTICKS | WS_TABSTOP,13,149,175,15
+ EDITTEXT IDC_2PASSBITRATE,189,149,27,14,ES_AUTOHSCROLL |
+ ES_NUMBER
+ LTEXT "0",IDC_BITRATELOW3,14,136,22,8
+ LTEXT "5000",IDC_BITRATEHIGH3,166,136,17,8
END
-IDD_ADVANCED DIALOG DISCARDABLE 0, 0, 220, 110
+IDD_ADVANCED DIALOG DISCARDABLE 0, 0, 302, 258
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "x264 Advanced Settings"
FONT 8, "MS Sans Serif"
BEGIN
- DEFPUSHBUTTON "OK",IDOK,163,89,50,14
- CONTROL "Enable CABAC",IDC_CABAC,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,13,25,61,10
+ DEFPUSHBUTTON "OK",IDOK,245,237,50,14
+ CONTROL "CABAC",IDC_CABAC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
+ 16,23,61,10
+ EDITTEXT IDC_IDRFRAMES,36,126,22,14,ES_AUTOHSCROLL | ES_NUMBER
+ LTEXT "Every",IDC_STATIC,15,128,19,8
+ GROUPBOX "H.264 features",IDC_STATIC,7,7,288,228
+ EDITTEXT IDC_KEYFRAME,255,20,33,14,ES_AUTOHSCROLL | ES_NUMBER
+ LTEXT "Max Reference Frames:",IDC_STATIC,170,24,76,8
+ EDITTEXT IDC_IFRAMES,114,107,24,14,ES_AUTOHSCROLL | ES_NUMBER
+ LTEXT "Max Keyframe Interval:",IDC_STATIC,13,110,76,8
+ EDITTEXT IDC_FOURCC,223,107,25,14,ES_AUTOHSCROLL
+ LTEXT "FourCC:",IDC_STATIC,193,110,26,8
+ CONTROL "8x16, 16x8 and 8x8 B-frame search",IDC_B16X16,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,17,189,127,10
+ EDITTEXT IDC_BFRAME,256,40,33,14,ES_AUTOHSCROLL | ES_NUMBER
+ LTEXT "Max B-Frames:",IDC_STATIC,197,43,48,8
+ CONTROL "4x4 INTRA search",IDC_I4X4,"Button",BS_AUTOCHECKBOX |
+ WS_TABSTOP,165,189,82,10
+ CONTROL "8x16, 16x8 and 8x8 P-frame search",IDC_P16X16,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,17,171,127,10
+ CONTROL "4x8, 8x4 and 4x4 P frame search",IDC_P8X8,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,165,172,119,10
+ COMBOBOX IDC_SUBPEL,117,208,70,77,CBS_DROPDOWN | CBS_SORT |
+ WS_VSCROLL | WS_TABSTOP
+ LTEXT "Subpixel refinement precision",IDC_STATIC,17,211,92,8
+ COMBOBOX IDC_DIRECTPRED,220,63,70,67,CBS_DROPDOWN | CBS_SORT |
+ WS_VSCROLL | WS_TABSTOP
+ LTEXT "BFRAME prediction mode:",IDC_STATIC,133,65,84,8
+ CONTROL "Slider1",IDC_INLOOP_A,"msctls_trackbar32",TBS_NOTICKS |
+ WS_TABSTOP,56,53,47,10
+ GROUPBOX "",IDC_STATIC,7,40,115,44
+ LTEXT "Strength (A)",IDC_STATIC,15,53,39,8
+ CONTROL "Slider1",IDC_INLOOP_B,"msctls_trackbar32",TBS_NOTICKS |
+ WS_TABSTOP,56,66,47,10
+ LTEXT "Strength (B)",IDC_STATIC,15,66,39,8
+ LTEXT "th INTRA frame\n becomes a keyframe",IDC_STATIC,61,128,
+ 85,16
+ GROUPBOX "More Encoder Settings",IDC_STATIC,7,93,145,66
+ GROUPBOX "VfW settings",IDC_STATIC,151,93,144,66
+ LTEXT "0",IDC_LOOPA_TXT,109,53,8,8
+ LTEXT "0",IDC_LOOPB_TXT,109,66,8,8
+ GROUPBOX "Motion Search Precision",IDC_STATIC,7,154,288,81
CONTROL "Deblocking Filter",IDC_LOOPFILTER,"Button",
- BS_AUTOCHECKBOX | WS_TABSTOP,13,38,72,10
- EDITTEXT IDC_IDRFRAMES,183,22,24,14,ES_AUTOHSCROLL | ES_NUMBER
- LTEXT "Max Number of IDR-Frames:",IDC_STATIC,91,25,89,8
- GROUPBOX "Advanced Settings",IDC_STATIC,7,7,206,79
- EDITTEXT IDC_KEYFRAME,174,62,33,14,ES_AUTOHSCROLL | ES_NUMBER
- LTEXT "Max Reference Frames:",IDC_STATIC,96,66,76,8
- EDITTEXT IDC_IFRAMES,183,38,24,14,ES_AUTOHSCROLL | ES_NUMBER
- LTEXT "Max Keyframe Interval:",IDC_STATIC,108,41,72,8
- EDITTEXT IDC_FOURCC,41,63,25,14,ES_AUTOHSCROLL
- LTEXT "FourCC:",IDC_STATIC,13,66,26,8
+ BS_AUTOCHECKBOX | WS_TABSTOP,16,39,69,10
END
IDD_ABOUT DIALOG DISCARDABLE 0, 0, 213, 130
END
-
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
IDD_ADVANCED, DIALOG
BEGIN
LEFTMARGIN, 7
- RIGHTMARGIN, 213
+ RIGHTMARGIN, 295
TOPMARGIN, 7
- BOTTOMMARGIN, 103
+ BOTTOMMARGIN, 251
END
IDD_ABOUT, DIALOG
END
#endif // APSTUDIO_INVOKED
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog Info
+//
+
+IDD_ADVANCED DLGINIT
+BEGIN
+ IDC_DIRECTPRED, 0x403, 22, 0
+0x6f4e, 0x656e, 0x542c, 0x6d65, 0x6f70, 0x6172, 0x2c6c, 0x7053, 0x7461,
+0x6169, 0x006c,
+ 0
+END
+
#endif // English (Canada) resources
/////////////////////////////////////////////////////////////////////////////
#define FOURCC_YUY2 mmioFOURCC('Y','U','Y','2')
#define FOURCC_YUYV mmioFOURCC('Y','U','Y','V')
-#define X264_WEBSITE "http://lyra.via.ecp.fr/"
+#define X264_WEBSITE "http://videolan.org/x264.html"
/* CONFIG: vfw config
*/
int desired_size; /* please try to avoid modifications here */
char stats[MAX_PATH];
/*******************************/
+ int i_2passbitrate;
+ int i_pass;
/* Our config */
int i_refmax;
int b_i4x4;
int b_psub16x16;
int b_psub8x8;
+ int b_bsub16x16;
+
+ int i_bframe;
+ int i_subpel_refine;
+ int i_direct_mv_pred;
+
+ int i_inloop_a;
+ int i_inloop_b;
/* vfw interface */
int b_save;
/* Dll instance */
extern HINSTANCE g_hInst;
+#if defined(_DEBUG)
+#include <stdio.h> /* vsprintf */
+#define DPRINTF_BUF_SZ 1024
+static __inline void DPRINTF(char *fmt, ...)
+{
+ va_list args;
+ char buf[DPRINTF_BUF_SZ];
+
+ va_start(args, fmt);
+ vsprintf(buf, fmt, args);
+ OutputDebugString(buf);
+}
+#else
+static __inline void DPRINTF(char *fmt, ...) { }
+#endif
+
+
#endif