Add a semi-functional ICCompressorChoose implementation.
This commit is contained in:
parent
6154b46bef
commit
fd2004e52f
|
@ -1,2 +1,3 @@
|
||||||
Makefile
|
Makefile
|
||||||
libmsvfw32.def
|
libmsvfw32.def
|
||||||
|
rsrc.res
|
||||||
|
|
|
@ -17,6 +17,8 @@ C_SRCS16 = \
|
||||||
|
|
||||||
SPEC_SRCS16 = msvideo.spec
|
SPEC_SRCS16 = msvideo.spec
|
||||||
|
|
||||||
|
RC_SRCS = rsrc.rc
|
||||||
|
|
||||||
@MAKE_DLL_RULES@
|
@MAKE_DLL_RULES@
|
||||||
|
|
||||||
### Dependencies:
|
### Dependencies:
|
||||||
|
|
|
@ -20,11 +20,15 @@
|
||||||
* Handle palettes
|
* Handle palettes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "msvideo_private.h"
|
|
||||||
|
|
||||||
|
#include "windef.h"
|
||||||
|
#include "winbase.h"
|
||||||
#include "wingdi.h"
|
#include "wingdi.h"
|
||||||
#include "winuser.h"
|
#include "winuser.h"
|
||||||
|
#include "vfw.h"
|
||||||
|
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
|
|
@ -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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "msvideo_private.h"
|
||||||
|
|
||||||
|
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)"
|
||||||
|
}
|
|
@ -20,14 +20,18 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define COM_NO_WINDOWS_H
|
#define COM_NO_WINDOWS_H
|
||||||
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "msvideo_private.h"
|
#include "windef.h"
|
||||||
|
#include "winbase.h"
|
||||||
#include "winver.h"
|
#include "winver.h"
|
||||||
#include "winnls.h"
|
#include "winnls.h"
|
||||||
#include "winreg.h"
|
#include "winreg.h"
|
||||||
|
#include "winuser.h"
|
||||||
#include "vfw16.h"
|
#include "vfw16.h"
|
||||||
|
#include "msvideo_private.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(msvideo);
|
WINE_DEFAULT_DEBUG_CHANNEL(msvideo);
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
* Copyright 1998 Marcus Meissner
|
* Copyright 1998 Marcus Meissner
|
||||||
* Copyright 2000 Bradley Baetz
|
* Copyright 2000 Bradley Baetz
|
||||||
* Copyright 2003 Michael Günnewig
|
* Copyright 2003 Michael Günnewig
|
||||||
|
* Copyright 2005 Dmitry Timoshkov
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
@ -25,17 +26,20 @@
|
||||||
* - no thread safety
|
* - no thread safety
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "msvideo_private.h"
|
#define COM_NO_WINDOWS_H
|
||||||
|
#include "windef.h"
|
||||||
|
#include "winbase.h"
|
||||||
|
#include "winreg.h"
|
||||||
#include "winnls.h"
|
#include "winnls.h"
|
||||||
#include "wingdi.h"
|
#include "wingdi.h"
|
||||||
#include "winuser.h"
|
#include "winuser.h"
|
||||||
#include "winreg.h"
|
#include "commdlg.h"
|
||||||
|
#include "vfw.h"
|
||||||
#include "windowsx.h"
|
#include "msvideo_private.h"
|
||||||
|
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
/* Drivers32 settings */
|
/* Drivers32 settings */
|
||||||
|
@ -705,35 +709,175 @@ DWORD VFWAPIV ICDecompress(HIC hic,DWORD dwFlags,LPBITMAPINFOHEADER lpbiFormat,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct choose_compressor
|
||||||
|
{
|
||||||
|
UINT flags;
|
||||||
|
LPCSTR title;
|
||||||
|
COMPVARS cv;
|
||||||
|
};
|
||||||
|
|
||||||
|
static BOOL enum_compressors(HWND list)
|
||||||
|
{
|
||||||
|
UINT id;
|
||||||
|
ICINFO icinfo;
|
||||||
|
|
||||||
|
id = 0;
|
||||||
|
|
||||||
|
while (ICInfo(ICTYPE_VIDEO, id, &icinfo))
|
||||||
|
{
|
||||||
|
ICINFO *ic;
|
||||||
|
DWORD idx;
|
||||||
|
HIC hic;
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
ICGetInfo(hic, &icinfo, sizeof(icinfo));
|
||||||
|
icinfo.fccHandler = fccHandler;
|
||||||
|
ICClose(hic);
|
||||||
|
|
||||||
|
idx = SendMessageW(list, CB_ADDSTRING, 0, (LPARAM)icinfo.szDescription);
|
||||||
|
|
||||||
|
ic = HeapAlloc(GetProcessHeap(), 0, sizeof(ICINFO));
|
||||||
|
*ic = icinfo;
|
||||||
|
SendMessageW(list, CB_SETITEMDATA, idx, (LPARAM)ic);
|
||||||
|
}
|
||||||
|
id++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return id != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static INT_PTR CALLBACK icm_choose_compressor_dlgproc(HWND hdlg, UINT msg, WPARAM wparam, LPARAM lparam)
|
||||||
|
{
|
||||||
|
switch (msg)
|
||||||
|
{
|
||||||
|
case WM_INITDIALOG:
|
||||||
|
{
|
||||||
|
WCHAR buf[128];
|
||||||
|
struct choose_compressor *choose_comp = (struct choose_compressor *)lparam;
|
||||||
|
|
||||||
|
if (choose_comp->title)
|
||||||
|
SetWindowTextA(hdlg, choose_comp->title);
|
||||||
|
|
||||||
|
LoadStringW((HINSTANCE)GetWindowLongPtrW(hdlg, GWLP_HINSTANCE),
|
||||||
|
IDS_FULLFRAMES, buf, 128);
|
||||||
|
SendDlgItemMessageW(hdlg, IDC_COMP_LIST, CB_ADDSTRING, 0, (LPARAM)buf);
|
||||||
|
|
||||||
|
enum_compressors(GetDlgItem(hdlg, IDC_COMP_LIST));
|
||||||
|
|
||||||
|
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 IDOK:
|
||||||
|
{
|
||||||
|
HWND list = GetDlgItem(hdlg, IDC_COMP_LIST);
|
||||||
|
INT cur_sel;
|
||||||
|
ICINFO *ic;
|
||||||
|
|
||||||
|
cur_sel = SendMessageW(list, CB_GETCURSEL, 0, 0);
|
||||||
|
ic = (ICINFO *)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 = ICOpen(ic->fccType, ic->fccHandler, ICMODE_COMPRESS);
|
||||||
|
if (choose_comp->cv.hic)
|
||||||
|
{
|
||||||
|
choose_comp->cv.fccType = ic->fccType;
|
||||||
|
choose_comp->cv.fccHandler = ic->fccHandler;
|
||||||
|
/* FIXME: fill everything else */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* fall through */
|
||||||
|
case IDCANCEL:
|
||||||
|
{
|
||||||
|
HWND list = GetDlgItem(hdlg, IDC_COMP_LIST);
|
||||||
|
INT idx = 0;
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
LRESULT ret = SendMessageW(list, CB_GETITEMDATA, idx++, 0);
|
||||||
|
|
||||||
|
if (!ret || ret == CB_ERR) break;
|
||||||
|
|
||||||
|
HeapFree(GetProcessHeap(), 0, (void *)ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
EndDialog(hdlg, LOWORD(wparam) == IDOK);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* ICCompressorChoose [MSVFW32.@]
|
* ICCompressorChoose [MSVFW32.@]
|
||||||
*/
|
*/
|
||||||
BOOL VFWAPI ICCompressorChoose(HWND hwnd, UINT uiFlags, LPVOID pvIn,
|
BOOL VFWAPI ICCompressorChoose(HWND hwnd, UINT uiFlags, LPVOID pvIn,
|
||||||
LPVOID lpData, PCOMPVARS pc, LPSTR lpszTitle)
|
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))
|
TRACE("(%p,%08x,%p,%p,%p,%s)\n", hwnd, uiFlags, pvIn, lpData, pc, lpszTitle);
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
if ((pc->dwFlags & ICMF_COMPVARS_VALID) == 0) {
|
if (!pc || pc->cbSize != sizeof(COMPVARS))
|
||||||
pc->dwFlags = 0;
|
return FALSE;
|
||||||
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;
|
|
||||||
|
|
||||||
/* FIXME */
|
if (!(pc->dwFlags & ICMF_COMPVARS_VALID))
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
|
||||||
return FALSE;
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -19,14 +19,9 @@
|
||||||
#ifndef __WINE_MSVIDEO_PRIVATE_H
|
#ifndef __WINE_MSVIDEO_PRIVATE_H
|
||||||
#define __WINE_MSVIDEO_PRIVATE_H
|
#define __WINE_MSVIDEO_PRIVATE_H
|
||||||
|
|
||||||
#define COM_NO_WINDOWS_H
|
#define ICM_CHOOSE_COMPRESSOR 1
|
||||||
#include <stdarg.h>
|
#define IDC_COMP_LIST 880
|
||||||
#include "windef.h"
|
#define IDS_FULLFRAMES 901
|
||||||
#include "winbase.h"
|
|
||||||
#include "wingdi.h"
|
|
||||||
#include "winuser.h"
|
|
||||||
#include "commdlg.h"
|
|
||||||
#include "vfw.h"
|
|
||||||
|
|
||||||
/* HIC struct (same layout as Win95 one) */
|
/* HIC struct (same layout as Win95 one) */
|
||||||
typedef struct tagWINE_HIC {
|
typedef struct tagWINE_HIC {
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
/*
|
||||||
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "windef.h"
|
||||||
|
#include "winuser.h"
|
||||||
|
|
||||||
|
#include "msvfw32_En.rc"
|
Loading…
Reference in New Issue