windows-nt/Source/XPSP1/NT/public/sdk/inc/mediabuf.h
2020-09-26 16:20:57 +08:00

56 lines
1.6 KiB
C++

//------------------------------------------------------------------------------
// File: MediaBuf.h
//
// Desc: Definition of CBaseMediaBuffer class.
//
// Copyright (c) 1999-2000, Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------
#ifndef __MEDIABUF_H__
#define __MEDIABUF_H__
class CBaseMediaBuffer : public IMediaBuffer {
public:
CBaseMediaBuffer() {}
CBaseMediaBuffer(BYTE *pData, ULONG ulSize, ULONG ulData) :
m_pData(pData), m_ulSize(ulSize), m_ulData(ulData), m_cRef(1) {}
STDMETHODIMP_(ULONG) AddRef() {
return InterlockedIncrement((long*)&m_cRef);
}
STDMETHODIMP_(ULONG) Release() {
long l = InterlockedDecrement((long*)&m_cRef);
if (l == 0)
delete this;
return l;
}
STDMETHODIMP QueryInterface(REFIID riid, void **ppv) {
if (riid == IID_IUnknown) {
AddRef();
*ppv = (IUnknown*)this;
return NOERROR;
}
else if (riid == IID_IMediaBuffer) {
AddRef();
*ppv = (IMediaBuffer*)this;
return NOERROR;
}
else
return E_NOINTERFACE;
}
STDMETHODIMP SetLength(DWORD ulLength) {m_ulData = ulLength; return NOERROR;}
STDMETHODIMP GetMaxLength(DWORD *pcbMaxLength) {*pcbMaxLength = m_ulSize; return NOERROR;}
STDMETHODIMP GetBufferAndLength(BYTE **ppBuffer, DWORD *pcbLength) {
if (ppBuffer) *ppBuffer = m_pData;
if (pcbLength) *pcbLength = m_ulData;
return NOERROR;
}
protected:
BYTE *m_pData;
ULONG m_ulSize;
ULONG m_ulData;
ULONG m_cRef;
};
#endif __MEDIABUF_H__