⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buffer.c

📁 君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图片解码,浏览,电子书,录音,想学ucos,识货的人就下吧 russblock fmradio explore set
💻 C
字号:
#include "DMO_Filter.h"#include "wine/winerror.h"#include "wine/windef.h"#include <mplaylib.h>#include <mplaylib.h>#include <mplaylib.h>#undef memcpy#define memcpy uc_memcpystruct _CMediaBuffer{    IMediaBuffer_vt* vt;    DECLARE_IUNKNOWN();    GUID interfaces[2];    void* mem;    unsigned long len;    unsigned long maxlen;    int freemem;};static HRESULT STDCALL CMediaBuffer_SetLength(IMediaBuffer* This,					      unsigned long cbLength){    CMediaBuffer* cmb = (CMediaBuffer*) This;    Debug printf("CMediaBuffer_SetLength(%p) called (%ld, %ld)\n", This, cbLength, cmb->maxlen);    if (cbLength > cmb->maxlen)        return E_INVALIDARG;    cmb->len = cbLength;    return S_OK;}static HRESULT STDCALL CMediaBuffer_GetMaxLength(IMediaBuffer* This,						 /* [out] */ unsigned long *pcbMaxLength){    CMediaBuffer* cmb = (CMediaBuffer*) This;    Debug printf("CMediaBuffer_GetMaxLength(%p) called -> %ld\n", This, cmb->maxlen);    if (!pcbMaxLength)	return E_POINTER;    *pcbMaxLength = cmb->maxlen;    return S_OK;}static HRESULT STDCALL CMediaBuffer_GetBufferAndLength(IMediaBuffer* This,						       /* [out] */ char** ppBuffer,						       /* [out] */ unsigned long* pcbLength){    CMediaBuffer* cmb = (CMediaBuffer*) This;    Debug printf("CMediaBuffer_GetBufferAndLength(%p) called -> %p %ld\n", This, cmb->mem, cmb->len);    if (!ppBuffer && !pcbLength)	return E_POINTER;    if (ppBuffer)	*ppBuffer = cmb->mem;    if (pcbLength)	*pcbLength = cmb->len;    return S_OK;}static void CMediaBuffer_Destroy(CMediaBuffer* This){    Debug printf("CMediaBuffer_Destroy(%p) called\n", This);    if (This->freemem)        free(This->mem);    free(This->vt);    free(This);}IMPLEMENT_IUNKNOWN(CMediaBuffer)CMediaBuffer* CMediaBufferCreate(unsigned long maxlen, void* mem,				 unsigned long len, int copy){    CMediaBuffer* This = (CMediaBuffer*) malloc(sizeof(CMediaBuffer));    if (!This)        return NULL;    This->vt = (IMediaBuffer_vt*) malloc(sizeof(IMediaBuffer_vt));    if (!This->vt)    {        CMediaBuffer_Destroy(This);	return NULL;    }    This->refcount = 1;    This->len = len;    This->maxlen = maxlen;    This->freemem = 0;    This->mem = mem;    if (copy)	/* make a private copy of data */        This->mem = 0;    if (This->mem == NULL)    {	if (This->maxlen)	{	    This->mem = malloc(This->maxlen);	    if (!This->mem)	    {		CMediaBuffer_Destroy(This);		return NULL;	    }	    This->freemem = 1;	    if (copy)		memcpy(This->mem, mem, This->len);	}    }    This->vt->QueryInterface = CMediaBuffer_QueryInterface;    This->vt->AddRef = CMediaBuffer_AddRef;    This->vt->Release = CMediaBuffer_Release;    This->vt->SetLength = CMediaBuffer_SetLength;    This->vt->GetMaxLength = CMediaBuffer_GetMaxLength;    This->vt->GetBufferAndLength = CMediaBuffer_GetBufferAndLength;    This->interfaces[0] = IID_IUnknown;    This->interfaces[1] = IID_IMediaBuffer;    return This;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -