Autosyncing with Wine HEAD

svn path=/trunk/; revision=26499
This commit is contained in:
The Wine Synchronizer 2007-04-25 08:21:59 +00:00
parent 9e6fba7c97
commit b0d8e30526
21 changed files with 1127 additions and 228 deletions

View file

@ -1,22 +0,0 @@
TOPSRCDIR = @top_srcdir@
TOPOBJDIR = ../..
SRCDIR = @srcdir@
VPATH = @srcdir@
MODULE = msvfw32.dll
IMPORTS = winmm comctl32 version user32 gdi32 advapi32 kernel32 ntdll
ALTNAMES = msvideo.dll
EXTRALIBS = $(LIBUNICODE)
SPEC_SRCS16 = $(ALTNAMES:.dll=.spec)
C_SRCS = \
mciwnd.c \
msvideo_main.c \
drawdib.c
C_SRCS16 = \
msvideo16.c
@MAKE_DLL_RULES@
### Dependencies:

View file

@ -13,18 +13,22 @@
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
* FIXME: Some flags are ignored
*
* Handle palettes
*/
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include "msvideo_private.h"
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
#include "winuser.h"
#include "vfw.h"
#include "wine/debug.h"
@ -49,7 +53,7 @@ typedef struct tagWINE_HDD {
struct tagWINE_HDD* next;
} WINE_HDD;
int num_colours(LPBITMAPINFOHEADER lpbi)
static int num_colours(const BITMAPINFOHEADER *lpbi)
{
if(lpbi->biClrUsed)
return lpbi->biClrUsed;
@ -131,16 +135,10 @@ BOOL VFWAPI DrawDibEnd(HDRAWDIB hdd)
whdd->hpal = 0; /* Do not free this */
whdd->hdc = 0;
if (whdd->lpbi)
{
HeapFree(GetProcessHeap(), 0, whdd->lpbi);
whdd->lpbi = NULL;
}
if (whdd->lpbiOut)
{
HeapFree(GetProcessHeap(), 0, whdd->lpbiOut);
whdd->lpbiOut = NULL;
}
HeapFree(GetProcessHeap(), 0, whdd->lpbi);
whdd->lpbi = NULL;
HeapFree(GetProcessHeap(), 0, whdd->lpbiOut);
whdd->lpbiOut = NULL;
whdd->begun = FALSE;
@ -184,10 +182,10 @@ BOOL VFWAPI DrawDibBegin(HDRAWDIB hdd,
BOOL ret = TRUE;
WINE_HDD *whdd;
TRACE("(%p,%p,%d,%d,%p,%d,%d,0x%08lx)\n",
TRACE("(%p,%p,%d,%d,%p,%d,%d,0x%08x)\n",
hdd, hdc, dxDst, dyDst, lpbi, dxSrc, dySrc, (DWORD)wFlags);
TRACE("lpbi: %ld,%ld/%ld,%d,%d,%ld,%ld,%ld,%ld,%ld,%ld\n",
TRACE("lpbi: %d,%d/%d,%d,%d,%d,%d,%d,%d,%d,%d\n",
lpbi->biSize, lpbi->biWidth, lpbi->biHeight, lpbi->biPlanes,
lpbi->biBitCount, lpbi->biCompression, lpbi->biSizeImage,
lpbi->biXPelsPerMeter, lpbi->biYPelsPerMeter, lpbi->biClrUsed,
@ -208,7 +206,7 @@ BOOL VFWAPI DrawDibBegin(HDRAWDIB hdd,
whdd->hic = ICOpen(ICTYPE_VIDEO, lpbi->biCompression, ICMODE_DECOMPRESS);
if (!whdd->hic)
{
WARN("Could not open IC. biCompression == 0x%08lx\n", lpbi->biCompression);
WARN("Could not open IC. biCompression == 0x%08x\n", lpbi->biCompression);
ret = FALSE;
}
@ -236,8 +234,8 @@ BOOL VFWAPI DrawDibBegin(HDRAWDIB hdd,
if (ICDecompressBegin(whdd->hic, lpbi, whdd->lpbiOut) != ICERR_OK)
ret = FALSE;
TRACE("biSizeImage == %ld\n", whdd->lpbiOut->biSizeImage);
TRACE("biCompression == %ld\n", whdd->lpbiOut->biCompression);
TRACE("biSizeImage == %d\n", whdd->lpbiOut->biSizeImage);
TRACE("biCompression == %d\n", whdd->lpbiOut->biCompression);
TRACE("biBitCount == %d\n", whdd->lpbiOut->biBitCount);
}
}
@ -256,13 +254,17 @@ BOOL VFWAPI DrawDibBegin(HDRAWDIB hdd,
/*whdd->lpvbuf = HeapAlloc(GetProcessHeap(), 0, whdd->lpbiOut->biSizeImage);*/
whdd->hMemDC = CreateCompatibleDC(hdc);
TRACE("Creating: %ld, %p\n", whdd->lpbiOut->biSize, whdd->lpvbits);
TRACE("Creating: %d, %p\n", whdd->lpbiOut->biSize, whdd->lpvbits);
whdd->hDib = CreateDIBSection(whdd->hMemDC, (BITMAPINFO *)whdd->lpbiOut, DIB_RGB_COLORS, &(whdd->lpvbits), 0, 0);
if (!whdd->hDib)
if (whdd->hDib)
{
TRACE("Error: %ld\n", GetLastError());
TRACE("Created: %p,%p\n", whdd->hDib, whdd->lpvbits);
}
else
{
ret = FALSE;
TRACE("Error: %d\n", GetLastError());
}
TRACE("Created: %p,%p\n", whdd->hDib, whdd->lpvbits);
whdd->hOldDib = SelectObject(whdd->hMemDC, whdd->hDib);
}
@ -282,11 +284,8 @@ BOOL VFWAPI DrawDibBegin(HDRAWDIB hdd,
{
if (whdd->hic)
ICClose(whdd->hic);
if (whdd->lpbiOut)
{
HeapFree(GetProcessHeap(), 0, whdd->lpbiOut);
whdd->lpbiOut = NULL;
}
HeapFree(GetProcessHeap(), 0, whdd->lpbiOut);
whdd->lpbiOut = NULL;
}
return ret;
@ -305,14 +304,16 @@ BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc,
WINE_HDD *whdd;
BOOL ret = TRUE;
TRACE("(%p,%p,%d,%d,%d,%d,%p,%p,%d,%d,%d,%d,0x%08lx)\n",
TRACE("(%p,%p,%d,%d,%d,%d,%p,%p,%d,%d,%d,%d,0x%08x)\n",
hdd, hdc, xDst, yDst, dxDst, dyDst, lpbi, lpBits, xSrc, ySrc, dxSrc, dySrc, (DWORD)wFlags);
whdd = MSVIDEO_GetHddPtr(hdd);
if (!whdd) return FALSE;
if (wFlags & ~(DDF_SAME_HDC | DDF_SAME_DRAW | DDF_NOTKEYFRAME | DDF_UPDATE | DDF_DONTDRAW))
FIXME("wFlags == 0x%08lx not handled\n", (DWORD)wFlags);
TRACE("whdd=%p\n", whdd);
if (wFlags & ~(DDF_SAME_HDC | DDF_SAME_DRAW | DDF_NOTKEYFRAME | DDF_UPDATE | DDF_DONTDRAW | DDF_BACKGROUNDPAL))
FIXME("wFlags == 0x%08x not handled\n", (DWORD)wFlags);
if (!lpBits)
{
@ -341,15 +342,17 @@ BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc,
if (!(wFlags & DDF_UPDATE))
{
DWORD biSizeImage = lpbi->biSizeImage;
/* biSizeImage may be set to 0 for BI_RGB (uncompressed) bitmaps */
if ((lpbi->biCompression == BI_RGB) && (lpbi->biSizeImage == 0))
lpbi->biSizeImage = ((lpbi->biWidth * lpbi->biBitCount + 31) / 32) * 4 * lpbi->biHeight;
if ((lpbi->biCompression == BI_RGB) && (biSizeImage == 0))
biSizeImage = ((lpbi->biWidth * lpbi->biBitCount + 31) / 32) * 4 * lpbi->biHeight;
if (lpbi->biCompression)
{
DWORD flags = 0;
TRACE("Compression == 0x%08lx\n", lpbi->biCompression);
TRACE("Compression == 0x%08x\n", lpbi->biCompression);
if (wFlags & DDF_NOTKEYFRAME)
flags |= ICDECOMPRESS_NOTKEYFRAME;
@ -358,11 +361,16 @@ BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc,
}
else
{
memcpy(whdd->lpvbits, lpBits, lpbi->biSizeImage);
memcpy(whdd->lpvbits, lpBits, biSizeImage);
}
}
if (!(wFlags & DDF_DONTDRAW) && whdd->hpal)
SelectPalette(hdc, whdd->hpal, FALSE);
{
if ((wFlags & DDF_BACKGROUNDPAL) && ! (wFlags & DDF_SAME_HDC))
SelectPalette(hdc, whdd->hpal, TRUE);
else
SelectPalette(hdc, whdd->hpal, FALSE);
}
if (!(StretchBlt(whdd->hdc, xDst, yDst, dxDst, dyDst, whdd->hMemDC, xSrc, ySrc, dxSrc, dySrc, SRCCOPY)))
ret = FALSE;
@ -374,7 +382,7 @@ BOOL VFWAPI DrawDibDraw(HDRAWDIB hdd, HDC hdc,
* DrawDibStart [MSVFW32.@]
*/
BOOL VFWAPI DrawDibStart(HDRAWDIB hdd, DWORD rate) {
FIXME("(%p, %ld), stub\n", hdd, rate);
FIXME("(%p, %d), stub\n", hdd, rate);
return TRUE;
}
@ -386,6 +394,15 @@ BOOL VFWAPI DrawDibStop(HDRAWDIB hdd) {
return TRUE;
}
/***********************************************************************
* DrawDibChangePalette [MSVFW32.@]
*/
BOOL VFWAPI DrawDibChangePalette(HDRAWDIB hdd, int iStart, int iLen, LPPALETTEENTRY lppe)
{
FIXME("(%p, 0x%08x, 0x%08x, %p), stub\n", hdd, iStart, iLen, lppe);
return TRUE;
}
/***********************************************************************
* DrawDibSetPalette [MSVFW32.@]
*/
@ -409,6 +426,15 @@ BOOL VFWAPI DrawDibSetPalette(HDRAWDIB hdd, HPALETTE hpal)
return TRUE;
}
/***********************************************************************
* DrawDibGetBuffer [MSVFW32.@]
*/
LPVOID VFWAPI DrawDibGetBuffer(HDRAWDIB hdd, LPBITMAPINFOHEADER lpbi, DWORD dwSize, DWORD dwFlags)
{
FIXME("(%p, %p, 0x%08x, 0x%08x), stub\n", hdd, lpbi, dwSize, dwFlags);
return NULL;
}
/***********************************************************************
* DrawDibGetPalette [MSVFW32.@]
*/
@ -455,6 +481,18 @@ UINT VFWAPI DrawDibRealize(HDRAWDIB hdd, HDC hdc, BOOL fBackground)
return ret;
}
/***********************************************************************
* DrawDibTime [MSVFW32.@]
*/
BOOL VFWAPI DrawDibTime(HDRAWDIB hdd, LPDRAWDIBTIME lpddtime)
{
FIXME("(%p, %p) stub\n", hdd, lpddtime);
return FALSE;
}
/***********************************************************************
* DrawDibProfileDisplay [MSVFW32.@]
*/
DWORD VFWAPI DrawDibProfileDisplay(LPBITMAPINFOHEADER lpbi)
{
FIXME("(%p) stub\n", lpbi);

View file

@ -14,7 +14,7 @@
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
* FIXME:
* Add support for all remaining MCI_ commands and MCIWNDM_ messages.
@ -104,7 +104,7 @@ BOOL VFWAPIV MCIWndRegisterClass(void)
HWND VFWAPIV MCIWndCreateW(HWND hwndParent, HINSTANCE hInstance,
DWORD dwStyle, LPCWSTR szFile)
{
TRACE("%p %p %lx %s\n", hwndParent, hInstance, dwStyle, debugstr_w(szFile));
TRACE("%p %p %x %s\n", hwndParent, hInstance, dwStyle, debugstr_w(szFile));
MCIWndRegisterClass();
@ -244,7 +244,7 @@ static void MCIWND_UpdateState(MCIWndInfo *mwi)
strcatW(buffer, r_braceW);
}
TRACE("=> '%s'\n", debugstr_w(buffer));
TRACE("=> %s\n", debugstr_w(buffer));
SetWindowTextW(mwi->hWnd, buffer);
}
@ -429,6 +429,21 @@ static LRESULT mci_get_devcaps(MCIWndInfo *mwi, UINT cap)
return mci_devcaps.dwReturn;
}
static LRESULT MCIWND_KeyDown(MCIWndInfo *mwi, UINT key)
{
TRACE("%p, key %04x\n", mwi->hWnd, key);
switch(key)
{
case VK_ESCAPE:
SendMessageW(mwi->hWnd, MCI_STOP, 0, 0);
return 0;
default:
return 0;
}
}
static LRESULT WINAPI MCIWndProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
{
MCIWndInfo *mwi;
@ -477,6 +492,9 @@ static LRESULT WINAPI MCIWndProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lPa
case WM_COMMAND:
return MCIWND_Command(mwi, wParam, lParam);
case WM_KEYDOWN:
return MCIWND_KeyDown(mwi, wParam);
case WM_NCACTIVATE:
if (mwi->uTimer)
{
@ -735,7 +753,7 @@ end_of_mci_open:
MCIWND_notify_error(mwi);
return 0;
}
TRACE("MCIWNDM_GETLENGTH: %ld\n", mci_status.dwReturn);
TRACE("MCIWNDM_GETLENGTH: %d\n", mci_status.dwReturn);
return mci_status.dwReturn;
}
@ -752,7 +770,7 @@ end_of_mci_open:
MCIWND_notify_error(mwi);
return 0;
}
TRACE("MCIWNDM_GETSTART: %ld\n", mci_status.dwReturn);
TRACE("MCIWNDM_GETSTART: %d\n", mci_status.dwReturn);
return mci_status.dwReturn;
}
@ -1010,7 +1028,7 @@ end_of_mci_open:
return mwi->lasterror;
case MCIWNDM_RETURNSTRINGW:
strncpyW((LPWSTR)lParam, mwi->return_string, wParam);
lstrcpynW((LPWSTR)lParam, mwi->return_string, wParam);
TRACE("MCIWNDM_RETURNTRINGW %s\n", debugstr_wn((LPWSTR)lParam, wParam));
return mwi->lasterror;
@ -1048,7 +1066,7 @@ end_of_mci_open:
return 0;
case MCIWNDM_GETSTYLES:
TRACE("MCIWNDM_GETSTYLES: %08lx\n", mwi->dwStyle & 0xffff);
TRACE("MCIWNDM_GETSTYLES: %08x\n", mwi->dwStyle & 0xffff);
return mwi->dwStyle & 0xffff;
case MCIWNDM_GETDEVICEA:
@ -1095,7 +1113,7 @@ end_of_mci_open:
case MCIWNDM_GETFILENAMEW:
TRACE("MCIWNDM_GETFILENAMEW: %s\n", debugstr_w(mwi->lpName));
if (mwi->lpName)
strncpyW((LPWSTR)lParam, mwi->lpName, wParam);
lstrcpynW((LPWSTR)lParam, mwi->lpName, wParam);
return 0;
case MCIWNDM_GETTIMEFORMATA:
@ -1328,11 +1346,8 @@ end_of_mci_open:
mwi->mode = MCI_MODE_NOT_READY;
mwi->position = -1;
if (mwi->lpName)
{
HeapFree(GetProcessHeap(), 0, mwi->lpName);
mwi->lpName = NULL;
}
HeapFree(GetProcessHeap(), 0, mwi->lpName);
mwi->lpName = NULL;
MCIWND_UpdateState(mwi);
GetClientRect(hWnd, &rc);

View file

@ -1,22 +1,25 @@
<module name="msvfw32" type="win32dll" baseaddress="${BASEADDRESS_MSVFW32}" installbase="system32" installname="msvfw32.dll" allowwarnings="true">
<importlibrary definition="msvfw32.spec.def" />
<include base="msvfw32">.</include>
<include base="ReactOS">include/reactos/wine</include>
<define name="__REACTOS__" />
<define name="__WINESRC__" />
<define name="__USE_W32API" />
<define name="_WIN32_IE">0x600</define>
<define name="_WIN32_WINNT">0x501</define>
<define name="WINVER">0x501</define>
<library>wine</library>
<library>winmm</library>
<library>gdi32</library>
<library>comctl32</library>
<library>kernel32</library>
<library>advapi32</library>
<library>version</library>
<library>user32</library>
<library>gdi32</library>
<library>advapi32</library>
<library>kernel32</library>
<library>ntdll</library>
<file>drawdib.c</file>
<file>mciwnd.c</file>
<file>msvfw32.rc</file>
<file>msvideo_main.c</file>
<file>drawdib.c</file>
<file>rsrc.rc</file>
<file>msvfw32.spec</file>
</module>

View file

@ -1,5 +0,0 @@
#define REACTOS_VERSION_DLL
#define REACTOS_STR_FILE_DESCRIPTION "MSvideo support\0"
#define REACTOS_STR_INTERNAL_NAME "msvfw32\0"
#define REACTOS_STR_ORIGINAL_FILENAME "msvfw32.dll\0"
#include <reactos/version.rc>

View file

@ -4,11 +4,11 @@
2 stdcall VideoForWindowsVersion()
@ stdcall DrawDibBegin(long long long long ptr long long long)
@ stub DrawDibChangePalette
@ stdcall DrawDibChangePalette(long long long ptr)
@ stdcall DrawDibClose(long)
@ stdcall DrawDibDraw(long long long long long long ptr ptr long long long long long)
@ stdcall DrawDibEnd(long)
@ stub DrawDibGetBuffer
@ stdcall DrawDibGetBuffer(long ptr long long)
@ stdcall DrawDibGetPalette(long)
@ stdcall DrawDibOpen()
@ stdcall DrawDibProfileDisplay(ptr)
@ -16,8 +16,8 @@
@ stdcall DrawDibSetPalette(long long)
@ stdcall DrawDibStart(long long)
@ stdcall DrawDibStop(long)
@ stub DrawDibTime
@ stub GetOpenFileNamePreview
@ stdcall DrawDibTime(long ptr)
@ stdcall GetOpenFileNamePreview(ptr) GetOpenFileNamePreviewA
@ stdcall GetOpenFileNamePreviewA(ptr)
@ stdcall GetOpenFileNamePreviewW(ptr)
@ stdcall GetSaveFileNamePreviewA(ptr)
@ -40,10 +40,10 @@
@ stdcall ICOpen(long long long)
@ stdcall ICOpenFunction(long long long ptr)
@ stdcall ICRemove(long long long)
@ stdcall ICSendMessage(long long long long)
@ stub ICSeqCompressFrame
@ stub ICSeqCompressFrameEnd
@ stub ICSeqCompressFrameStart
@ stdcall ICSendMessage(long long ptr ptr)
@ stdcall ICSeqCompressFrame(ptr long ptr ptr ptr)
@ stdcall ICSeqCompressFrameEnd(ptr)
@ stdcall ICSeqCompressFrameStart(ptr ptr)
@ cdecl MCIWndCreate (long long long str) MCIWndCreateA
@ cdecl MCIWndCreateA (long long long str)
@ cdecl MCIWndCreateW (long long long wstr)

View file

@ -0,0 +1,52 @@
/*
* Copyright 2005 Dmitry Timoshkov
* Copyright 2005 Henning Gerhardt
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Video Compression"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "OK",IDOK,129,2,49,14
PUSHBUTTON "Abbrechen",IDCANCEL,129,18,49,14
LTEXT "&Komprimierer:",-1,9,6,105,8
COMBOBOX 880,9,16,111,67,CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP
PUSHBUTTON "Kon&figurieren...",882,129,36,49,14
PUSHBUTTON "&Über...",883,129,52,49,14
SCROLLBAR 884,9,44,111,9,WS_TABSTOP
LTEXT "Komprimierungsqualität:",886,9,34,80,8
CONTROL "&Key Frame aller",887,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,60,66,12
EDITTEXT 888,78,60,22,12
LTEXT "frames",889,103,62,26,10
CONTROL "&Datenrate",894,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,76,66,12
EDITTEXT 895,78,76,22,12
LTEXT "KB/sec",896,102,78,26,10
}
STRINGTABLE DISCARDABLE
{
IDS_FULLFRAMES "Vollständige Frames (Unkomprimiert)"
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2005 Dmitry Timoshkov
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT
ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Video Compression"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "OK",IDOK,129,2,49,14
PUSHBUTTON "Cancel",IDCANCEL,129,18,49,14
LTEXT "&Compressor:",-1,9,6,105,8
COMBOBOX 880,9,16,111,67,CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP
PUSHBUTTON "Con&figure...",882,129,36,49,14
PUSHBUTTON "&About...",883,129,52,49,14
SCROLLBAR 884,9,44,111,9,WS_TABSTOP
LTEXT "Compression &Quality:",886,9,34,80,8
CONTROL "&Key Frame Every",887,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,60,66,12
EDITTEXT 888,78,60,22,12
LTEXT "frames",889,103,62,26,10
CONTROL "&Data Rate",894,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,76,66,12
EDITTEXT 895,78,76,22,12
LTEXT "KB/sec",896,102,78,26,10
}
STRINGTABLE DISCARDABLE
{
IDS_FULLFRAMES "Full Frames (Uncompressed)"
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2006 Jonathan Ernst
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL
ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Compression vidéo"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "OK",IDOK,129,2,49,14
PUSHBUTTON "Annuler",IDCANCEL,129,18,49,14
LTEXT "&Compresseur :",-1,9,6,105,8
COMBOBOX 880,9,16,111,67,CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP
PUSHBUTTON "Con&figurer...",882,129,36,49,14
PUSHBUTTON "À &propos",883,129,52,49,14
SCROLLBAR 884,9,44,111,9,WS_TABSTOP
LTEXT "&Qualité de compression :",886,9,34,80,8
CONTROL "Image &clé toutes les",887,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,60,66,12
EDITTEXT 888,78,60,22,12
LTEXT "images",889,103,62,26,10
CONTROL "&Débit de données",894,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,76,66,12
EDITTEXT 895,78,76,22,12
LTEXT "Kio/sec",896,102,78,26,10
}
STRINGTABLE DISCARDABLE
{
IDS_FULLFRAMES "Images complètes (non compressées)"
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2006 Andras Kovacs
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT
ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Video tömörítés"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "OK",IDOK,129,2,49,14
PUSHBUTTON "Mégse",IDCANCEL,129,18,49,14
LTEXT "&Tömörítõ:",-1,9,6,105,8
COMBOBOX 880,9,16,111,67,CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP
PUSHBUTTON "Beállí&tás...",882,129,36,49,14
PUSHBUTTON "&About...",883,129,52,49,14
SCROLLBAR 884,9,44,111,9,WS_TABSTOP
LTEXT "Tömörítési minõsé&g:",886,9,34,80,8
CONTROL "&Kulcs képkocka minden",887,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,60,66,12
EDITTEXT 888,78,60,22,12
LTEXT "képkockánként",889,103,62,26,10
CONTROL "A&dat arány",894,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,76,66,12
EDITTEXT 895,78,76,22,12
LTEXT "KB/sec",896,102,78,26,10
}
STRINGTABLE DISCARDABLE
{
IDS_FULLFRAMES "Teljes képkockák (tömörítetlen)"
}

View file

@ -0,0 +1,52 @@
/*
* Copyright 2005 Dmitry Timoshkov
* Copyright 2005,2006 YunSong Hwang
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_KOREAN, SUBLANG_NEUTRAL
ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "비디오 압축"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "확인",IDOK,129,2,49,14
PUSHBUTTON "취소",IDCANCEL,129,18,49,14
LTEXT "압축(&C):",-1,9,6,105,8
COMBOBOX 880,9,16,111,67,CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP
PUSHBUTTON "설정(&F)...",882,129,36,49,14
PUSHBUTTON "정보(&A)...",883,129,52,49,14
SCROLLBAR 884,9,44,111,9,WS_TABSTOP
LTEXT "압축 품질(&Q):",886,9,34,80,8
CONTROL "모든 키 프레임(&K)",887,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,60,66,12
EDITTEXT 888,78,60,22,12
LTEXT "프레임",889,103,62,26,10
CONTROL "데이타 전송율(&D)",894,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,76,66,12
EDITTEXT 895,78,76,22,12
LTEXT "KB/sec",896,102,78,26,10
}
STRINGTABLE DISCARDABLE
{
IDS_FULLFRAMES "전채 프레임(비압축)"
}

View file

@ -0,0 +1,51 @@
/*
* Copyright 2005 Alexander N. Sørnes <alex@thehandofagony.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL
ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Videokomprimering"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "OK",IDOK,129,2,49,14
PUSHBUTTON "Avbryt",IDCANCEL,129,18,49,14
LTEXT "&Komprimerer:",-1,9,6,105,8
COMBOBOX 880,9,16,111,67,CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP
PUSHBUTTON "&Oppsett . . .",882,129,36,49,14
PUSHBUTTON "O&m . . .",883,129,52,49,14
SCROLLBAR 884,9,44,111,9,WS_TABSTOP
LTEXT "Komprimeringskvalite&t:",886,9,34,80,8
CONTROL "Nø&kkelbilde for hvert",887,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,60,66,12
EDITTEXT 888,78,60,22,12
LTEXT "bilde",889,103,62,26,10
CONTROL "&Datahastighet",894,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,76,66,12
EDITTEXT 895,78,76,22,12
LTEXT "KB/s",896,102,78,26,10
}
STRINGTABLE DISCARDABLE
{
IDS_FULLFRAMES "Fulle bilder (ukomprimert)"
}

View file

@ -0,0 +1,52 @@
/*
* Copyright 2005 Dmitry Timoshkov
* Copyright 2006 Mikolaj Zalewski
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 207, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Kompresja wideo"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "&OK",IDOK,146,2,52,14
PUSHBUTTON "&Anuluj",IDCANCEL,146,18,52,14
LTEXT "Typ &kompresji:",-1,9,6,128,8
COMBOBOX 880,9,16,128,67,CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP
PUSHBUTTON "Kon&figuruj...",882,146,36,52,14
PUSHBUTTON "&Informacje...",883,146,52,52,14
SCROLLBAR 884,9,44,128,9,WS_TABSTOP
LTEXT "&JakoϾ kompresji:",886,9,34,97,8
CONTROL "&Ramka kluczowa co",887,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,60,81,12
EDITTEXT 888,88,60,22,12
LTEXT "ramek",889,114,62,31,10
CONTROL "&Strumieñ",894,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,76,81,12
EDITTEXT 895,88,76,22,12
LTEXT "KB/sec",896,114,78,31,10
}
STRINGTABLE DISCARDABLE
{
IDS_FULLFRAMES "Pe³ne ramki (bez kompresji)"
}

View file

@ -0,0 +1,53 @@
/*
* Turkish Resources
*
* Copyright 2006 Fatih Aþýcý
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
ICM_CHOOSE_COMPRESSOR DIALOG DISCARDABLE 36, 24, 187, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Vidyo Sýkýþtýrma"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "Tamam",IDOK,129,2,49,14
PUSHBUTTON "Ýptal",IDCANCEL,129,18,49,14
LTEXT "&Sýkýþtýrýcý:",-1,9,6,105,8
COMBOBOX 880,9,16,111,67,CBS_DROPDOWNLIST|WS_VSCROLL|WS_TABSTOP
PUSHBUTTON "Ya&pýlandýr...",882,129,36,49,14
PUSHBUTTON "&Hakkýnda...",883,129,52,49,14
SCROLLBAR 884,9,44,111,9,WS_TABSTOP
LTEXT "Sýkýþtýrma &Kalitesi:",886,9,34,80,8
CONTROL "&Key Frame Every",887,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,60,66,12
EDITTEXT 888,78,60,22,12
LTEXT "frames",889,103,62,26,10
CONTROL "&Veri Oraný",894,"Button",BS_AUTOCHECKBOX|WS_TABSTOP,9,76,66,12
EDITTEXT 895,78,76,22,12
LTEXT "KB/sec",896,102,78,26,10
}
STRINGTABLE DISCARDABLE
{
IDS_FULLFRAMES "Tüm Çerçeveler (Sýkýþtýrýlmamýþ)"
}

View file

@ -0,0 +1,14 @@
Index: msvideo_private.h
===================================================================
--- msvideo_private.h (revision 25690)
+++ msvideo_private.h (working copy)
@@ -19,6 +19,9 @@
#ifndef __WINE_MSVIDEO_PRIVATE_H
#define __WINE_MSVIDEO_PRIVATE_H
+/* Installable Compressor Manager */
+#define ICVERSION 0x0104
+
#define ICM_CHOOSE_COMPRESSOR 1
#define IDC_COMP_LIST 880
#define IDS_FULLFRAMES 901

View file

@ -1,4 +1,6 @@
#1 pascal WEP(word)
2 pascal VideoForWindowsVersion() VideoForWindowsVersion
3 pascal DllEntryPoint(long word word word long word) VIDEO_LibMain
20 stub VIDEOGETNUMDEVS
21 stub VIDEOGETERRORTEXT
22 pascal VideoCapDriverDescAndVer(word ptr word ptr word) VideoCapDriverDescAndVer16
@ -64,5 +66,3 @@
251 stub _MCIWNDREGISTERCLASS
252 stub GETOPENFILENAMEPREVIEW
253 stub GETSAVEFILENAMEPREVIEW
300 pascal DllEntryPoint(long word word word long word) VIDEO_LibMain

View file

@ -16,18 +16,21 @@
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#define COM_NO_WINDOWS_H
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include "msvideo_private.h"
#include "windef.h"
#include "winbase.h"
#include "winver.h"
#include "winnls.h"
#include "winreg.h"
#include "winuser.h"
#include "vfw16.h"
#include "msvideo_private.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(msvideo);
@ -118,7 +121,7 @@ BOOL16 VFWAPI DrawDibStart16(HDRAWDIB16 hdd, DWORD rate)
/*************************************************************************
* DrawDibStop [MSVIDEO.119]
*/
BOOL16 DrawDibStop16(HDRAWDIB16 hdd)
BOOL16 VFWAPI DrawDibStop16(HDRAWDIB16 hdd)
{
return DrawDibStop(HDRAWDIB_32(hdd));
}
@ -151,7 +154,7 @@ LRESULT VFWAPIV ICMessage16( HIC16 hic, UINT16 msg, UINT16 cb, VA_LIST16 valist
lpData = HeapAlloc(GetProcessHeap(), 0, cb);
TRACE("0x%08lx, %u, %u, ...)\n", (DWORD) hic, msg, cb);
TRACE("0x%08x, %u, %u, ...)\n", (DWORD) hic, msg, cb);
for (i = 0; i < cb / sizeof(WORD); i++)
{
@ -172,7 +175,7 @@ LRESULT VFWAPI ICGetInfo16(HIC16 hic, ICINFO16 * picinfo, DWORD cb)
{
LRESULT ret;
TRACE("(0x%08lx,%p,%ld)\n", (DWORD) hic, picinfo, cb);
TRACE("(0x%08x,%p,%d)\n", (DWORD) hic, picinfo, cb);
ret = ICSendMessage16(hic, ICM_GETINFO, (DWORD) picinfo, cb);
TRACE(" -> 0x%08lx\n", ret);
return ret;
@ -203,7 +206,7 @@ DWORD VFWAPIV ICCompress16(HIC16 hic, DWORD dwFlags,
ICCOMPRESS iccmp;
SEGPTR seg_iccmp;
TRACE("(0x%08lx,%ld,%p,%p,%p,%p,...)\n", (DWORD) hic, dwFlags,
TRACE("(0x%08x,%d,%p,%p,%p,%p,...)\n", (DWORD) hic, dwFlags,
lpbiOutput, lpData, lpbiInput, lpBits);
iccmp.dwFlags = dwFlags;
@ -237,7 +240,7 @@ DWORD VFWAPIV ICDecompress16(HIC16 hic, DWORD dwFlags,
SEGPTR segptr;
DWORD ret;
TRACE("(0x%08lx,%ld,%p,%p,%p,%p)\n", (DWORD) hic, dwFlags, lpbiFormat,
TRACE("(0x%08x,%d,%p,%p,%p,%p)\n", (DWORD) hic, dwFlags, lpbiFormat,
lpData, lpbi, lpBits);
icd.dwFlags = dwFlags;
@ -276,7 +279,7 @@ DWORD VFWAPIV ICDrawBegin16(HIC16 hic, /* [in] */
ICDRAWBEGIN16 icdb;
SEGPTR seg_icdb;
TRACE ("(0x%08lx,%ld,0x%08lx,0x%08lx,0x%08lx,%u,%u,%u,%u,%p,%u,%u,%u,%u,%ld,%ld)\n",
TRACE ("(0x%08x,%d,0x%08x,0x%08x,0x%08x,%u,%u,%u,%u,%p,%u,%u,%u,%u,%d,%d)\n",
(DWORD) hic, dwFlags, (DWORD) hpal, (DWORD) hwnd, (DWORD) hdc,
xDst, yDst, dxDst, dyDst, lpbi, xSrc, ySrc, dxSrc, dySrc, dwRate,
dwScale);
@ -315,7 +318,7 @@ DWORD VFWAPIV ICDraw16(HIC16 hic, DWORD dwFlags,
ICDRAW icd;
SEGPTR seg_icd;
TRACE("(0x%08lx,0x%08lx,%p,%p,%ld,%ld)\n", (DWORD) hic, dwFlags,
TRACE("(0x%08x,0x%08x,%p,%p,%d,%d)\n", (DWORD) hic, dwFlags,
lpFormat, lpData, cbData, lTime);
icd.dwFlags = dwFlags;
icd.lpFormat = lpFormat;
@ -670,12 +673,12 @@ BOOL16 VFWAPI ICInfo16(DWORD fccType, DWORD fccHandler, ICINFO16 *lpicinfo)
static LRESULT CALLBACK IC_Callback3216(HIC hic, HDRVR hdrv, UINT msg, DWORD lp1, DWORD lp2)
{
WINE_HIC* whic;
LRESULT ret = 0;
WORD args[8];
whic = MSVIDEO_GetHicPtr(hic);
if (whic)
{
DWORD ret = 0;
switch (msg)
{
case DRV_OPEN:
@ -698,9 +701,9 @@ static LRESULT CALLBACK IC_Callback3216(HIC hic, HDRVR hdrv, UINT msg, DWORD l
UnMapLS(lp2);
break;
}
return ret;
}
else ret = ICERR_BADHANDLE;
return ret;
else return ICERR_BADHANDLE;
}
/***********************************************************************
@ -730,6 +733,7 @@ LRESULT VFWAPI ICSendMessage16(HIC16 hic, UINT16 msg, DWORD lParam1, DWORD lPara
if (whic->driverproc16)
{
WORD args[8];
DWORD result;
/* FIXME: original code was passing hdrv first and hic second */
/* but this doesn't match what IC_Callback3216 does */
@ -741,7 +745,8 @@ LRESULT VFWAPI ICSendMessage16(HIC16 hic, UINT16 msg, DWORD lParam1, DWORD lPara
args[2] = LOWORD(lParam1);
args[1] = HIWORD(lParam2);
args[0] = LOWORD(lParam2);
WOWCallback16Ex( (DWORD)whic->driverproc16, WCB16_PASCAL, sizeof(args), args, &ret );
WOWCallback16Ex( (DWORD)whic->driverproc16, WCB16_PASCAL, sizeof(args), args, &result );
ret = result;
}
else
{
@ -762,6 +767,7 @@ LRESULT VFWAPI ICSendMessage16(HIC16 hic, UINT16 msg, DWORD lParam1, DWORD lPara
DWORD WINAPI VideoCapDriverDescAndVer16(WORD nr, LPSTR buf1, WORD buf1len,
LPSTR buf2, WORD buf2len)
{
static const char version_info_spec[] = "\\StringFileInfo\\040904E4\\FileDescription";
DWORD verhandle;
DWORD infosize;
UINT subblocklen;
@ -787,7 +793,7 @@ DWORD WINAPI VideoCapDriverDescAndVer16(WORD nr, LPSTR buf1, WORD buf1len,
if (strncasecmp(buf, "vid", 3)) continue;
if (nr--) continue;
fnLen = sizeof(fn);
lRet = RegQueryValueExA(hKey, buf, 0, 0, fn, &fnLen);
lRet = RegQueryValueExA(hKey, buf, 0, 0, (LPBYTE)fn, &fnLen);
if (lRet == ERROR_SUCCESS) found = TRUE;
break;
}
@ -821,37 +827,37 @@ DWORD WINAPI VideoCapDriverDescAndVer16(WORD nr, LPSTR buf1, WORD buf1len,
infobuf = HeapAlloc(GetProcessHeap(), 0, infosize);
if (GetFileVersionInfoA(fn, verhandle, infosize, infobuf))
{
char vbuf[200];
/* Yes, two space behind : */
/* FIXME: test for buflen */
sprintf(vbuf, "Version: %d.%d.%d.%d\n",
snprintf(buf2, buf2len, "Version: %d.%d.%d.%d\n",
((WORD*)infobuf)[0x0f],
((WORD*)infobuf)[0x0e],
((WORD*)infobuf)[0x11],
((WORD*)infobuf)[0x10]
);
TRACE("version of %s is %s\n", fn, vbuf);
strncpy(buf2, vbuf, buf2len);
TRACE("version of %s is %s\n", fn, buf2);
}
else
{
TRACE("GetFileVersionInfoA failed for %s.\n", fn);
strncpy(buf2, fn, buf2len); /* msvideo.dll appears to copy fn*/
lstrcpynA(buf2, fn, buf2len); /* msvideo.dll appears to copy fn*/
}
/* FIXME: language problem? */
if (VerQueryValueA( infobuf,
"\\StringFileInfo\\040904E4\\FileDescription",
version_info_spec,
&subblock,
&subblocklen
))
{
UINT copylen = min(subblocklen,buf1len-1);
memcpy(buf1, subblock, copylen);
buf1[copylen] = '\0';
TRACE("VQA returned %s\n", (LPCSTR)subblock);
strncpy(buf1, subblock, buf1len);
}
else
{
TRACE("VQA did not return on query \\StringFileInfo\\040904E4\\FileDescription?\n");
strncpy(buf1, fn, buf1len); /* msvideo.dll appears to copy fn*/
lstrcpynA(buf1, fn, buf1len); /* msvideo.dll appears to copy fn*/
}
HeapFree(GetProcessHeap(), 0, infobuf);
return 0;
@ -884,7 +890,7 @@ static LRESULT CALLBACK IC_CallTo16(HDRVR hdrv, HIC hic, UINT msg, LPARAM lp1,
}
/**************************************************************************
* DllEntryPoint (MSVIDEO.300)
* DllEntryPoint (MSVIDEO.3)
*
* MSVIDEO DLL entry point
*

View file

@ -2,6 +2,7 @@
* Copyright 1998 Marcus Meissner
* Copyright 2000 Bradley Baetz
* Copyright 2003 Michael Günnewig
* Copyright 2005 Dmitry Timoshkov
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -15,7 +16,7 @@
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
* FIXME: This all assumes 32 bit codecs
* Win95 appears to prefer 32 bit codecs, even from 16 bit code.
@ -25,17 +26,19 @@
* - no thread safety
*/
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include "msvideo_private.h"
#include "windef.h"
#include "winbase.h"
#include "winreg.h"
#include "winnls.h"
#include "wingdi.h"
#include "winuser.h"
#include "winreg.h"
#include "windowsx.h"
#include "commdlg.h"
#include "vfw.h"
#include "msvideo_private.h"
#include "wine/debug.h"
/* Drivers32 settings */
@ -78,7 +81,7 @@ HMODULE MSVFW32_hModule;
BOOL WINAPI DllMain( HINSTANCE hinst, DWORD reason, LPVOID reserved )
{
TRACE("%p,%lx,%p\n", hinst, reason, reserved);
TRACE("%p,%x,%p\n", hinst, reason, reserved);
switch(reason)
{
@ -116,14 +119,15 @@ static BOOL enum_drivers(DWORD fccType, enum_handler_t handler, void* param)
lRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE, HKLM_DRIVERS32, 0, KEY_QUERY_VALUE, &hKey);
if (lRet == ERROR_SUCCESS)
{
RegQueryInfoKeyA( hKey, 0, 0, 0, &cnt, 0, 0, 0, 0, 0, 0, 0);
for (i = 0; i < cnt; i++)
DWORD numkeys;
RegQueryInfoKeyA( hKey, 0, 0, 0, &numkeys, 0, 0, 0, 0, 0, 0, 0);
for (i = 0; i < numkeys; i++)
{
bufLen = sizeof(buf) / sizeof(buf[0]);
lRet = RegEnumKeyExA(hKey, i, buf, &bufLen, 0, 0, 0, &lastWrite);
if (lRet != ERROR_SUCCESS) continue;
if (strncasecmp(buf, fccTypeStr, 5) || buf[9] != '=') continue;
if ((result = handler(buf, i, param))) break;
if ((result = handler(buf, cnt++, param))) break;
}
RegCloseKey( hKey );
}
@ -132,10 +136,11 @@ static BOOL enum_drivers(DWORD fccType, enum_handler_t handler, void* param)
/* if that didn't work, go through the values in system.ini */
if (GetPrivateProfileSectionA("drivers32", buf, sizeof(buf), "system.ini"))
{
for (s = buf; *s; cnt++, s += strlen(s) + 1)
for (s = buf; *s; s += strlen(s) + 1)
{
TRACE("got %s\n", s);
if (strncasecmp(s, fccTypeStr, 5) || s[9] != '=') continue;
if ((result = handler(s, cnt, param))) break;
if ((result = handler(s, cnt++, param))) break;
}
}
@ -175,11 +180,10 @@ static BOOL ICInfo_enum_handler(const char *drv, int nr, void *param)
if ((lpicinfo->fccHandler != nr) && (lpicinfo->fccHandler != fccHandler))
return FALSE;
lpicinfo->fccType = mmioStringToFOURCCA(drv, 0);
lpicinfo->fccHandler = fccHandler;
lpicinfo->dwFlags = 0;
lpicinfo->dwVersion = 0;
lpicinfo->dwVersionICM = 0x104;
lpicinfo->dwVersionICM = ICVERSION;
lpicinfo->szName[0] = 0;
lpicinfo->szDescription[0] = 0;
MultiByteToWideChar(CP_ACP, 0, drv + 10, -1, lpicinfo->szDriver,
@ -200,9 +204,10 @@ static BOOL ICInfo_enum_handler(const char *drv, int nr, void *param)
*/
BOOL VFWAPI ICInfo( DWORD fccType, DWORD fccHandler, ICINFO *lpicinfo)
{
TRACE("(%s,%s/%08lx,%p)\n",
TRACE("(%s,%s/%08x,%p)\n",
wine_dbgstr_fcc(fccType), wine_dbgstr_fcc(fccHandler), fccHandler, lpicinfo);
lpicinfo->fccType = fccType;
lpicinfo->fccHandler = fccHandler;
return enum_drivers(fccType, ICInfo_enum_handler, lpicinfo);
}
@ -258,8 +263,8 @@ BOOL VFWAPI ICInstall(DWORD fccType, DWORD fccHandler, LPARAM lParam, LPSTR szDe
reg_driver_list = driver;
return TRUE;
oom:
if (driver) HeapFree(GetProcessHeap(), 0, driver);
oom:
HeapFree(GetProcessHeap(), 0, driver);
return FALSE;
}
@ -269,7 +274,8 @@ BOOL VFWAPI ICInstall(DWORD fccType, DWORD fccHandler, LPARAM lParam, LPSTR szDe
BOOL VFWAPI ICRemove(DWORD fccType, DWORD fccHandler, UINT wFlags)
{
reg_driver** pdriver;
reg_driver* drv;
TRACE("(%s,%s,0x%08x)\n", wine_dbgstr_fcc(fccType), wine_dbgstr_fcc(fccHandler), wFlags);
/* Check if a driver is already registered */
@ -283,10 +289,10 @@ BOOL VFWAPI ICRemove(DWORD fccType, DWORD fccHandler, UINT wFlags)
return FALSE;
/* Remove the driver from the list */
drv = *pdriver;
*pdriver = (*pdriver)->next;
if ((*pdriver)->name)
HeapFree(GetProcessHeap(), 0, (*pdriver)->name);
HeapFree(GetProcessHeap(), 0, *pdriver);
HeapFree(GetProcessHeap(), 0, drv->name);
HeapFree(GetProcessHeap(), 0, drv);
return TRUE;
}
@ -343,20 +349,7 @@ HIC VFWAPI ICOpen(DWORD fccType, DWORD fccHandler, UINT wMode)
hdrv = OpenDriver(codecname, drv32W, (LPARAM)&icopen);
if (!hdrv)
{
if (fccType == streamtypeVIDEO)
{
codecname[0] = 'v';
codecname[1] = 'i';
codecname[2] = 'd';
codecname[3] = 'c';
fccType = ICTYPE_VIDEO;
hdrv = OpenDriver(codecname, drv32W, (LPARAM)&icopen);
}
if (!hdrv)
return 0;
}
return 0;
} else {
/* The driver has been registered at runtime with its name */
hdrv = OpenDriver(driver->name, NULL, (LPARAM)&icopen);
@ -400,13 +393,13 @@ HIC MSVIDEO_OpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode,
ICOPEN icopen;
WINE_HIC* whic;
TRACE("(%s,%s,%d,%p,%08lx)\n",
TRACE("(%s,%s,%d,%p,%08x)\n",
wine_dbgstr_fcc(fccType), wine_dbgstr_fcc(fccHandler), wMode, lpfnHandler, lpfnHandler16);
icopen.dwSize = sizeof(ICOPEN);
icopen.fccType = fccType;
icopen.fccHandler = fccHandler;
icopen.dwVersion = 0x00001000; /* FIXME */
icopen.dwVersion = ICVERSION;
icopen.dwFlags = wMode;
icopen.dwError = 0;
icopen.pV1Reserved = NULL;
@ -436,9 +429,9 @@ HIC MSVIDEO_OpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode,
/* return value is not checked */
MSVIDEO_SendMessage(whic, DRV_ENABLE, 0L, 0L);
whic->driverId = (DWORD)MSVIDEO_SendMessage(whic, DRV_OPEN, 0, (DWORD)&icopen);
whic->driverId = (DWORD)MSVIDEO_SendMessage(whic, DRV_OPEN, 0, (DWORD_PTR)&icopen);
/* FIXME: What should we put here? */
whic->hdrv = (HDRVR)0;
whic->hdrv = NULL;
if (whic->driverId == 0)
{
@ -468,7 +461,7 @@ LRESULT VFWAPI ICGetInfo(HIC hic, ICINFO *picinfo, DWORD cb)
LRESULT ret;
WINE_HIC* whic = MSVIDEO_GetHicPtr(hic);
TRACE("(%p,%p,%ld)\n", hic, picinfo, cb);
TRACE("(%p,%p,%d)\n", hic, picinfo, cb);
whic = MSVIDEO_GetHicPtr(hic);
if (!whic) return ICERR_BADHANDLE;
@ -477,11 +470,11 @@ LRESULT VFWAPI ICGetInfo(HIC hic, ICINFO *picinfo, DWORD cb)
/* (WS) The field szDriver should be initialized because the driver
* is not obliged and often will not do it. Some applications, like
* VirtualDub, rely on this field and will occasionally crash if it
* goes unitialized.
* goes uninitialized.
*/
if (cb >= sizeof(ICINFO)) picinfo->szDriver[0] = '\0';
ret = ICSendMessage(hic, ICM_GETINFO, (DWORD)picinfo, cb);
ret = ICSendMessage(hic, ICM_GETINFO, (DWORD_PTR)picinfo, cb);
/* (WS) When szDriver was not supplied by the driver itself, apparently
* Windows will set its value equal to the driver file name. This can
@ -517,7 +510,7 @@ static HIC try_driver(driver_info_t *info)
if ((hic = ICOpen(info->fccType, info->fccHandler, info->wMode)))
{
if (!ICSendMessage(hic, info->querymsg, (DWORD)info->lpbiIn, (DWORD)info->lpbiOut))
if (!ICSendMessage(hic, info->querymsg, (DWORD_PTR)info->lpbiIn, (DWORD_PTR)info->lpbiOut))
return hic;
ICClose(hic);
}
@ -610,14 +603,14 @@ HIC VFWAPI ICGetDisplayFormat(
if (ICDecompressQuery(tmphic,lpbiIn,NULL) != 0)
goto errout; /* no, sorry */
ICDecompressGetFormat(tmphic,lpbiIn,lpbiOut);
ICSendMessage(tmphic, ICM_DECOMPRESS_GET_FORMAT, (DWORD_PTR)lpbiIn, (DWORD_PTR)lpbiOut);
if (lpbiOut->biCompression != 0) {
FIXME("Ooch, how come decompressor outputs compressed data (%ld)??\n",
FIXME("Ooch, how come decompressor outputs compressed data (%d)??\n",
lpbiOut->biCompression);
}
if (lpbiOut->biSize < sizeof(*lpbiOut)) {
FIXME("Ooch, size of output BIH is too small (%ld)\n",
FIXME("Ooch, size of output BIH is too small (%d)\n",
lpbiOut->biSize);
lpbiOut->biSize = sizeof(*lpbiOut);
}
@ -655,7 +648,7 @@ ICCompress(
{
ICCOMPRESS iccmp;
TRACE("(%p,%ld,%p,%p,%p,%p,...)\n",hic,dwFlags,lpbiOutput,lpData,lpbiInput,lpBits);
TRACE("(%p,%d,%p,%p,%p,%p,...)\n",hic,dwFlags,lpbiOutput,lpData,lpbiInput,lpBits);
iccmp.dwFlags = dwFlags;
@ -671,7 +664,7 @@ ICCompress(
iccmp.dwQuality = dwQuality;
iccmp.lpbiPrev = lpbiPrev;
iccmp.lpPrev = lpPrev;
return ICSendMessage(hic,ICM_COMPRESS,(DWORD)&iccmp,sizeof(iccmp));
return ICSendMessage(hic,ICM_COMPRESS,(DWORD_PTR)&iccmp,sizeof(iccmp));
}
/***********************************************************************
@ -683,9 +676,9 @@ DWORD VFWAPIV ICDecompress(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiFormat,
ICDECOMPRESS icd;
DWORD ret;
TRACE("(%p,%ld,%p,%p,%p,%p)\n",hic,dwFlags,lpbiFormat,lpData,lpbi,lpBits);
TRACE("(%p,%d,%p,%p,%p,%p)\n",hic,dwFlags,lpbiFormat,lpData,lpbi,lpBits);
TRACE("lpBits[0] == %lx\n",((LPDWORD)lpBits)[0]);
TRACE("lpBits[0] == %x\n",((LPDWORD)lpBits)[0]);
icd.dwFlags = dwFlags;
icd.lpbiInput = lpbiFormat;
@ -694,45 +687,307 @@ DWORD VFWAPIV ICDecompress(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiFormat,
icd.lpbiOutput = lpbi;
icd.lpOutput = lpBits;
icd.ckid = 0;
ret = ICSendMessage(hic,ICM_DECOMPRESS,(DWORD)&icd,sizeof(ICDECOMPRESS));
ret = ICSendMessage(hic,ICM_DECOMPRESS,(DWORD_PTR)&icd,sizeof(ICDECOMPRESS));
TRACE("lpBits[0] == %lx\n",((LPDWORD)lpBits)[0]);
TRACE("lpBits[0] == %x\n",((LPDWORD)lpBits)[0]);
TRACE("-> %ld\n",ret);
TRACE("-> %d\n",ret);
return ret;
}
struct choose_compressor
{
UINT flags;
LPCSTR title;
COMPVARS cv;
};
struct codec_info
{
HIC hic;
ICINFO icinfo;
};
static BOOL enum_compressors(HWND list, COMPVARS *pcv, BOOL enum_all)
{
UINT id, total = 0;
ICINFO icinfo;
id = 0;
while (ICInfo(pcv->fccType, id, &icinfo))
{
struct codec_info *ic;
DWORD idx;
HIC hic;
id++;
hic = ICOpen(icinfo.fccType, icinfo.fccHandler, ICMODE_COMPRESS);
if (hic)
{
/* for unknown reason fccHandler reported by the driver
* doesn't always work, use the one returned by ICInfo instead.
*/
DWORD fccHandler = icinfo.fccHandler;
if (!enum_all && pcv->lpbiIn)
{
if (ICCompressQuery(hic, pcv->lpbiIn, NULL) != ICERR_OK)
{
TRACE("fccHandler %s doesn't support input DIB format %d\n",
wine_dbgstr_fcc(icinfo.fccHandler), pcv->lpbiIn->bmiHeader.biCompression);
ICClose(hic);
continue;
}
}
ICGetInfo(hic, &icinfo, sizeof(icinfo));
icinfo.fccHandler = fccHandler;
idx = SendMessageW(list, CB_ADDSTRING, 0, (LPARAM)icinfo.szDescription);
ic = HeapAlloc(GetProcessHeap(), 0, sizeof(struct codec_info));
memcpy(&ic->icinfo, &icinfo, sizeof(ICINFO));
ic->hic = hic;
SendMessageW(list, CB_SETITEMDATA, idx, (LPARAM)ic);
}
total++;
}
return total != 0;
}
static INT_PTR CALLBACK icm_choose_compressor_dlgproc(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam)
{
switch (msg)
{
case WM_INITDIALOG:
{
struct codec_info *ic;
WCHAR buf[128];
struct choose_compressor *choose_comp = (struct choose_compressor *)lparam;
SetWindowLongPtrW(hdlg, DWLP_USER, lparam);
/* FIXME */
choose_comp->flags &= ~(ICMF_CHOOSE_DATARATE | ICMF_CHOOSE_KEYFRAME);
if (choose_comp->title)
SetWindowTextA(hdlg, choose_comp->title);
if (!(choose_comp->flags & ICMF_CHOOSE_DATARATE))
{
ShowWindow(GetDlgItem(hdlg, IDC_DATARATE_CHECKBOX), SW_HIDE);
ShowWindow(GetDlgItem(hdlg, IDC_DATARATE), SW_HIDE);
ShowWindow(GetDlgItem(hdlg, IDC_DATARATE_KB), SW_HIDE);
}
if (!(choose_comp->flags & ICMF_CHOOSE_KEYFRAME))
{
ShowWindow(GetDlgItem(hdlg, IDC_KEYFRAME_CHECKBOX), SW_HIDE);
ShowWindow(GetDlgItem(hdlg, IDC_KEYFRAME), SW_HIDE);
ShowWindow(GetDlgItem(hdlg, IDC_KEYFRAME_FRAMES), SW_HIDE);
}
/* FIXME */
EnableWindow(GetDlgItem(hdlg, IDC_QUALITY_SCROLL), FALSE);
EnableWindow(GetDlgItem(hdlg, IDC_QUALITY_TXT), FALSE);
/*if (!(choose_comp->flags & ICMF_CHOOSE_PREVIEW))
ShowWindow(GetDlgItem(hdlg, IDC_PREVIEW), SW_HIDE);*/
LoadStringW(MSVFW32_hModule, IDS_FULLFRAMES, buf, 128);
SendDlgItemMessageW(hdlg, IDC_COMP_LIST, CB_ADDSTRING, 0, (LPARAM)buf);
ic = HeapAlloc(GetProcessHeap(), 0, sizeof(struct codec_info));
ic->icinfo.fccType = streamtypeVIDEO;
ic->icinfo.fccHandler = comptypeDIB;
ic->hic = 0;
SendDlgItemMessageW(hdlg, IDC_COMP_LIST, CB_SETITEMDATA, 0, (LPARAM)ic);
enum_compressors(GetDlgItem(hdlg, IDC_COMP_LIST), &choose_comp->cv, choose_comp->flags & ICMF_CHOOSE_ALLCOMPRESSORS);
SendDlgItemMessageW(hdlg, IDC_COMP_LIST, CB_SETCURSEL, 0, 0);
SetFocus(GetDlgItem(hdlg, IDC_COMP_LIST));
SetWindowLongPtrW(hdlg, DWLP_USER, (ULONG_PTR)choose_comp);
break;
}
case WM_COMMAND:
switch (LOWORD(wparam))
{
case IDC_COMP_LIST:
{
INT cur_sel;
struct codec_info *ic;
BOOL can_configure = FALSE, can_about = FALSE;
struct choose_compressor *choose_comp;
if (HIWORD(wparam) != CBN_SELCHANGE && HIWORD(wparam) != CBN_SETFOCUS)
break;
choose_comp = (struct choose_compressor *)GetWindowLongPtrW(hdlg, DWLP_USER);
cur_sel = SendMessageW((HWND)lparam, CB_GETCURSEL, 0, 0);
ic = (struct codec_info *)SendMessageW((HWND)lparam, CB_GETITEMDATA, cur_sel, 0);
if (ic && ic->hic)
{
if (ICQueryConfigure(ic->hic) == DRVCNF_OK)
can_configure = TRUE;
if (ICQueryAbout(ic->hic) == DRVCNF_OK)
can_about = TRUE;
}
EnableWindow(GetDlgItem(hdlg, IDC_CONFIGURE), can_configure);
EnableWindow(GetDlgItem(hdlg, IDC_ABOUT), can_about);
if (choose_comp->flags & ICMF_CHOOSE_DATARATE)
{
/* FIXME */
}
if (choose_comp->flags & ICMF_CHOOSE_KEYFRAME)
{
/* FIXME */
}
break;
}
case IDC_CONFIGURE:
case IDC_ABOUT:
{
HWND list = GetDlgItem(hdlg, IDC_COMP_LIST);
INT cur_sel;
struct codec_info *ic;
if (HIWORD(wparam) != BN_CLICKED)
break;
cur_sel = SendMessageW(list, CB_GETCURSEL, 0, 0);
ic = (struct codec_info *)SendMessageW(list, CB_GETITEMDATA, cur_sel, 0);
if (ic && ic->hic)
{
if (LOWORD(wparam) == IDC_CONFIGURE)
ICConfigure(ic->hic, hdlg);
else
ICAbout(ic->hic, hdlg);
}
break;
}
case IDOK:
{
HWND list = GetDlgItem(hdlg, IDC_COMP_LIST);
INT cur_sel;
struct codec_info *ic;
if (HIWORD(wparam) != BN_CLICKED)
break;
cur_sel = SendMessageW(list, CB_GETCURSEL, 0, 0);
ic = (struct codec_info *)SendMessageW(list, CB_GETITEMDATA, cur_sel, 0);
if (ic)
{
struct choose_compressor *choose_comp = (struct choose_compressor *)GetWindowLongPtrW(hdlg, DWLP_USER);
choose_comp->cv.hic = ic->hic;
choose_comp->cv.fccType = ic->icinfo.fccType;
choose_comp->cv.fccHandler = ic->icinfo.fccHandler;
/* FIXME: fill everything else */
/* prevent closing the codec handle below */
ic->hic = 0;
}
}
/* fall through */
case IDCANCEL:
{
HWND list = GetDlgItem(hdlg, IDC_COMP_LIST);
INT idx = 0;
if (HIWORD(wparam) != BN_CLICKED)
break;
while (1)
{
struct codec_info *ic;
ic = (struct codec_info *)SendMessageW(list, CB_GETITEMDATA, idx++, 0);
if (!ic || (LONG_PTR)ic == CB_ERR) break;
if (ic->hic) ICClose(ic->hic);
HeapFree(GetProcessHeap(), 0, ic);
}
EndDialog(hdlg, LOWORD(wparam) == IDOK);
break;
}
default:
break;
}
break;
default:
break;
}
return FALSE;
}
/***********************************************************************
* ICCompressorChoose [MSVFW32.@]
*/
BOOL VFWAPI ICCompressorChoose(HWND hwnd, UINT uiFlags, LPVOID pvIn,
LPVOID lpData, PCOMPVARS pc, LPSTR lpszTitle)
{
FIXME("(%p,0x%X,%p,%p,%p,%s),stub!\n",hwnd,uiFlags,pvIn,lpData,pc,lpszTitle);
struct choose_compressor choose_comp;
BOOL ret;
if (pc == NULL || pc->cbSize != sizeof(COMPVARS))
return FALSE;
TRACE("(%p,%08x,%p,%p,%p,%s)\n", hwnd, uiFlags, pvIn, lpData, pc, lpszTitle);
if ((pc->dwFlags & ICMF_COMPVARS_VALID) == 0) {
pc->dwFlags = 0;
pc->fccType = pc->fccHandler = 0;
pc->hic = NULL;
pc->lpbiOut = NULL;
pc->lpBitsOut = pc->lpBitsPrev = pc->lpState = NULL;
pc->lQ = ICQUALITY_DEFAULT;
pc->lKey = -1;
pc->lDataRate = 300; /* kB */
pc->lpState = NULL;
pc->cbState = 0;
}
if (pc->fccType == 0)
pc->fccType = ICTYPE_VIDEO;
if (!pc || pc->cbSize != sizeof(COMPVARS))
return FALSE;
/* FIXME */
return FALSE;
if (!(pc->dwFlags & ICMF_COMPVARS_VALID))
{
pc->dwFlags = 0;
pc->fccType = pc->fccHandler = 0;
pc->hic = NULL;
pc->lpbiIn = NULL;
pc->lpbiOut = NULL;
pc->lpBitsOut = pc->lpBitsPrev = pc->lpState = NULL;
pc->lQ = ICQUALITY_DEFAULT;
pc->lKey = -1;
pc->lDataRate = 300; /* kB */
pc->lpState = NULL;
pc->cbState = 0;
}
if (pc->fccType == 0)
pc->fccType = ICTYPE_VIDEO;
choose_comp.cv = *pc;
choose_comp.flags = uiFlags;
choose_comp.title = lpszTitle;
ret = DialogBoxParamW(MSVFW32_hModule, MAKEINTRESOURCEW(ICM_CHOOSE_COMPRESSOR), hwnd,
icm_choose_compressor_dlgproc, (LPARAM)&choose_comp);
if (ret)
{
*pc = choose_comp.cv;
pc->dwFlags |= ICMF_COMPVARS_VALID;
}
return ret;
}
@ -748,22 +1003,14 @@ void VFWAPI ICCompressorFree(PCOMPVARS pc)
ICClose(pc->hic);
pc->hic = NULL;
}
if (pc->lpbiOut != NULL) {
GlobalFreePtr(pc->lpbiOut);
pc->lpbiOut = NULL;
}
if (pc->lpBitsOut != NULL) {
GlobalFreePtr(pc->lpBitsOut);
pc->lpBitsOut = NULL;
}
if (pc->lpBitsPrev != NULL) {
GlobalFreePtr(pc->lpBitsPrev);
pc->lpBitsPrev = NULL;
}
if (pc->lpState != NULL) {
GlobalFreePtr(pc->lpBitsPrev);
pc->lpState = NULL;
}
HeapFree(GetProcessHeap(), 0, pc->lpbiIn);
pc->lpbiIn = NULL;
HeapFree(GetProcessHeap(), 0, pc->lpBitsOut);
pc->lpBitsOut = NULL;
HeapFree(GetProcessHeap(), 0, pc->lpBitsPrev);
pc->lpBitsPrev = NULL;
HeapFree(GetProcessHeap(), 0, pc->lpState);
pc->lpState = NULL;
pc->dwFlags = 0;
}
}
@ -774,7 +1021,7 @@ void VFWAPI ICCompressorFree(PCOMPVARS pc)
*
*
*/
LRESULT MSVIDEO_SendMessage(WINE_HIC* whic, UINT msg, DWORD lParam1, DWORD lParam2)
LRESULT MSVIDEO_SendMessage(WINE_HIC* whic, UINT msg, DWORD_PTR lParam1, DWORD_PTR lParam2)
{
LRESULT ret;
@ -839,7 +1086,7 @@ LRESULT MSVIDEO_SendMessage(WINE_HIC* whic, UINT msg, DWORD lParam1, DWORD lPara
XX(ICM_DECOMPRESSEX_END);
XX(ICM_SET_STATUS_PROC);
default:
FIXME("(%p,0x%08lx,0x%08lx,0x%08lx) unknown message\n",whic,(DWORD)msg,lParam1,lParam2);
FIXME("(%p,0x%08x,0x%08lx,0x%08lx) unknown message\n",whic,(DWORD)msg,lParam1,lParam2);
}
#undef XX
@ -858,7 +1105,7 @@ LRESULT MSVIDEO_SendMessage(WINE_HIC* whic, UINT msg, DWORD lParam1, DWORD lPara
/***********************************************************************
* ICSendMessage [MSVFW32.@]
*/
LRESULT VFWAPI ICSendMessage(HIC hic, UINT msg, DWORD lParam1, DWORD lParam2)
LRESULT VFWAPI ICSendMessage(HIC hic, UINT msg, DWORD_PTR lParam1, DWORD_PTR lParam2)
{
WINE_HIC* whic = MSVIDEO_GetHicPtr(hic);
@ -890,7 +1137,7 @@ DWORD VFWAPIV ICDrawBegin(
ICDRAWBEGIN icdb;
TRACE("(%p,%ld,%p,%p,%p,%u,%u,%u,%u,%p,%u,%u,%u,%u,%ld,%ld)\n",
TRACE("(%p,%d,%p,%p,%p,%u,%u,%u,%u,%p,%u,%u,%u,%u,%d,%d)\n",
hic, dwFlags, hpal, hwnd, hdc, xDst, yDst, dxDst, dyDst,
lpbi, xSrc, ySrc, dxSrc, dySrc, dwRate, dwScale);
@ -909,7 +1156,7 @@ DWORD VFWAPIV ICDrawBegin(
icdb.dySrc = dySrc;
icdb.dwRate = dwRate;
icdb.dwScale = dwScale;
return ICSendMessage(hic,ICM_DRAW_BEGIN,(DWORD)&icdb,sizeof(icdb));
return ICSendMessage(hic,ICM_DRAW_BEGIN,(DWORD_PTR)&icdb,sizeof(icdb));
}
/***********************************************************************
@ -918,7 +1165,7 @@ DWORD VFWAPIV ICDrawBegin(
DWORD VFWAPIV ICDraw(HIC hic, DWORD dwFlags, LPVOID lpFormat, LPVOID lpData, DWORD cbData, LONG lTime) {
ICDRAW icd;
TRACE("(%p,%ld,%p,%p,%ld,%ld)\n",hic,dwFlags,lpFormat,lpData,cbData,lTime);
TRACE("(%p,%d,%p,%p,%d,%d)\n",hic,dwFlags,lpFormat,lpData,cbData,lTime);
icd.dwFlags = dwFlags;
icd.lpFormat = lpFormat;
@ -926,7 +1173,7 @@ DWORD VFWAPIV ICDraw(HIC hic, DWORD dwFlags, LPVOID lpFormat, LPVOID lpData, DWO
icd.cbData = cbData;
icd.lTime = lTime;
return ICSendMessage(hic,ICM_DRAW,(DWORD)&icd,sizeof(icd));
return ICSendMessage(hic,ICM_DRAW,(DWORD_PTR)&icd,sizeof(icd));
}
/***********************************************************************
@ -977,7 +1224,7 @@ HANDLE VFWAPI ICImageCompress(
LPBITMAPINFO lpbiOut, LONG lQuality,
LONG* plSize)
{
FIXME("(%p,%08x,%p,%p,%p,%ld,%p)\n",
FIXME("(%p,%08x,%p,%p,%p,%d,%p)\n",
hic, uiFlags, lpbiIn, lpBits, lpbiOut, lQuality, plSize);
return NULL;
@ -995,7 +1242,7 @@ HANDLE VFWAPI ICImageDecompress(
BYTE* pMem = NULL;
BOOL bReleaseIC = FALSE;
BYTE* pHdr = NULL;
LONG cbHdr = 0;
ULONG cbHdr = 0;
BOOL bSucceeded = FALSE;
BOOL bInDecompress = FALSE;
DWORD biSizeImage;
@ -1047,7 +1294,7 @@ HANDLE VFWAPI ICImageDecompress(
cbHdr = ICDecompressGetFormatSize(hic,lpbiIn);
if ( cbHdr < sizeof(BITMAPINFOHEADER) )
goto err;
pHdr = (BYTE*)HeapAlloc(GetProcessHeap(),0,cbHdr+sizeof(RGBQUAD)*256);
pHdr = HeapAlloc(GetProcessHeap(),0,cbHdr+sizeof(RGBQUAD)*256);
if ( pHdr == NULL )
goto err;
ZeroMemory( pHdr, cbHdr+sizeof(RGBQUAD)*256 );
@ -1081,7 +1328,7 @@ HANDLE VFWAPI ICImageDecompress(
goto err;
bInDecompress = TRUE;
TRACE( "cbHdr %ld, biSizeImage %ld\n", cbHdr, biSizeImage );
TRACE( "cbHdr %d, biSizeImage %d\n", cbHdr, biSizeImage );
hMem = GlobalAlloc( GMEM_MOVEABLE|GMEM_ZEROINIT, cbHdr + biSizeImage );
if ( hMem == NULL )
@ -1104,8 +1351,7 @@ err:
ICDecompressEnd( hic );
if ( bReleaseIC )
ICClose(hic);
if ( pHdr != NULL )
HeapFree(GetProcessHeap(),0,pHdr);
HeapFree(GetProcessHeap(),0,pHdr);
if ( pMem != NULL )
GlobalUnlock( hMem );
if ( !bSucceeded && hMem != NULL )
@ -1116,6 +1362,156 @@ err:
return (HANDLE)hMem;
}
/***********************************************************************
* ICSeqCompressFrame [MSVFW32.@]
*/
LPVOID VFWAPI ICSeqCompressFrame(PCOMPVARS pc, UINT uiFlags, LPVOID lpBits, BOOL *pfKey, LONG *plSize)
{
ICCOMPRESS* icComp = (ICCOMPRESS *)pc->lpState;
DWORD ret;
TRACE("(%p, 0x%08x, %p, %p, %p)\n", pc, uiFlags, lpBits, pfKey, plSize);
if (pc->cbState != sizeof(ICCOMPRESS))
{
ERR("Invalid cbState %i\n", pc->cbState);
return NULL;
}
if (!pc->lKeyCount++)
icComp->dwFlags = ICCOMPRESS_KEYFRAME;
else
{
if (pc->lKey && pc->lKeyCount == (pc->lKey - 1))
/* No key frames if pc->lKey == 0 */
pc->lKeyCount = 0;
icComp->dwFlags = 0;
}
icComp->lpInput = lpBits;
icComp->lFrameNum = pc->lFrame++;
icComp->lpOutput = pc->lpBitsOut;
icComp->lpPrev = pc->lpBitsPrev;
ret = ICSendMessage(pc->hic, ICM_COMPRESS, (DWORD_PTR)icComp, sizeof(icComp));
if (icComp->dwFlags & AVIIF_KEYFRAME)
{
pc->lKeyCount = 1;
*pfKey = TRUE;
TRACE("Key frame\n");
}
else
*pfKey = FALSE;
*plSize = icComp->lpbiOutput->biSizeImage;
TRACE(" -- 0x%08x\n", ret);
if (ret == ICERR_OK)
{
LPVOID oldprev, oldout;
/* We shift Prev and Out, so we don't have to allocate and release memory */
oldprev = pc->lpBitsPrev;
oldout = pc->lpBitsOut;
pc->lpBitsPrev = oldout;
pc->lpBitsOut = oldprev;
TRACE("returning: %p\n", icComp->lpOutput);
return icComp->lpOutput;
}
return NULL;
}
/***********************************************************************
* ICSeqCompressFrameEnd [MSVFW32.@]
*/
void VFWAPI ICSeqCompressFrameEnd(PCOMPVARS pc)
{
DWORD ret;
TRACE("(%p)\n", pc);
ret = ICSendMessage(pc->hic, ICM_COMPRESS_END, 0, 0);
TRACE(" -- %x\n", ret);
HeapFree(GetProcessHeap(), 0, pc->lpbiIn);
HeapFree(GetProcessHeap(), 0, pc->lpBitsPrev);
HeapFree(GetProcessHeap(), 0, pc->lpBitsOut);
HeapFree(GetProcessHeap(), 0, pc->lpState);
pc->lpbiIn = pc->lpBitsPrev = pc->lpBitsOut = pc->lpState = NULL;
}
/***********************************************************************
* ICSeqCompressFrameStart [MSVFW32.@]
*/
BOOL VFWAPI ICSeqCompressFrameStart(PCOMPVARS pc, LPBITMAPINFO lpbiIn)
{
/* I'm ignoring bmiColors as I don't know what to do with it,
* it doesn't appear to be used though
*/
DWORD ret;
pc->lpbiIn = HeapAlloc(GetProcessHeap(), 0, sizeof(BITMAPINFO));
if (!pc->lpbiIn)
return FALSE;
memcpy(pc->lpbiIn, lpbiIn, sizeof(BITMAPINFO));
pc->lpBitsPrev = HeapAlloc(GetProcessHeap(), 0, pc->lpbiIn->bmiHeader.biSizeImage);
if (!pc->lpBitsPrev)
{
HeapFree(GetProcessHeap(), 0, pc->lpbiIn);
return FALSE;
}
pc->lpState = HeapAlloc(GetProcessHeap(), 0, sizeof(ICCOMPRESS));
if (!pc->lpState)
{
HeapFree(GetProcessHeap(), 0, pc->lpbiIn);
HeapFree(GetProcessHeap(), 0, pc->lpBitsPrev);
return FALSE;
}
pc->cbState = sizeof(ICCOMPRESS);
pc->lpBitsOut = HeapAlloc(GetProcessHeap(), 0, pc->lpbiOut->bmiHeader.biSizeImage);
if (!pc->lpBitsOut)
{
HeapFree(GetProcessHeap(), 0, pc->lpbiIn);
HeapFree(GetProcessHeap(), 0, pc->lpBitsPrev);
HeapFree(GetProcessHeap(), 0, pc->lpState);
return FALSE;
}
TRACE("Compvars:\n"
"\tpc:\n"
"\tsize: %i\n"
"\tflags: %i\n"
"\thic: %p\n"
"\ttype: %x\n"
"\thandler: %x\n"
"\tin/out: %p/%p\n"
"key/data/quality: %i/%i/%i\n",
pc->cbSize, pc->dwFlags, pc->hic, pc->fccType, pc->fccHandler,
pc->lpbiIn, pc->lpbiOut, pc->lKey, pc->lDataRate, pc->lQ);
ret = ICSendMessage(pc->hic, ICM_COMPRESS_BEGIN, (DWORD_PTR)pc->lpbiIn, (DWORD_PTR)pc->lpbiOut);
TRACE(" -- %x\n", ret);
if (ret == ICERR_OK)
{
ICCOMPRESS* icComp = (ICCOMPRESS *)pc->lpState;
/* Initialise some variables */
pc->lFrame = 0; pc->lKeyCount = 0;
icComp->lpbiOutput = &pc->lpbiOut->bmiHeader;
icComp->lpbiInput = &pc->lpbiIn->bmiHeader;
icComp->lpckid = NULL;
icComp->dwFrameSize = 0;
icComp->dwQuality = pc->lQ;
icComp->lpbiPrev = &pc->lpbiIn->bmiHeader;
return TRUE;
}
HeapFree(GetProcessHeap(), 0, pc->lpbiIn);
HeapFree(GetProcessHeap(), 0, pc->lpBitsPrev);
HeapFree(GetProcessHeap(), 0, pc->lpState);
HeapFree(GetProcessHeap(), 0, pc->lpBitsOut);
pc->lpBitsPrev = pc->lpbiIn = pc->lpState = pc->lpBitsOut = NULL;
return FALSE;
}
/***********************************************************************
* GetFileNamePreview [MSVFW32.@]
*/
static BOOL GetFileNamePreview(LPVOID lpofn,BOOL bSave,BOOL bUnicode)
{
CHAR szFunctionName[20];

View file

@ -13,20 +13,18 @@
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __WINE_MSVIDEO_PRIVATE_H
#define __WINE_MSVIDEO_PRIVATE_H
#define COM_NO_WINDOWS_H
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
#include "winuser.h"
#include "commdlg.h"
#include "vfw.h"
/* Installable Compressor Manager */
#define ICVERSION 0x0104
#define ICM_CHOOSE_COMPRESSOR 1
#define IDC_COMP_LIST 880
#define IDS_FULLFRAMES 901
/* HIC struct (same layout as Win95 one) */
typedef struct tagWINE_HIC {
@ -48,7 +46,7 @@ typedef struct tagWINE_HIC {
} WINE_HIC;
HIC MSVIDEO_OpenFunction(DWORD, DWORD, UINT, DRIVERPROC, DWORD);
LRESULT MSVIDEO_SendMessage(WINE_HIC*, UINT, DWORD, DWORD);
LRESULT MSVIDEO_SendMessage(WINE_HIC*, UINT, DWORD_PTR, DWORD_PTR);
WINE_HIC* MSVIDEO_GetHicPtr(HIC);
extern LRESULT (CALLBACK *pFnCallTo16)(HDRVR, HIC, UINT, LPARAM, LPARAM);
@ -62,4 +60,17 @@ extern LRESULT (CALLBACK *pFnCallTo16)(HDRVR, HIC, UINT, LPARAM, LPARAM);
#define HDRAWDIB_16(h32) (LOWORD(h32))
#define HIC_16(h32) (LOWORD(h32))
#define IDC_CONFIGURE 882
#define IDC_ABOUT 883
#define IDC_QUALITY_SCROLL 884
#define IDC_QUALITY_TXT 886
#define IDC_KEYFRAME_CHECKBOX 887
#define IDC_KEYFRAME 888
#define IDC_KEYFRAME_FRAMES 889
#define IDC_DATARATE_CHECKBOX 894
#define IDC_DATARATE 895
#define IDC_DATARATE_KB 896
#endif /* __WINE_MSVIDEO_PRIVATE_H */

View file

@ -0,0 +1,30 @@
/*
* Copyright 2005 Dmitry Timoshkov
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "windef.h"
#include "winuser.h"
#include "msvideo_private.h"
#include "msvfw32_De.rc"
#include "msvfw32_En.rc"
#include "msvfw32_Fr.rc"
#include "msvfw32_Hu.rc"
#include "msvfw32_Ko.rc"
#include "msvfw32_No.rc"
#include "msvfw32_Pl.rc"
#include "msvfw32_Tr.rc"

View file

@ -13,7 +13,7 @@
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __WINE_VFW16_H