//	DIBSTRMS.IDL
//	Multi media streaming interface extensions for DIB types

import "mmstream.idl";

cpp_quote("#if 0")
typedef struct tagBITMAPINFOHEADER{
        DWORD      biSize;
        LONG       biWidth;
        LONG       biHeight;
        WORD       biPlanes;
        WORD       biBitCount;
        DWORD      biCompression;
        DWORD      biSizeImage;
        LONG       biXPelsPerMeter;
        LONG       biYPelsPerMeter;
        DWORD      biClrUsed;
        DWORD      biClrImportant;
} BITMAPINFOHEADER;
typedef BITMAPINFOHEADER *LPBITMAPINFOHEADER;
cpp_quote("#endif")

	[
		object,
		local,
		uuid(F12780AF-5C60-11d1-BC46-00AA00A13C86),
		pointer_default(unique)
	]
	interface IDIBMediaStream : IMediaStream
	{
		HRESULT GetDIBFormatSize([out] DWORD *pdwSize);
		HRESULT GetDIBFormat([in, out] LPBITMAPINFOHEADER pbih);
		HRESULT SetDIBFormat([in] LPBITMAPINFOHEADER pbih);
	};

	[
		object,
		local,
		uuid(F12780AE-5C60-11d1-BC46-00AA00A13C86),
		pointer_default(unique)
	]
	interface IDIBStreamSample : IStreamSample
	{
		[helpstring("method LockSample")] HRESULT LockSample([out] BYTE **ppbits);
		[helpstring("method UnlockSample")] HRESULT UnlockSample(void);
	};


	[
		object,
		local,
		uuid(9777AD62-7575-11d1-BC47-00AA00A13C86),
		pointer_default(unique)
	]
	interface IDIBProducer : IUnknown
	{
		HRESULT AllocBuffer([out] HANDLE *phBuffer);
		HRESULT FreeBuffer([in] HANDLE hBuffer);
		HRESULT GetBufferSize([out] DWORD *pdwSize);
		HRESULT LockBuffer([in] HANDLE hBuffer, [out] LPVOID *ppbits);
		HRESULT UnlockBuffer([in] HANDLE hBuffer);
		HRESULT Update(
			[in] HANDLE hBuffer,
			[in] DWORD dwFlags,
			[in] [optional] HANDLE hEvent,
			[in] [optional] PAPCFUNC pfnAPC,
			[in] [optional] DWORD dwAPCData);
		HRESULT CompletionStatus(
			[in] DWORD dwFlags,
			[in] [optional] DWORD dwMilliseconds);
	};


