ピンを列挙してみる
#include <dshow.h> IPin *GetPin(IBaseFilter *pFilter, PIN_DIRECTION PinDir); void main(void) { IGraphBuilder *pGraph = NULL; IMediaControl *pControl = NULL; // COM ライブラリを初期化する。 HRESULT hr = CoInitialize(NULL); if (FAILED(hr)) { printf("ERROR - Could not initialize COM library"); return; } // フィルタ グラフ マネージャを作成し、インターフェイスを問い合わせる。 hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph); if (FAILED(hr)) { printf("ERROR - Could not create the Filter Graph Manager."); return; } hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl); // グラフを作成する。 重要 : この文字列をシステム上のファイルに置き換える。 hr = pGraph->RenderFile(L"G:\\sampleMovie\\cap.avi", NULL); //ピンの列挙 IFilterGraph* pFGraph; hr = pGraph->QueryInterface(IID_IFilterGraph, (void**)&pFGraph); IEnumFilters *pEnum = NULL; IBaseFilter *pFilter; ULONG cFetched; hr = pGraph->EnumFilters(&pEnum); if (FAILED(hr)) return; //フィルタの列挙 while(pEnum->Next(1, &pFilter, &cFetched) == S_OK) { IPin *pPin = NULL; printf("フィルターが見つかった\n"); //ピンを探しに行く pPin = GetPin(pFilter, PINDIR_INPUT); // 見つかったピンを何かに使用 if (pPin) { pPin->Release(); } pFilter->Release(); } hr = pControl->Run(); MessageBox(0,0,0,0); pControl->Release(); pGraph->Release(); CoUninitialize(); } IPin *GetPin(IBaseFilter *pFilter, PIN_DIRECTION PinDir){ printf("pinを探す場所\n"); BOOL bFound = FALSE; IEnumPins *pEnum; IPin *pPin; HRESULT hr = pFilter->EnumPins(&pEnum); if (FAILED(hr)) { return NULL; } while(pEnum->Next(1, &pPin, 0) == S_OK) { // ピンが列挙される printf("pinの列挙--"); PIN_DIRECTION PinDirThis; hr = pPin->QueryDirection(&PinDirThis); if ((hr == S_OK)&&(PinDirThis == PINDIR_INPUT)) { printf("入力ピン\n"); } if ((hr == S_OK)&&(PinDirThis == PINDIR_OUTPUT)) { printf("出力ピン\n");// } } return 0; }
0 件のコメント:
コメントを投稿