directshow应用开发的常用操作函数
来源:互联网 发布:广州零点 数据分析 编辑:程序博客网 时间:2024/06/15 18:20
获得一个filter的上游或者下游的filter:
static HRESULT GetNextFilter(IBaseFilter *pFilter,PIN_DIRECTION Dir,IBaseFilter **ppNext){if(!pFilter||!ppNext)return E_POINTER;IEnumPins *pEnum=0;IPin *pPin=0;HRESULT hr=pFilter->EnumPins(&pEnum);if(FAILED(hr))return hr;while(S_OK==pEnum->Next(1,&pPin,0)){PIN_DIRECTION ThisPinDir;hr=pPin->QueryDirection(&ThisPinDir);if(FAILED(hr)){hr=E_UNEXPECTED;//pPin->Release();SAFE_RELEASE(pPin);break;}if(ThisPinDir==Dir){IPin *pPinNext=0;hr=pPin->ConnectedTo(&pPinNext);if(SUCCEEDED(hr)){PIN_INFO PinInfo;hr=pPinNext->QueryPinInfo(&PinInfo);pPinNext->Release();pEnum->Release();if(FAILED(hr)||(PinInfo.pFilter==NULL)){return E_UNEXPECTED;}*ppNext=PinInfo.pFilter;return S_OK;}}pPin->Release();}pEnum->Release();return E_FAIL;}
枚举一个graph图中的所有filter:
static HRESULT EnumFilters(IFilterGraph *pGraph){//枚举Filter Graph 中的所有FilterIEnumFilters *pEnum=NULL;HRESULT hr=pGraph->EnumFilters(&pEnum);if(SUCCEEDED(hr)){IBaseFilter* pFilter=NULL;FILTER_INFO Filter_Info;CLSID m_clsd;while(S_OK==pEnum->Next(1, &pFilter,NULL)){//pGraph->RemoveFilter(pFilter);//删除Filter//pEnum->Reset(); //复位枚举器内部状态pFilter->QueryFilterInfo(&Filter_Info);pFilter->GetClassID(&m_clsd);//pFilter->Release();SAFE_RELEASE(pFilter);}//pEnum->Release();SAFE_RELEASE(pEnum);}return hr;}
在graphedit中动态显示应用程序中建的graph:
static HRESULT AddToRot(IUnknown *pUnkGraph, DWORD *pdwRegister){IMoniker * pMoniker;IRunningObjectTable *pROT;if (FAILED(GetRunningObjectTable(0, &pROT))) {return E_FAIL;}WCHAR wsz[256];wsprintfW(wsz, L"FilterGraph %08p pid %08x", (DWORD_PTR)pUnkGraph, GetCurrentProcessId());HRESULT hr = CreateItemMoniker(L"!", wsz, &pMoniker);if (SUCCEEDED(hr)) {hr = pROT->Register(0, pUnkGraph, pMoniker, pdwRegister);//pMoniker->Release();SAFE_RELEASE(pMoniker);}//pROT->Release();SAFE_RELEASE(pROT);return hr;}static void AddToObjectTable(IUnknown *pUnkGraph, DWORD *pdwRegister){IMoniker * pMoniker = 0;IRunningObjectTable * objectTable = 0;if (SUCCEEDED(GetRunningObjectTable(0, &objectTable))) {WCHAR wsz[256];wsprintfW(wsz, L"FilterGraph %08p pid %08x", (DWORD_PTR)pUnkGraph, GetCurrentProcessId());HRESULT hr = CreateItemMoniker(L"!", wsz, &pMoniker);if (SUCCEEDED(hr)) {hr = objectTable->Register(0, pUnkGraph, pMoniker, pdwRegister);//pMoniker->Release();SAFE_RELEASE(pMoniker);}//objectTable->Release();SAFE_RELEASE(objectTable);}}
保存你所创建的graph:
static HRESULT SaveGraphFile(IGraphBuilder *pGraph, WCHAR *wszPath) {const WCHAR wszStreamName[] = L"ActiveMovieGraph"; HRESULT hr;IStorage *pStorage = NULL;hr = StgCreateDocfile(wszPath,STGM_CREATE | STGM_TRANSACTED | STGM_READWRITE | STGM_SHARE_EXCLUSIVE,0, &pStorage);if(FAILED(hr)) {return hr;}IStream *pStream;hr = pStorage->CreateStream(wszStreamName,STGM_WRITE | STGM_CREATE | STGM_SHARE_EXCLUSIVE,0, 0, &pStream);if (FAILED(hr)) {SAFE_RELEASE(pStorage); return hr;}IPersistStream *pPersist = NULL;pGraph->QueryInterface(IID_IPersistStream, (void**)&pPersist);hr = pPersist->Save(pStream, TRUE);SAFE_RELEASE(pStream);SAFE_RELEASE(pPersist);if (SUCCEEDED(hr)) {hr = pStorage->Commit(STGC_DEFAULT);}SAFE_RELEASE(pStorage);return hr;}
- directshow应用开发的常用操作函数
- DirectShow应用开发一般步骤
- oracle常用表操作:集合操作符以及简单函数的应用
- Directshow在视频会议系统开发中的应用
- 驱动开发 常用字符串操作函数
- 常用的内存操作函数
- 常用的数据操作函数
- 常用的字符串操作函数
- 常用的内存操作函数
- 常用的操作路径函数
- Hive的常用函数操作
- directshow的开发环境配置
- DirectShow开发视频的几个问题
- Directshow开发的基本技巧
- Directshow开发的基本技巧
- 关于directshow的开发常见问题
- 关于directshow的开发常见问题
- 关于directshow的开发常见问题
- OpenNI不用标定获取人体骨架
- Lighttpd与PHP
- 流水的启示
- 自定义进程条
- Extjs4 颜色选择器 ColorField
- directshow应用开发的常用操作函数
- 利用javascript写的32位MD5加密算法
- POI操作Excel文档-基础篇
- ActiveSupport源代码研究之 ActiveSupport::Concern
- 网页oject播放器
- jquery 插件之 floattextbox 修改版
- 串口通讯奇偶校验位的设置导致数据错误
- 3张表关联
- .NET程序员,你属于哪个级别