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

📄 inputpin.c

📁 linux下的MPEG1
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "inputpin.h"#include "../wine/winerror.h"#include <string.h>#include <stdio.h>#include <stdlib.h>static inline int unimplemented(const char* s, void* p){    Debug printf("%s(%p) called (UNIMPLEMENTED)", s, p);    return E_NOTIMPL;}/*********** * EnumPins ***********/typedef struct{    IEnumPins_vt* vt;    DECLARE_IUNKNOWN();    IPin* pin1;    IPin* pin2;    int counter;    GUID interfaces[2];} CEnumPins;static long STDCALL CEnumPins_Next(IEnumPins* This,				   /* [in] */ unsigned long cMediaTypes,				   /* [size_is][out] */ IPin** ppMediaTypes,				   /* [out] */ unsigned long* pcFetched){    CEnumPins* pin = (CEnumPins*)This;    Debug printf("CEnumPins_Next(%p) called\n", This);    if (!ppMediaTypes)	return E_INVALIDARG;    if (!pcFetched && (cMediaTypes!=1))	return E_INVALIDARG;    if (cMediaTypes<=0)	return 0;    //lcounter = ((CEnumPins*)This)->counter;    //lpin1 = ((CEnumPins*)This)->pin1;    //lpin2 = ((CEnumPins*)This)->pin2;    if (((pin->counter == 2) && pin->pin2)	|| ((pin->counter == 1) && !pin->pin2))    {	if (pcFetched)	    *pcFetched=0;	return 1;    }    if (pcFetched)	*pcFetched=1;    if (pin->counter==0)    {	*ppMediaTypes = pin->pin1;	pin->pin1->vt->AddRef((IUnknown*)pin->pin1);    }    else    {	*ppMediaTypes = pin->pin2;	pin->pin2->vt->AddRef((IUnknown*)pin->pin2);    }    pin->counter++;    if (cMediaTypes == 1)	return 0;    return 1;}static long STDCALL CEnumPins_Skip(IEnumPins* This,				   /* [in] */ unsigned long cMediaTypes){    Debug unimplemented("CEnumPins_Skip", This);    return E_NOTIMPL;}static long STDCALL CEnumPins_Reset(IEnumPins* This){    Debug printf("CEnumPins_Reset(%p) called\n", This);    ((CEnumPins*)This)->counter = 0;    return 0;}static long STDCALL CEnumPins_Clone(IEnumPins* This,				    /* [out] */ IEnumPins** ppEnum){    Debug unimplemented("CEnumPins_Clone", This);    return E_NOTIMPL;}static void CEnumPins_Destroy(CEnumPins* This){    free(This->vt);    free(This);}IMPLEMENT_IUNKNOWN(CEnumPins)static CEnumPins* CEnumPinsCreate(IPin* p, IPin* pp){    CEnumPins* This = (CEnumPins*) malloc(sizeof(CEnumPins));    if (!This)        return NULL;    This->refcount = 1;    This->pin1 = p;    This->pin2 = pp;    This->counter = 0;    This->vt = (IEnumPins_vt*) malloc(sizeof(IEnumPins_vt));    if (!This->vt)    {	free(This);        return NULL;    }    This->vt->QueryInterface = CEnumPins_QueryInterface;    This->vt->AddRef = CEnumPins_AddRef;    This->vt->Release = CEnumPins_Release;    This->vt->Next = CEnumPins_Next;    This->vt->Skip = CEnumPins_Skip;    This->vt->Reset = CEnumPins_Reset;    This->vt->Clone = CEnumPins_Clone;    This->interfaces[0] = IID_IUnknown;    This->interfaces[1] = IID_IEnumPins;    return This;}/*********** * InputPin ***********/static long STDCALL CInputPin_Connect(IPin* This,				      /* [in] */ IPin* pReceivePin,				      /* [in] */ AM_MEDIA_TYPE* pmt){    Debug unimplemented("CInputPin_Connect", This);    return E_NOTIMPL;}static long STDCALL CInputPin_ReceiveConnection(IPin* This,						/* [in] */ IPin* pConnector,						/* [in] */ const AM_MEDIA_TYPE *pmt){    Debug unimplemented("CInputPin_ReceiveConnection", This);    return E_NOTIMPL;}static long STDCALL CInputPin_Disconnect(IPin* This){    Debug unimplemented("CInputPin_Disconnect", This);    return E_NOTIMPL;}static long STDCALL CInputPin_ConnectedTo(IPin* This,					  /* [out] */ IPin** pPin){    Debug unimplemented("CInputPin_ConnectedTo", This);    return E_NOTIMPL;}static long STDCALL CInputPin_ConnectionMediaType(IPin* This,						  /* [out] */ AM_MEDIA_TYPE *pmt){    Debug printf("CInputPin_ConnectionMediaType(%p) called\n", This);    if (!pmt)	return E_INVALIDARG;    *pmt=((CInputPin*)This)->type;    if (pmt->cbFormat > 0)    {	pmt->pbFormat=(char *)CoTaskMemAlloc(pmt->cbFormat);	memcpy(pmt->pbFormat, ((CInputPin*)This)->type.pbFormat, pmt->cbFormat);    }    return 0;}static long STDCALL CInputPin_QueryPinInfo(IPin* This,					   /* [out] */ PIN_INFO *pInfo){    CBaseFilter* lparent=((CInputPin*)This)->parent;    Debug printf("CInputPin_QueryPinInfo(%p) called\n", This);    pInfo->dir = PINDIR_OUTPUT;    pInfo->pFilter = (IBaseFilter*) lparent;    lparent->vt->AddRef((IUnknown*)lparent);    pInfo->achName[0] = 0;    return 0;}static long STDCALL CInputPin_QueryDirection(IPin* This,					      /* [out] */ PIN_DIRECTION *pPinDir){    *pPinDir = PINDIR_OUTPUT;    Debug printf("CInputPin_QueryDirection(%p) called\n", This);    return 0;}static long STDCALL CInputPin_QueryId(IPin* This,				       /* [out] */ unsigned short* *Id){    Debug unimplemented("CInputPin_QueryId", This);    return E_NOTIMPL;}static long STDCALL CInputPin_QueryAccept(IPin* This,					  /* [in] */ const AM_MEDIA_TYPE* pmt){    Debug unimplemented("CInputPin_QueryAccept", This);    return E_NOTIMPL;}static long STDCALL CInputPin_EnumMediaTypes(IPin* This,					     /* [out] */ IEnumMediaTypes** ppEnum){    Debug unimplemented("CInputPin_EnumMediaTypes", This);    return E_NOTIMPL;}static long STDCALL CInputPin_QueryInternalConnections(IPin* This,						       /* [out] */ IPin** apPin,						       /* [out][in] */ unsigned long *nPin){    Debug unimplemented("CInputPin_QueryInternalConnections", This);    return E_NOTIMPL;}static long STDCALL CInputPin_EndOfStream(IPin * This){    Debug unimplemented("CInputPin_EndOfStream", This);    return E_NOTIMPL;}static long STDCALL CInputPin_BeginFlush(IPin * This){    Debug unimplemented("CInputPin_BeginFlush", This);    return E_NOTIMPL;}static long STDCALL CInputPin_EndFlush(IPin* This){    Debug unimplemented("CInputPin_EndFlush", This);    return E_NOTIMPL;}static long STDCALL CInputPin_NewSegment(IPin* This,					  /* [in] */ REFERENCE_TIME tStart,					  /* [in] */ REFERENCE_TIME tStop,					  /* [in] */ double dRate){    Debug unimplemented("CInputPin_NewSegment", This);    return E_NOTIMPL;}static void CInputPin_Destroy(CInputPin* This){    free(This->vt);    free(This);}IMPLEMENT_IUNKNOWN(CInputPin)CInputPin* CInputPinCreate(CBaseFilter* p, const AM_MEDIA_TYPE* amt){    CInputPin* This = (CInputPin*) malloc(sizeof(CInputPin));    if (!This)        return NULL;    This->refcount = 1;    This->parent = p;    This->type = *amt;    This->vt= (IPin_vt*) malloc(sizeof(IPin_vt));    if (!This->vt)    {	free(This);	return NULL;    }    This->vt->QueryInterface = CInputPin_QueryInterface;    This->vt->AddRef = CInputPin_AddRef;    This->vt->Release = CInputPin_Release;    This->vt->Connect = CInputPin_Connect;    This->vt->ReceiveConnection = CInputPin_ReceiveConnection;    This->vt->Disconnect = CInputPin_Disconnect;    This->vt->ConnectedTo = CInputPin_ConnectedTo;    This->vt->ConnectionMediaType = CInputPin_ConnectionMediaType;    This->vt->QueryPinInfo = CInputPin_QueryPinInfo;    This->vt->QueryDirection = CInputPin_QueryDirection;    This->vt->QueryId = CInputPin_QueryId;    This->vt->QueryAccept = CInputPin_QueryAccept;    This->vt->EnumMediaTypes = CInputPin_EnumMediaTypes;    This->vt->QueryInternalConnections = CInputPin_QueryInternalConnections;    This->vt->EndOfStream = CInputPin_EndOfStream;    This->vt->BeginFlush = CInputPin_BeginFlush;    This->vt->EndFlush = CInputPin_EndFlush;    This->vt->NewSegment = CInputPin_NewSegment;    This->interfaces[0]=IID_IUnknown;    return This;}/************* * BaseFilter *************/static long STDCALL CBaseFilter_GetClassID(IBaseFilter * This,					   /* [out] */ CLSID *pClassID){    Debug unimplemented("CBaseFilter_GetClassID", This);    return E_NOTIMPL;}static long STDCALL CBaseFilter_Stop(IBaseFilter* This){    Debug unimplemented("CBaseFilter_Stop", This);    return E_NOTIMPL;}static long STDCALL CBaseFilter_Pause(IBaseFilter* This){    Debug unimplemented("CBaseFilter_Pause", This);    return E_NOTIMPL;}static long STDCALL CBaseFilter_Run(IBaseFilter* This, REFERENCE_TIME tStart){    Debug unimplemented("CBaseFilter_Run", This);    return E_NOTIMPL;}static long STDCALL CBaseFilter_GetState(IBaseFilter* This,					 /* [in] */ unsigned long dwMilliSecsTimeout,					 // /* [out] */ FILTER_STATE *State)					 void* State){    Debug unimplemented("CBaseFilter_GetState", This);    return E_NOTIMPL;}static long STDCALL CBaseFilter_SetSyncSource(IBaseFilter* This,					      /* [in] */ IReferenceClock *pClock){    Debug unimplemented("CBaseFilter_SetSyncSource", This);    return E_NOTIMPL;}static long STDCALL CBaseFilter_GetSyncSource(IBaseFilter* This,					      /* [out] */ IReferenceClock **pClock){    Debug unimplemented("CBaseFilter_GetSyncSource", This);    return E_NOTIMPL;}static long STDCALL CBaseFilter_EnumPins(IBaseFilter* This,					 /* [out] */ IEnumPins **ppEnum){    Debug printf("CBaseFilter_EnumPins(%p) called\n", This);    *ppEnum = (IEnumPins*) CEnumPinsCreate(((CBaseFilter*)This)->pin, ((CBaseFilter*)This)->unused_pin);    return 0;}static long STDCALL CBaseFilter_FindPin(IBaseFilter* This,					/* [string][in] */ const unsigned short* Id,					/* [out] */ IPin **ppPin){    Debug unimplemented("CBaseFilter_FindPin\n", This);    return E_NOTIMPL;}static long STDCALL CBaseFilter_QueryFilterInfo(IBaseFilter* This,						// /* [out] */ FILTER_INFO *pInfo)						void* pInfo){    Debug unimplemented("CBaseFilter_QueryFilterInfo", This);    return E_NOTIMPL;}static long STDCALL CBaseFilter_JoinFilterGraph(IBaseFilter* This,						/* [in] */ IFilterGraph* pGraph,						/* [string][in] */ const unsigned short* pName)

⌨️ 快捷键说明

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