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


CBasePin kapcsolati folyamat

[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.]

Ez a szakasz azt ismerteti, hogyan valósítja meg a CBasePin osztály a pin-kód csatlakozási folyamatát.

A Filter Graph Manager minden pin-kapcsolatot kezdeményez. Meghívja a kimeneti pin-kód IPin::Connect metódust, megadva a bemeneti pin-kódot. A kimeneti pin a bemeneti pin IPin::ReceiveConnection metódus meghívásával fejezi be a kapcsolatot. A bemeneti pin-kód elfogadhatja vagy elutasíthatja a kapcsolatot.

A Filter Graph Manager egy médiatípust is megadhat a kapcsolathoz. Ha igen, a tűk megpróbálnak csatlakozni ehhez a típushoz. Ha nem, a tűknek egyeztetniük kell a típust. A Szűrődiagram-kezelő megadhat egy részleges médiatípust is, amely a főtípus, altípus vagy formátumtípus GUID_NULL értékét tartalmazza. Ebben az esetben a tűk megpróbálnak megegyezni a médiatípus bármelyik részének megadva; a GUID_NULL érték helyettesítő karakterként működik.

A CBasePin::Connect metódus azzal kezdődik, hogy a pin-kód képes-e fogadni egy kapcsolatot. Például ellenőrzi, hogy a pin még nincs-e csatlakoztatva. Delegálja a többi csatlakozási folyamatot a CBasePin::AgreeMediaType metódushoz. Az alábbi műveleteket AgreeMediaTypehajtja végre.

Ha az adathordozó típusa teljesen meg van adva, a pin-kód meghívja a CBasePin::AttemptConnection metódust a kapcsolat megkísérléséhez. Ellenkező esetben az alábbi sorrendben próbálja meg a médiatípusokat:

  1. A bemeneti pin-kód előnyben részesített típusai.
  2. A kimeneti pin-kód előnyben részesített típusai.

Ezt a sorrendet megfordíthatja úgy, hogy a CBasePin::m_bTryMyTypesFirst jelzőt igaz értékre állítja.

A pin-kód minden esetben meghívja IPin::EnumMediaTypes a médiatípusok számbavételéhez. Ez a metódus lekéri a CBasePin::TryMediaTypes metódusnak átadott enumerátorobjektumot. A TryMediaTypes metódus minden médiatípuson végighalad, és minden típushoz meghívja AttemptConnection.

A AttemptConnection metóduson belül a kimeneti pin a következő metódusokat hívja meg:

Vegye figyelembe a következőket:

  • CheckConnect egy virtuális módszer. Az alaposztályban ez a módszer ellenőrzi, hogy a rögzítési irányok kompatibilisek-e. A kimeneti csapoknak csatlakozniuk kell a bemeneti csapokhoz, és fordítva. A származtatott pin-kódosztály általában felülírja ezt a módszert más ellenőrzések végrehajtásához. Lekérdezheti például a másik pin-kódot a kapcsolathoz szükséges interfészhez. Ha a származtatott osztály felülbírálja CheckConnect, akkor a CBasePin metódust is meg kell hívnia.
  • CheckMediaType egy tiszta virtuális módszer, amelyet a származtatott osztálynak implementálnia kell.
  • CompleteConnect egy olyan virtuális módszer, amely semmit sem tesz az alaposztályban. A származtatott osztályok felülbírálhatják ezt a metódust a kapcsolat befejezéséhez szükséges további feladatok elvégzéséhez, például egy memóriaelosztó kiválasztásához.

Ha bármelyik lépés meghiúsul, a kimeneti pin meghívja a CBasePin::BreakConnect metódust, hogy visszavonja a CheckConnectáltal végrehajtott lépéseket.

A bemeneti pin-kód ReceiveConnection metódusa meghívja a bemeneti pin-kód CheckConnect, CheckMediaTypeés CompleteConnect metódusokat. Ha ezek közül bármelyik sikertelen, a kapcsolati kísérlet is meghiúsul.

Az alábbi ábrán CBasePinkapcsolati folyamata látható:

cbasepin kapcsolati folyamat

CBasePin