35#include "wine/fil_data.h"
50 ICreateDevEnum_AddRef(iface);
91 IParseDisplayName_Release(
parser);
101 IParseDisplayName_Release(
parser);
105 IMoniker_Release(mon);
109 hr = IPropertyBag_Write(propbag,
L"FriendlyName", &
var);
113 IPropertyBag_Release(propbag);
120 hr = IPropertyBag_Write(propbag,
L"CLSID", &
var);
124 IPropertyBag_Release(propbag);
137 DWORD dwMediaTypeSize = 0;
142 if (
RegQueryInfoKeyW(hkeyTypes,
NULL,
NULL,
NULL, &dwMajorTypes,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL)
149 for (
i = 0;
i < dwMajorTypes;
i++)
152 WCHAR wszMajorTypeName[64];
154 DWORD dwMinorTypes, i1;
160 if (
RegQueryInfoKeyW(hkeyMajorType,
NULL,
NULL,
NULL, &dwMinorTypes,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL)
167 for (i1 = 0; i1 < dwMinorTypes; i1++)
169 WCHAR wszMinorTypeName[64];
180 if (!clsMajorType)
goto error_cleanup_types;
183 if (
FAILED(
hr))
goto error_cleanup_types;
186 if (
FAILED(
hr))
goto error_cleanup_types;
190 DWORD dwNewSize = dwMediaTypeSize + (dwMediaTypeSize < 2 ? 1 : dwMediaTypeSize / 2);
194 if (!lpNewMediaType)
goto error_cleanup_types;
196 lpMediaType = lpNewMediaType;
197 dwMediaTypeSize = dwNewSize;
200 lpMediaType[rgPin->
nMediaTypes].clsMajorType = clsMajorType;
238 if (
RegQueryInfoKeyW(hkeyPins,
NULL,
NULL,
NULL, &dwPinsSubkeys,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL)
255 for (
i = 0;
i < dwPinsSubkeys;
i++)
264 memset(rgPin, 0,
sizeof(*rgPin));
311 if (rgPins && !rgf2->
cPins2)
326 for (iPin = 0; iPin < rgf->
cPins2; iPin++)
357 hr = IAMFilterData_CreateFilterData(fildata, rgf, &
data, &
size);
358 IAMFilterData_Release(fildata);
381 IPropertyBag_Write(prop_bag,
L"FilterData", &
var);
398 lRet =
RegQueryInfoKeyW(hkeyFilter,
NULL,
NULL,
NULL, &dwFilterSubkeys,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL);
404 for (
i = 0;
i < dwFilterSubkeys;
i++)
406 WCHAR wszFilterSubkeyName[64];
439 &
clsid, friendlyname, &prop_bag);
445 &
clsid, wszFilterSubkeyName, &prop_bag);
462 IPropertyBag_Release(prop_bag);
473 static const WCHAR defaultW[] =
L"Default DirectSound Device";
491 &CLSID_DSoundRender,
name, &prop_bag);
496 &CLSID_DSoundRender, defaultW, &prop_bag);
509 rgtypes.clsMajorType = &MEDIATYPE_Audio;
510 rgtypes.clsMinorType = &MEDIASUBTYPE_PCM;
518 hr = IPropertyBag_Write(prop_bag,
L"DSGuid", &
var);
521 IPropertyBag_Release(prop_bag);
546 &CLSID_AudioRender,
name, &prop_bag);
558 rgtypes.clsMajorType = &MEDIATYPE_Audio;
566 IPropertyBag_Write(prop_bag,
L"WaveOutId", &
var);
569 if (prop_bag) IPropertyBag_Release(prop_bag);
589 &CLSID_AudioRecord, caps.
szPname, &prop_bag);
602 IPropertyBag_Write(prop_bag,
L"WaveInId", &
var);
605 IPropertyBag_Release(prop_bag);
630 &CLSID_AVIMIDIRender,
name, &prop_bag);
642 rgtypes.clsMajorType = &MEDIATYPE_Midi;
650 IPropertyBag_Write(prop_bag,
L"MidiOutId", &
var);
653 IPropertyBag_Release(prop_bag);
684 &CLSID_AVICo,
info.szDescription, &prop_bag);
696 rgtypes[0].clsMajorType = &MEDIATYPE_Video;
697 typeguid = MEDIASUBTYPE_PCM;
698 typeguid.Data1 =
info.fccHandler;
699 rgtypes[0].clsMinorType = &typeguid;
703 rgtypes[1].clsMajorType = &MEDIATYPE_Video;
711 IPropertyBag_Write(prop_bag,
L"FccHandler", &
var);
714 IPropertyBag_Release(prop_bag);
730 for (
i = 0;
i < 10; ++
i)
739 &CLSID_VfwCapture, friendlyname, &prop_bag);
750 rgtypes.clsMajorType = &MEDIATYPE_Video;
751 rgtypes.clsMinorType = &MEDIASUBTYPE_None;
758 IPropertyBag_Write(prop_bag,
L"VFWIndex", &
var);
761 IPropertyBag_Release(prop_bag);
785 if (
IsEqualGUID(
class, &CLSID_LegacyAmFilterCategory))
787 else if (
IsEqualGUID(
class, &CLSID_AudioRendererCategory))
794 else if (
IsEqualGUID(
class, &CLSID_AudioInputDeviceCategory))
796 else if (
IsEqualGUID(
class, &CLSID_VideoCompressorCategory))
798 else if (
IsEqualGUID(
class, &CLSID_VideoInputDeviceCategory))
804 hr = IEnumMoniker_Next(*
out, 1, &mon,
NULL);
807 IMoniker_Release(mon);
808 IEnumMoniker_Reset(*
out);
812 IEnumMoniker_Release(*
out);
BOOL VFWAPI capGetDriverDescriptionW(WORD wDriverIndex, LPWSTR lpszName, INT cbName, LPWSTR lpszVer, INT cbVer)
const CLSID * clsMinorType
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define RegCloseKey(hKey)
LSTATUS WINAPI RegDeleteTreeW(_In_ HKEY, _In_opt_ LPCWSTR)
static void register_vfw_codecs(void)
ICreateDevEnum devenum_factory
static ULONG WINAPI devenum_factory_AddRef(ICreateDevEnum *iface)
static HRESULT WINAPI devenum_factory_QueryInterface(ICreateDevEnum *iface, REFIID riid, void **ppv)
static HRESULT WINAPI devenum_factory_CreateClassEnumerator(ICreateDevEnum *iface, REFCLSID class, IEnumMoniker **out, DWORD flags)
static HRESULT register_codec(const GUID *class, const WCHAR *name, const GUID *clsid, const WCHAR *friendly_name, IPropertyBag **ret)
static void register_wavein_devices(void)
static void register_legacy_filters(void)
static void register_midiout_devices(void)
static void free_regfilter2(REGFILTER2 *rgf)
static void DEVENUM_ReadPins(HKEY hkeyFilterClass, REGFILTER2 *rgf2)
static void write_filter_data(IPropertyBag *prop_bag, REGFILTER2 *rgf)
static void DEVENUM_ReadPinTypes(HKEY hkeyPinKey, REGFILTERPINS2 *rgPin)
HRESULT create_filter_data(VARIANT *var, REGFILTER2 *rgf)
static const ICreateDevEnumVtbl ICreateDevEnum_Vtbl
static void register_avicap_devices(void)
static void register_waveout_devices(void)
static ULONG WINAPI devenum_factory_Release(ICreateDevEnum *iface)
static BOOL CALLBACK register_dsound_devices(GUID *guid, const WCHAR *desc, const WCHAR *module, void *context)
HRESULT enum_moniker_create(REFCLSID class, IEnumMoniker **enum_mon)
HRESULT WINAPI DirectSoundEnumerateW(LPDSENUMCALLBACKW lpDSEnumCallback, LPVOID lpContext)
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegEnumKeyExW(_In_ HKEY hKey, _In_ DWORD dwIndex, _Out_ LPWSTR lpName, _Inout_ LPDWORD lpcbName, _Reserved_ LPDWORD lpReserved, _Out_opt_ LPWSTR lpClass, _Inout_opt_ LPDWORD lpcbClass, _Out_opt_ PFILETIME lpftLastWriteTime)
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegQueryInfoKeyW(HKEY hKey, LPWSTR lpClass, LPDWORD lpcClass, LPDWORD lpReserved, LPDWORD lpcSubKeys, LPDWORD lpcMaxSubKeyLen, LPDWORD lpcMaxClassLen, LPDWORD lpcValues, LPDWORD lpcMaxValueNameLen, LPDWORD lpcMaxValueLen, LPDWORD lpcbSecurityDescriptor, PFILETIME lpftLastWriteTime)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
INT WINAPI StringFromGUID2(REFGUID guid, LPOLESTR str, INT cmax)
HRESULT WINAPI CLSIDFromString(LPCOLESTR str, LPCLSID clsid)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
void *WINAPI CoTaskMemAlloc(SIZE_T size)
void *WINAPI CoTaskMemRealloc(void *ptr, SIZE_T size)
void WINAPI CoTaskMemFree(void *ptr)
static const WCHAR version[]
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
SAFEARRAY *WINAPI SafeArrayCreateVector(VARTYPE vt, LONG lLbound, ULONG cElements)
#define REG_PINFLAG_B_MANY
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define memcpy(s1, s2, n)
D3D11_SHADER_VARIABLE_DESC desc
HIC VFWAPI ICOpen(DWORD fccType, DWORD fccHandler, UINT wMode)
LRESULT VFWAPI ICGetInfo(HIC hic, ICINFO *picinfo, DWORD cb)
BOOL VFWAPI ICInfo(DWORD type, DWORD handler, ICINFO *info)
LRESULT WINAPI ICClose(HIC hic)
_In_ LPWSTR _In_ DWORD _In_ LPCVOID pvData
BSTR WINAPI SysAllocString(LPCOLESTR str)
const GUID IID_IParseDisplayName
const GUID IID_IPropertyBag
#define IsEqualGUID(rguid1, rguid2)
const REGFILTERPINS2 * rgPins2
const REGPINTYPES * lpMediaType
WCHAR szPname[MAXPNAMELEN]
WCHAR szPname[MAXPNAMELEN]
WCHAR szPname[MAXPNAMELEN]
#define MEDIASUBTYPE_NULL
HRESULT WINAPI DECLSPEC_HOTPATCH VariantClear(VARIANTARG *pVarg)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
UINT WINAPI midiOutGetNumDevs(void)
UINT WINAPI waveOutGetNumDevs(void)
UINT WINAPI waveOutGetDevCapsW(UINT_PTR uDeviceID, LPWAVEOUTCAPSW lpCaps, UINT uSize)
UINT WINAPI waveInGetNumDevs(void)
UINT WINAPI midiOutGetDevCapsW(UINT_PTR uDeviceID, LPMIDIOUTCAPSW lpCaps, UINT uSize)
UINT WINAPI waveInGetDevCapsW(UINT_PTR uDeviceID, LPWAVEINCAPSW lpCaps, UINT uSize)
#define HKEY_CURRENT_USER
#define HKEY_CLASSES_ROOT