Megosztás a következőn keresztül:


Intelligent Connect

[A laphoz társított funkció, DirectShowegy régi funkció. MediaPlayer, IMFMediaEngineés Audio/Video Capture a Media Foundation. Ezek a funkciók Windows 10-hez és Windows 11-hez lettek optimalizálva. A Microsoft határozottan javasolja, hogy az új kód MediaPlayer, IMFMediaEngine és Audio/Video Capture eszközt használja a Media FoundationDirectShowhelyett, ha lehetséges. A Microsoft javasolja, hogy az örökölt API-kat használó meglévő kódot át kell írni az új API-k használatára, ha lehetséges.]

Az Intelligent Connect az a mechanizmus, amelyet a Filter Graph Manager használ a szűrődiagramok létrehozásához. Több kapcsolódó algoritmusból áll, amelyek szűrőket választanak ki, és hozzáadják őket a szűrőgráfhoz.

Olvassa el ezt a témakört, ha problémába ütközik egy adott szűrődiagram létrehozásakor, és szeretné elhárítani a problémát, vagy ha saját szűrőt ír, és elérhetővé szeretné tenni az automatikus gráfkészítéshez.

Az Intelligent Connect az alábbi IGraphBuilder metódusokat foglalja magában:

IGraphBuilder::AddSourceFilter

Az IGraphBuilder::AddSourceFilter metódus hozzáad egy forrásszűrőt, amely képes megjeleníteni egy megadott fájlt. Először a beállításjegyzékben néz ki, és megfelel a protokollnak (például https://), a fájlnévkiterjesztésnek, vagy egy előre meghatározott ellenőrző bájtok, amelyek bizonyos mintáknak megfelelő bájtok a fájlban. További információ: Egyéni fájltípus regisztrálása. Feltételezve, hogy a metódus megkeresi a megfelelő forrásszűrőt, létrehozza a szűrő egy példányát, hozzáadja a gráfhoz, és meghívja a szűrő IFileSourceFilter::Load metódust a fájlnévvel.

IGraphBuilder::Render

Az IGraphBuilder::Render metódus egy gráf alszakaszát hozza létre. Egy nem összekapcsolt kimeneti pin-kódból indul ki, és az alsóbb rétegben működik, és szükség szerint új szűrőket ad hozzá. A kezdő szűrőnek már a gráfban kell lennie. A Render metódus minden lépésben keres egy szűrőt, amely képes csatlakozni az előző szűrőhöz. A stream elágazhat, ha egy csatlakozó szűrő több kimeneti tűvel rendelkezik. A keresés leáll, ha minden stream rendelkezik renderelővel. Ha a Render metódus elakad, előfordulhat, hogy biztonsági másolatot készít, és újra próbálkozik egy másik szűrőkészlettel.

Az egyes kimeneti tűk csatlakoztatásához a Render metódus a következőket teszi:

  1. Ha a tű támogatja az IStreamBuilder felületet, a Filter Graph Manager delegálja a teljes folyamatot a tű IStreamBuilder::Render metódusra. Az interfész felfedésével a csap felelősséget vállal a gráf fennmaradó részének elkészítéséért, egészen a renderelőig. Azonban nagyon kevés tű támogatja ezt a felületet.

  2. A Filter Graph Manager a memóriában gyorsítótárazott szűrőket próbál használni, ha vannak ilyenek. Az Intelligent Connect folyamat során a Filter Graph Manager gyorsítótárazhatja a folyamat korábbi lépéseinek szűrőit. (Lásd még: Dynamic Graph Building.)

  3. Ha a szűrőgráf nem összekapcsolt bemeneti csapokkal rendelkező szűrőket tartalmaz, a Filter Graph Manager a következő lépésként próbálkozik velük. Kényszerítheti a Render metódust, hogy kipróbáljon egy adott szűrőt úgy, hogy hozzáadja a szűrőt a gráfhoz, mielőtt meghívná Render.

  4. A Windows 7-től kezdve a DirectShow tartalmaz egy listát bizonyos média-altípusok előnyben részesített szűrőiről. Ha a renderelt médiatípushoz van előnyben részesített szűrő, a Filter Graph Manager ezt a szűrőt próbálja meg legközelebb. Az alkalmazások az IAMPluginControl felülettel módosíthatják az előnyben részesített szűrők listáját. A lista módosításai hatással vannak az alkalmazás aktuális folyamatára, és a folyamat befejezése után elvesznek.

  5. Végül, ha nem található megfelelő szűrő, a Filter Graph Manager az IFilterMapper2::EnumMatchingFilters metódussal keres a beállításjegyzékben. Megpróbálja egyezni a kimeneti pin által előnyben részesített médiatípusokkal a beállításjegyzékben felsorolt médiatípusokkal.

    Minden szűrő regisztrálva van egy érdemi, egy numerikus érték, amely jelzi, hogy a szűrő milyen előnyösebb a többi szűrőhöz képest. Az EnumMatchingFilters metódus a szűrőket érdemi sorrendben adja vissza, amelynek minimális értéke MERIT_DO_NOT_USE + 1. Figyelmen kívül hagyja a MERIT_DO_NOT_USE vagy annál kisebb méretű szűrőket. A szűrők a GUID által meghatározott kategóriákba is vannak csoportosítva. Maguk a kategóriák rendelkeznek érdemekkel, és az EnumMatchingFilters metódus figyelmen kívül hagy minden olyan kategóriát, amely MERIT_DO_NOT_USE vagy annál kisebb értékű, még akkor is, ha a kategória szűrői magasabb érdemértékekkel rendelkeznek.

    A Windows 7-től kezdve a DirectShow bizonyos média-altípusok letiltott szűrőinek listáját tartalmazza. A Filter Graph Manager kihagyja a szűrőket ezen a listán. Az alkalmazások az IAMPluginControl felületen módosíthatják a letiltott szűrők listáját. A lista módosításai hatással vannak az alkalmazás aktuális folyamatára, és a folyamat befejezése után elvetik őket.

Összegzésként a Render metódus a szűrőket az alábbi sorrendben próbálja meg:

  1. IStreamBuilderhasználata.
  2. Próbálja ki a gyorsítótárazott szűrőket.
  3. Próbálja ki a szűrőket a gráfban.
  4. Windows 7 vagy újabb: Ha van ilyen, próbálja ki a médiatípus előnyben részesített szűrőt.
  5. Szűrők keresése a beállításjegyzékben.

IGraphBuilder::RenderFile

A IGraphBuilder::RenderFile metódus egy alapértelmezett lejátszási gráfot hoz létre egy fájlnévből. Ez a módszer belsőleg AddSourceFilter használatával keresi meg a megfelelő forrásszűrőt, és Render a gráf többi részének létrehozásához.

IGraphBuilder::Connect

Az IGraphBuilder::Connect metódus egy kimeneti pin-et csatlakoztat egy bemeneti tűhöz. Ez a módszer szükség esetén köztes szűrőket ad hozzá a Render metódushoz leírt algoritmus egyik változatával:

  1. Próbáljon meg közvetlen kapcsolatot létesíteni a szűrők között köztes szűrők nélkül.
  2. Próbálja ki a gyorsítótárazott szűrőket.
  3. Próbálja ki a szűrőket a gráfban.
  4. Windows 7 vagy újabb: Ha van ilyen, próbálja ki a médiatípus előnyben részesített szűrőt.
  5. Szűrők keresése a beállításjegyzékben.

szűrőkategóriák

Merit

Graph Building szimulálása a GraphEdit

Filter Graph létrehozása