1

DirectShowフィルターグラフでColorConverterDMOを使用してUYVYからRGB32に変換しようとしていますが、入力ピンへの接続を許可するのは特に非協力的です。

たとえば、入力ピンのメディアタイプを列挙し、メディアタイプごとに、そのメディアタイプでピンのQueryAccept()を呼び出すと、S_FALSEが返されます。何が起きてる?フィルタを取得して、入力ピンをソースフィルタの出力ピンに接続できるようにするにはどうすればよいですか?

これは、フィルターの作成を示すサンプルコードであり、アドバタイズするメディアタイプのいずれかを受け入れたがらないことを示しています。このコード内では、QueryAccept呼び出しは常にS_FALSEを返します。

どんな助けでも大歓迎です、ありがとう!

// create filter and put it in the graph
CComPtr<IBaseFilter> colorConvert;
CComPtr<IPin> colorOut, colorIn;
CComPtr<IDMOWrapperFilter> colorConvertIface;

if(FAILED(hr = CoCreateInstance(CLSID_DMOWrapperFilter, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&colorConvert)))
    return hr;

if(FAILED(hr = colorConvert->QueryInterface(IID_IDMOWrapperFilter, (void **)&colorConvertIface)))
    return hr;

if(FAILED(hr = colorConvertIface->Init(CLSID_CColorConvertDMO, DMOCATEGORY_VIDEO_EFFECT)))
    return hr;

if(FAILED(hr = g_pGB->AddFilter(colorConvert, _T("Converter"))))
    return hr;

if(FAILED(hr = colorConvert->FindPin(L"in0",  &colorIn)))
    return hr;

if(FAILED(hr = colorConvert->FindPin(L"out0",  &colorOut)))
    return hr;

// try to get a little info about the frame input source's output pin offering...
CComPtr<IEnumMediaTypes> pMediaTypeEnum;
AM_MEDIA_TYPE *pMediaType;
hr = colorIn->EnumMediaTypes(&pMediaTypeEnum);
int cnt = 1;
while (pMediaTypeEnum->Next(1, &pMediaType, &fetched) == S_OK)
{
    TCHAR str[100];
    _stprintf(str, _T("Input Media Type [%d]:"), cnt++);
    DisplayType(str, pMediaType);

    hr = colorIn->QueryAccept(pMediaType);
    if (hr == S_FALSE)
    {
        //WHY?? You just told me you accepted this type!?!
    }

    DeleteMediaType(pMediaType);
}
pMediaTypeEnum.Release();
4

1 に答える 1

1

Color Converter DMO/DSPは DirectShow コンポーネントではありません。これは Windows Media に属し、DMO Wrapper Filterを介して DirectShow パイプラインに (潜在的に) プラグインすることができますが、意図したシナリオではテストされていなかったのではないかと思います。

私は別の DMO のサンプル コードを持っており、DirectShow で一定の​​努力を払って動作します: DMO Wrapper Filter を介して、DirectShow で Vista Video Resizer DSP を使用します。私は過去に誰かがカラー コンバーター DMO を同様の方法で実行できたという記事を読んだような印象を受けました。その場合、コード スニペットが役立つかもしれません。

于 2012-10-24T05:53:59.133 に答える