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

📄 inputpin.c

📁 君正早期ucos系统(只有早期的才不没有打包成库),MPLAYER,文件系统,图片解码,浏览,电子书,录音,想学ucos,识货的人就下吧 russblock fmradio explore set
💻 C
📖 第 1 页 / 共 3 页
字号:
}/** * \brief IMediaFilter::GetState (retrieves the filter's state (running, stopped or paused)) * * \param[in] This pointer to IBaseFilter interface * \param[in] dwMilliSecsTimeout Timeout interval in milliseconds. To block indifinitely pass *            INFINITE. * \param[out] State pointer to variable that receives a member of FILTER_STATE enumeration. * * \return S_OK success * \return E_POINTER Null pointer * \return VFW_S_STATE_INTERMEDATE Intermediate state * \return VFW_S_CANT_CUE The filter is active, but cannot deliver data. * */static long STDCALL CBaseFilter2_GetState(IBaseFilter* This,					  /* [in] */ unsigned long dwMilliSecsTimeout,					  // /* [out] */ FILTER_STATE *State)					  void* State){    Debug unimplemented("CBaseFilter2_GetState", This);    return E_NOTIMPL;}/** * \brief IMediaFilter::SetSyncSource (sets the reference clock) * * \param[in] This pointer to IBaseFilter interface * \param[in] pClock IReferenceClock interface of reference clock * * \return S_OK success * \return apripriate error otherwise * */static long STDCALL CBaseFilter2_SetSyncSource(IBaseFilter* This,					       /* [in] */ IReferenceClock* pClock){    Debug unimplemented("CBaseFilter2_SetSyncSource", This);    return E_NOTIMPL;}/** * \brief IMediafilter::GetSyncSource (gets current reference clock) * * \param[in] This pointer to IBaseFilter interface * \param[out] pClock address of variable that receives pointer to clock's  *  IReferenceClock interface  * * \return S_OK success * \return E_POINTER Null pointer * */static long STDCALL CBaseFilter2_GetSyncSource(IBaseFilter* This,					       /* [out] */ IReferenceClock** pClock){    Debug unimplemented("CBaseFilter2_GetSyncSource", This);    return E_NOTIMPL;}/** * \brief IBaseFilter::EnumPins (enumerates the pins of this filter) * * \param[in] This pointer to IBaseFilter interface * \param[out] ppEnum address of variable that receives pointer to IEnumPins interface * * \return S_OK success * \return E_OUTOFMEMORY Insufficient memory * \return E_POINTER Null pointer * */static long STDCALL CBaseFilter2_EnumPins(IBaseFilter* This,					  /* [out] */ IEnumPins** ppEnum){    Debug printf("CBaseFilter2_EnumPins(%p) called\n", This);    *ppEnum = (IEnumPins*) CEnumPinsCreate(((CBaseFilter2*)This)->pin, 0);    return 0;}/** * \brief IBaseFilter::FindPin (retrieves the pin with specified id) * * \param[in] This pointer to IBaseFilter interface * \param[in] Id  constant wide string, containing pin id * \param[out] ppPin address of variable that receives pointer to pin's IPin interface * * \return S_OK success * \return E_POINTER Null pointer * \return VFW_E_NOT_FOUND Could not find a pin with specified id * * \note * Be sure to release the interface after use. * */static long STDCALL CBaseFilter2_FindPin(IBaseFilter* This,					 /* [string][in] */ const unsigned short* Id,					 /* [out] */ IPin** ppPin){    Debug unimplemented("CBaseFilter2_FindPin", This);    return E_NOTIMPL;}/** * \brief IBaseFilter::QueryFilterInfo (retrieves information aboud the filter) * * \param[in] This pointer to IBaseFilter interface * \param[out] pInfo pointer to FILTER_INFO structure * * \return S_OK success * \return E_POINTER Null pointer * * \note * If pGraph member of FILTER_INFO is not NULL, be sure to release IFilterGraph interface after use. * */static long STDCALL CBaseFilter2_QueryFilterInfo(IBaseFilter* This,						 // /* [out] */ FILTER_INFO *pInfo)						 void* pInfo){    Debug unimplemented("CBaseFilter2_QueryFilterInfo", This);    return E_NOTIMPL;}/** * \brief IBaseFilter::JoinFilterGraph (notifies the filter that it has joined of left filter graph) * * \param[in] This pointer to IBaseFilter interface * \param[in] pInfo pointer to graph's IFilterGraph interface or NULL if filter is leaving graph * \param[in] pName pointer to wide character string that specifies a name for the filter * * \return S_OK success * \return apropriate error code otherwise * * \remarks * Filter should not call to graph's AddRef method. * The IFilterGraph is guaranteed to be valid until graph manager calls this method again with  * the value NULL. * */static long STDCALL CBaseFilter2_JoinFilterGraph(IBaseFilter* This,						 /* [in] */ IFilterGraph* pGraph,						 /* [string][in] */						  const unsigned short* pName){    Debug unimplemented("CBaseFilter2_JoinFilterGraph", This);    return E_NOTIMPL;}/** * \brief IBaseFilter::QueryVendorInfo (retrieves a string containing vendor info) * * \param[in] This pointer to IBaseFilter interface * \param[out] address of variable that receives pointer to a string containing vendor info * * \return S_OK success * \return E_POINTER Null pointer * \return E_NOTIMPL Not implemented * * \remarks * Call to CoTaskMemFree to free memory allocated for string * */static long STDCALL CBaseFilter2_QueryVendorInfo(IBaseFilter* This,						 /* [string][out] */						 unsigned short** pVendorInfo){    Debug unimplemented("CBaseFilter2_QueryVendorInfo", This);    return E_NOTIMPL;}/** * \brief CBaseFilter2::GetPin (gets used pin) * * \param[in] This pointer to CBaseFilter2 object * * \return pointer to used pin's IPin interface * */static IPin* CBaseFilter2_GetPin(CBaseFilter2* This){    return This->pin;}/** * \brief CBaseFilter2 destructor * * \param[in] This pointer to CBaseFilter2 object * */static void CBaseFilter2_Destroy(CBaseFilter2* This){    Debug printf("CBaseFilter2_Destroy(%p) called\n", This);    if (This->pin)	This->pin->vt->Release((IUnknown*) This->pin);    if (This->vt)	free(This->vt);    free(This);}IMPLEMENT_IUNKNOWN(CBaseFilter2)static GUID CBaseFilter2_interf1 ={0x76c61a30, 0xebe1, 0x11cf, {0x89, 0xf9, 0x00, 0xa0, 0xc9, 0x03, 0x49, 0xcb}};/// IID_IAMNetShowPrerollstatic GUID CBaseFilter2_interf2 ={0xaae7e4e2, 0x6388, 0x11d1, {0x8d, 0x93, 0x00, 0x60, 0x97, 0xc9, 0xa2, 0xb2}};/// IID_IAMRebuildstatic GUID CBaseFilter2_interf3 ={0x02ef04dd, 0x7580, 0x11d1, {0xbe, 0xce, 0x00, 0xc0, 0x4f, 0xb6, 0xe9, 0x37}};/** * \brief CBaseFilter2 constructor * * \return pointer to CBaseFilter2 object or NULL if error occured * */CBaseFilter2* CBaseFilter2Create(){    CBaseFilter2* This = (CBaseFilter2*) malloc(sizeof(CBaseFilter2));    if (!This)	return NULL;    This->refcount = 1;    This->pin = (IPin*) CRemotePin2Create(This);    This->vt = (IBaseFilter_vt*) malloc(sizeof(IBaseFilter_vt));    if (!This->pin || !This->vt)    {	CBaseFilter2_Destroy(This);        return NULL;    }    memset(This->vt, 0, sizeof(IBaseFilter_vt));    This->vt->QueryInterface = CBaseFilter2_QueryInterface;    This->vt->AddRef = CBaseFilter2_AddRef;    This->vt->Release = CBaseFilter2_Release;    This->vt->GetClassID = CBaseFilter2_GetClassID;    This->vt->Stop = CBaseFilter2_Stop;    This->vt->Pause = CBaseFilter2_Pause;    This->vt->Run = CBaseFilter2_Run;    This->vt->GetState = CBaseFilter2_GetState;    This->vt->SetSyncSource = CBaseFilter2_SetSyncSource;    This->vt->GetSyncSource = CBaseFilter2_GetSyncSource;    This->vt->EnumPins = CBaseFilter2_EnumPins;    This->vt->FindPin = CBaseFilter2_FindPin;    This->vt->QueryFilterInfo = CBaseFilter2_QueryFilterInfo;    This->vt->JoinFilterGraph = CBaseFilter2_JoinFilterGraph;    This->vt->QueryVendorInfo = CBaseFilter2_QueryVendorInfo;    This->GetPin = CBaseFilter2_GetPin;    This->interfaces[0] = IID_IUnknown;    This->interfaces[1] = IID_IBaseFilter;    This->interfaces[2] = CBaseFilter2_interf1;    This->interfaces[3] = CBaseFilter2_interf2;    This->interfaces[4] = CBaseFilter2_interf3;    return This;}/************* * CRemotePin *************//** * \brief IPin::ConnectedTo (retrieves pointer to the connected pin, if such exist) * * \param[in]  This pointer to IPin interface * \param[out] pPin pointer to remote pin's IPin interface * * \return S_OK - success * \return E_POINTER - Null pointer * \return VFW_E_NOT_CONNECTED - pin is not connected * * \note * Caller must call Release on received IPin, when done */static long STDCALL CRemotePin_ConnectedTo(IPin* This, /* [out] */ IPin** pPin){    Debug printf("CRemotePin_ConnectedTo(%p) called\n", This);    if (!pPin)	return E_INVALIDARG;    *pPin = ((CRemotePin*)This)->remote_pin;    (*pPin)->vt->AddRef((IUnknown*)(*pPin));    return 0;}/** * \brief IPin::QueryDirection (retrieves pin direction) * * \param[in]  This    pointer to IPin interface * \param[out] pPinDir pointer to variable, that receives pin direction (PINDIR_INPUT,PINDIR_OUTPUT) * * \return S_OK - success * \return E_POINTER - Null pointer * */static long STDCALL CRemotePin_QueryDirection(IPin* This,					      /* [out] */ PIN_DIRECTION* pPinDir){    Debug printf("CRemotePin_QueryDirection(%p) called\n", This);    if (!pPinDir)	return E_INVALIDARG;    *pPinDir=PINDIR_INPUT;    return 0;}/** * \brief IPin::ConnectionMediaType (retrieves media type for connection, if such exist) * * \param[in]  This pointer to IPin interface * \param[out] pmt pointer to AM_MEDIA_TYPE,  that receives connection media type * * \return S_OK - success * \return E_POINTER - Null pointer * \return VFW_E_NOT_CONNECTED - pin is not connected * */static long STDCALL CRemotePin_ConnectionMediaType(IPin* This, /* [out] */ AM_MEDIA_TYPE* pmt){    Debug unimplemented("CRemotePin_ConnectionMediaType", This);    return E_NOTIMPL;}/** * \brief IPin::QueryPinInfo (retrieves information about the pin) * * \param[in]  This  pointer to IPin interface * \param[out] pInfo pointer to PIN_INFO structure, that receives pin info * * \return S_OK - success * \return E_POINTER - Null pointer * * \note * If pInfo->pFilter is not NULL, then caller must call Release on pInfo->pFilter when done * */static long STDCALL CRemotePin_QueryPinInfo(IPin* This, /* [out] */ PIN_INFO* pInfo){    CBaseFilter* lparent = ((CRemotePin*)This)->parent;    Debug printf("CRemotePin_QueryPinInfo(%p) called\n", This);    pInfo->dir= PINDIR_INPUT;    pInfo->pFilter = (IBaseFilter*) lparent;    lparent->vt->AddRef((IUnknown*)lparent);    pInfo->achName[0]=0;    return 0;}/** * \brief CRemotePin destructor * * \param[in] This pointer to CRemotePin object * */static void CRemotePin_Destroy(CRemotePin* This){    Debug printf("CRemotePin_Destroy(%p) called\n", This);    free(This->vt);    free(This);}IMPLEMENT_IUNKNOWN(CRemotePin)/** * \brief CRemotePin constructor * * \param[in] pt parent filter * \param[in] rpin remote pin * * \return pointer to CRemotePin or NULL if error occured * */CRemotePin* CRemotePinCreate(CBaseFilter* pt, IPin* rpin){    CRemotePin* This = (CRemotePin*) malloc(sizeof(CRemotePin));    if (!This)        return NULL;    Debug printf("CRemotePinCreate() called -> %p\n", This);    This->parent = pt;    This->remote_pin = rpin;    This->refcount = 1;    This->vt = (IPin_vt*) malloc(sizeof(IPin_vt));    if (!This->vt)    {	free(This);	return NULL;    }    memset(This->vt, 0, sizeof(IPin_vt));    This->vt->QueryInterface = CRemotePin_QueryInterface;    This->vt->AddRef = CRemotePin_AddRef;    This->vt->Release = CRemotePin_Release;    This->vt->QueryDirection = CRemotePin_QueryDirection;    This->vt->ConnectedTo = CRemotePin_ConnectedTo;    This->vt->ConnectionMediaType = CRemotePin_ConnectionMediaType;    This->vt->QueryPinInfo = CRemotePin_QueryPinInfo;    This->interfaces[0] = IID_IUnknown;    return This;}/************* * CRemotePin2 *************//** * \brief IPin::QueryPinInfo (retrieves information about the pin) * * \param[in]  This  pointer to IPin interface * \param[out] pInfo pointer to PIN_INFO structure, that receives pin info * * \return S_OK - success * \return E_POINTER - Null pointer * * \note * If pInfo->pFilter is not NULL, then caller must call Release on pInfo->pFilter when done * */static long STDCALL CRemotePin2_QueryPinInfo(IPin* This,					     /* [out] */ PIN_INFO* pInfo){    CBaseFilter2* lparent=((CRemotePin2*)This)->parent;    Debug printf("CRemotePin2_QueryPinInfo(%p) called\n", This);    pInfo->pFilter=(IBaseFilter*)lparent;    lparent->vt->AddRef((IUnknown*)lparent);    pInfo->dir=PINDIR_OUTPUT;    pInfo->achName[0]=0;    return 0;}/** * \brief CremotePin2 destructor * * \param This pointer to CRemotePin2 object * *  FIXME - not being released! */static void CRemotePin2_Destroy(CRemotePin2* This){    Debug printf("CRemotePin2_Destroy(%p) called\n", This);    free(This->vt);    free(This);}IMPLEMENT_IUNKNOWN(CRemotePin2)/** * \brief CRemotePin2 contructor * * \param[in] p pointer to parent CBaseFilter2 object * * \return pointer to CRemotePin2 object or NULL if error occured * */CRemotePin2* CRemotePin2Create(CBaseFilter2* p){    CRemotePin2* This = (CRemotePin2*) malloc(sizeof(CRemotePin2));    if (!This)        return NULL;    Debug printf("CRemotePin2Create() called -> %p\n", This);    This->parent = p;    This->refcount = 1;    This->vt = (IPin_vt*) malloc(sizeof(IPin_vt));    if (!This->vt)    {	free(This);        return NULL;    }    memset(This->vt, 0, sizeof(IPin_vt));    This->vt->QueryInterface = CRemotePin2_QueryInterface;    This->vt->AddRef = CRemotePin2_AddRef;    This->vt->Release = CRemotePin2_Release;    This->vt->QueryPinInfo = CRemotePin2_QueryPinInfo;    This->interfaces[0] = IID_IUnknown;    return This;}

⌨️ 快捷键说明

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