//	VIDEOCAP.IDL
//	Multi media stream based video capture IDL

import "mmstream.idl";

#define MAX_PATH						260

#define MAX_CAPDEV_NAME                 MAX_PATH
#define MAX_CAPDEV_DESCRIPTION          MAX_PATH
#define MAX_CAPDEV_VERSION              80

cpp_quote("#ifndef _DCAP_H")
cpp_quote("#ifndef _FINDCAPTUREDEVICE_struct")
cpp_quote("#define _FINDCAPTUREDEVICE_struct")
typedef struct _FINDCAPTUREDEVICE
{
    DWORD dwSize;
    int nDeviceIndex;
    char szDeviceName[MAX_CAPDEV_NAME];
    char szDeviceDescription[MAX_CAPDEV_DESCRIPTION];
    char szDeviceVersion[MAX_CAPDEV_VERSION];
} FINDCAPTUREDEVICE;
cpp_quote("#endif //#ifndef _FINDCAPTUREDEVICE_struct")
cpp_quote("#endif //#ifndef _DCAP_H")

	[
		object,
		local,
		uuid(09D9467A-1366-11D1-BC3A-00AA00A13C86),
		pointer_default(unique)
	]
	interface IVideoCapture : IMediaStream
	{
		[propget, helpstring("property FrameRate (frames/100 seconds)")] HRESULT FrameRate([out, retval] long *pVal);
		[propput, helpstring("property FrameRate (frames/100 seconds)")] HRESULT FrameRate([in] long newVal);
	};
	
	[
		object,
		local,
		uuid(244C959E-1370-11d1-BC3A-00AA00A13C86),
		pointer_default(unique)
	]
	interface IVideoCaptureEnum : IUnknown
	{
		HRESULT GetNumCaptureDevices([out] int *pDevices);
		HRESULT FindFirstCaptureDevice([in, out] FINDCAPTUREDEVICE* lpfcd, LPCSTR szDeviceDescription);
		HRESULT FindFirstCaptureDeviceByIndex([in, out] FINDCAPTUREDEVICE* lpfcd, int nDeviceIndex);
		HRESULT FindNextCaptureDevice([in, out] FINDCAPTUREDEVICE* lpfcd);
		HRESULT OpenCaptureDevice([in] int nDeviceNumber, [out] IVideoCapture** ppCapture);
	};

