windows-nt/Source/XPSP1/NT/enduser/netmeeting/av/nmcap/vidpool.h
2020-09-26 16:20:57 +08:00

98 lines
2.9 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <windows.h>
#include "ibitmap.h"
#ifndef _VIDPOOL_H
#define _VIDPOOL_H
// {36447655-7089-11d0-BC25-00AA00A13C86}
DEFINE_GUID(BFID_PRIVATEDIB, 0x36447655, 0x7089, 0x11d0, 0xbc, 0x25, 0x0, 0xaa, 0x0, 0xa1, 0x3c, 0x86);
class CVidPool;
class CBitmap :
public IBitmapSurface
{
private:
LONG m_cRef;
public:
LPBYTE m_bits;
LONG m_pitch;
int m_lockcount;
BOOL m_ext;
CBitmap* m_next;
CVidPool* m_factory;
void *m_refdata;
CBitmap() {m_cRef = 0; m_bits = NULL; m_pitch = 0; m_lockcount = 0; m_ext = FALSE;
m_next = NULL; m_factory = NULL; m_refdata = NULL;}
// IUnknown methods
virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj);
virtual STDMETHODIMP_(ULONG) AddRef(void);
virtual STDMETHODIMP_(ULONG) Release(void);
// IBitmapSurface methods
virtual STDMETHODIMP Clone(IBitmapSurface** ppBitmapSurface);
virtual STDMETHODIMP GetFormat(BFID* pBFID);
virtual STDMETHODIMP GetFactory(IBitmapSurfaceFactory** ppBitmapSurfaceFactory);
virtual STDMETHODIMP GetSize(long* pWidth, long* pHeight);
virtual STDMETHODIMP LockBits(RECT* prcBounds, DWORD dwLockFlags, void** ppBits, long* pPitch);
virtual STDMETHODIMP UnlockBits(RECT* prcBounds, void* pBits);
};
typedef void (NotifyAddingToFreeProc) (CBitmap *pBitmap, DWORD_PTR refdata);
class CVidPool :
public IBitmapSurfaceFactory
{
private:
LONG m_cRef;
BOOL m_growable;
LONG m_nbufs;
CBitmap* m_free;
int m_pitch;
BFID* m_format;
CRITICAL_SECTION m_cs;
LPBITMAPINFOHEADER m_pbmh;
public:
NotifyAddingToFreeProc *m_pAddingToFree;
DWORD_PTR m_refdata;
CVidPool(void);
// IUnknown methods
virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID* ppvObj);
virtual STDMETHODIMP_(ULONG) AddRef(void);
virtual STDMETHODIMP_(ULONG) Release(void);
// IBitmapSurfaceFactory methods
virtual STDMETHODIMP CreateBitmapSurface(long width, long height, BFID* pBFID, DWORD dwHintFlags, IBitmapSurface** ppBitmapSurface);
virtual STDMETHODIMP GetSupportedFormatsCount(long* pcFormats);
virtual STDMETHODIMP GetSupportedFormats(long cFormats, BFID* pBFIDs);
// private to implementation of CVidPool
STDMETHODIMP InitPool(int nBuffers, LPBITMAPINFOHEADER lpcap);
STDMETHODIMP AddExternalBuffer(void* pBits, void* refdata);
STDMETHODIMP GetBuffer(CBitmap** ppBitmap, void** prefdata);
STDMETHODIMP GetBuffer(IBitmapSurface** ppBitmap, void** prefdata);
void AddToFreeList(CBitmap* pBitmap);
BOOL Growable(void) { return m_growable; }
BFID* GetFormat(void) {return m_format;}
long GetWidth(void) { if (m_pbmh)
return m_pbmh->biWidth;
else
return 0; }
long GetHeight(void) { if (m_pbmh)
return m_pbmh->biHeight;
else
return 0; }
};
#endif // #ifndef _VIDPOOL_H