Filtr obálky DMO
[Funkce přidružená k této stránce DirectShow je starší funkce. Byla nahrazena MediaPlayer, MMFMediaEnginea Audio/Video Capture v Media Foundation. Tyto funkce jsou optimalizované pro Windows 10 a Windows 11. Microsoft důrazně doporučuje, aby nový kód používal MediaPlayer, MMFMediaEngine a Audio/Video Capture v Media Foundation místo DirectShow, pokud je to možné. Microsoft navrhuje, aby se stávající kód, který používá starší rozhraní API, přepsal, aby se nová rozhraní API používala, pokud je to možné.]
Filtr DMO Wrapper umožňuje aplikaci DirectShow použít objektu DirectX Media Object (DMO) v grafu filtru. Filtr zabalí objekt DMO a zpracuje všechny podrobnosti o použití objektu DMO, jako je předávání dat do a z DMO. Filtr také agreguje objekt DMO, aby aplikace mohla dotazovat filtr na všechna rozhraní modelu COM, která DMO zveřejňuje.
Označit | Hodnota |
---|---|
Rozhraní filtru | IBaseFilter, IDMOWrapperFilter, IPersistStream |
Typy médií připnutí vstupu | Viz poznámky |
Rozhraní vstupního pinu | IMemInputPin, IPin, IQualityControl |
Typy médií připnutí výstupu | Viz poznámky |
Rozhraní výstupního připínáčku | IAMStreamConfig, IAMVideoCompression, IMediaPosition, IMediaSeeking, IPin, IQualityControl |
Filtr CLSID | CLSID_DMOWrapperFilter |
CLSID stránky vlastností | Žádná stránka vlastností |
Spustitelný | Qasf.dll |
Merit | Viz poznámky |
kategorie filtru | Viz poznámky |
Poznámky
Omezení
Obálka DMO má následující omezení:
- Nepodporuje DMO s nulovými vstupy, více vstupy nebo nulovými výstupy. (Podporuje DMO s jedním vstupem a více výstupy.)
- Nepodporuje vlastní přenosy. Veškerý přenos dat se provádí prostřednictvím rozhraní IMemInputPin.
- Nepoužívá rozhraní IMediaObjectInPlace; Veškeré zpracování se provádí pomocí metod IMediaObject.
Špendlíky
Pro každý vstupní datový proud na DMO vytvoří filtr odpovídající vstupní pin. Pro každý výstupní datový proud vytvoří odpovídající výstupní špendlík. Typy médií, které každý kolík podporuje, závisí na DMO.
Rozhraní kodéru
Pokud je DMO kodér videa nebo kodér zvuku, výstupní pin zpřístupní IAMStreamConfig rozhraní. Pokud je DMO kodér videa, výstupní kolík také zveřejňuje IAMVideoCompression rozhraní. V obou případech, pokud DMO podporuje rozhraní, pin delegáty na DMO. Jinak pin poskytuje vlastní implementaci.
Proudem
Filtr používá rozhraní IMemInputPin ke zpracování veškerého streamování. Nepodporuje připojení IAsyncReader. Filtr volá IMediaObject::P rocessOutput na objektu DMO pouze tehdy, když přijímá data z upstreamu (včetně oznámení na konci streamu). Proto nepodporuje DMO s nulovými vstupními datovými proudy.
Hledající
Všechny žádosti o hledání se předávají do upstreamového filtru prostřednictvím prvního vstupního špendlíku obálky DMO. U zobrazení dynamické správy s více výstupy to znamená, že upstreamový filtr může přijímat více žádostí o hledání, když aplikace hledá graf.
Zásluha
DirectShow přiřadí všechny objekty dynamické správy výchozí hodnotu MERIT_NORMAL + 0x800. Tato hodnota spadá mezi MERIT_NORMAL a MERIT_PREFERRED. Dekodérové filtry obecně mají hodnotu MERIT_NORMAL. Proto správce grafu filtru obvykle vybere dekodér DMO přes dekodérový filtr. Chcete-li přepsat výchozí hodnotu výhody, přidejte položku registru do klíče registru DMO v HKEY_CLASSES_ROOT\CLSID. Zahrňte hodnotu DWORD s názvem "Merit", jejíž hodnota určuje hodnotu.
Kategorie
Filtr obálky DMO se nezobrazuje samostatně v žádné kategorii. Když zabalí DMO, zobrazí se v kategorii DirectShow, která odpovídá kategorii DMO pod názvem DMO.
Vyrovnávací paměti
Filtr DMO Wrapper předává vyrovnávací paměti médií do objektu DMO, který zveřejňuje IMediaBuffer rozhraní.
V systému Windows Vista nebo novějších zpřístupňují vyrovnávací paměti médií také rozhraní IServiceProvider. DMO může toto rozhraní použít k získání ukazatele na ukázku média, která je přidružena k vyrovnávací paměti. Použijte identifikátor služby IID_IMediaSample. Video DMO může použít ukázku médií IMediaSample2 rozhraní k nastavení prokládání příznaků v ukázce. Následující kód ukazuje, jak získat ukazatel na ukázku média:
IServiceProvider *pSp = NULL;
IMediaSample2 *pSample2 = NULL;
HRESULT hr = S_OK;
hr = pBuffer->QueryInterface(IID_IServiceProvider, (void**)&pSp);
if (SUCCEEDED(hr))
{
hr = pSp->QueryService(
IID_IMediaSample, // Service identifier.
IID_IMediaSample2, // Interface identifier.
(void**)&pSample2
);
if (SUCCEEDED(hr))
{
// Set flags (not shown).
pSample2->Release();
}
pSp->Release();
}
Další informace o příznakech pro jednotlivé vzorky prokládání najdete v tématu AM_SAMPLE2_PROPERTIES Struktura.
Kontrola kvality
Pokud DMO zveřejňuje IDMOQualityControl rozhraní, filtr přeloží IQualityControl::Notify volání výstupu do IDMOQualityControl::SetNow volání DMO. Parametr rtNowSetNow se vypočítá jako součet TimeStamp a late struktury Quality.
Použití fiteru v GraphEditu
V GraphEdit se filtr obálky DMO nezobrazuje pod vlastním názvem. Místo toho je každý registrovaný DMO uvedený v příslušné kategorii filtru. Když přidáte DMO prostřednictvím dialogového okna Vložit filtry, GraphEdit vytvoří filtr DMO Wrapper a nakonfiguruje ho tak, aby používal tento DMO.
Související témata