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


Eszköz MFT tervezési útmutatója

A windowsos videorögzítési verem támogatja a felhasználói módú bővítményt DMFT formájában. Ez egy eszközhöz tartozó bővítményösszetevő, amelyet az IHV-k biztosítanak, és amelyet a rögzítési folyamat az első átalakításként használ fel, közvetlenül a rögzítés után. A DMFT az eszköz által utófeldolgozott kereteket kapja meg. A kereteken végzett további utófeldolgozási műveletek a DMFT-ben is elvégezhetők. A DMFT az eszköz összes streaméből fogadhat kereteket, és a követelménynek megfelelően bármilyen számú kimeneti streamet elérhetővé tehet.

Ez a cikk egy felhasználói módban futó eszközszintű bővítmény kialakítását ismerteti, amely az összes stream utófeldolgozására használható.

Terminológia

Időszak Leírás
KS Kernel folyamat-illesztőprogram
AVStream Audio Video Streaming illesztőprogram-modell
Szűrő Eszközpéldányt jelképező objektum
Eszköz MFT Az IHV-k által biztosított felhasználói módú rögzítési illesztőbővítmény
Devproxy MF <–> AVStream marshaler
DTM A devproxyt és az eszköz MFT-jét kezelő Eszközátalakítás-kezelő. Az eszközt jelenti az MF-folyamatban.

Tervezési célok

  • Eszközszűrés-szintű felhasználói módú bővítmény, amelynek élettartama megegyezik az eszközszűrő élettartamával

  • Támogatja az eszközről érkező bármilyen számú bemenetet

  • Tetszőleges számú kimenetet támogat (az aktuális követelmény három stream: előnézet, rekord és fénykép)

  • Az összes eszközvezérlőt átirányítja az Eszköz MFT-hez (amely opcionálisan kezeli vagy továbbítja azt az eszköznek)

  • Rögzített stream párhuzamos utófeldolgozása

  • A 3A-feldolgozás engedélyezése a keretsebességétől függetlenül

  • Az egyik stream metaadatainak megosztása más streamek között

  • Hozzáférés GPU-erőforrásokhoz

  • Hozzáférés az MF MMCSS munkaütemezési soraihoz

  • Hozzáférés az MF-kiosztóhoz

  • Egyszerű felület (hasonló az MFT-hez)

  • Rugalmas belső architektúra az IHV/OEM bővíthetőségéhez

Tervezési korlátozások

  • Nincs változás a Capture API felületén

  • Teljes visszamenőleges kompatibilitás. Például nincsenek regressziók az örökölt alkalmazásokkal és forgatókönyvekkel való munka során.

Veremarchitektúra rögzítése

Ez a cikk a rögzítési illesztő szűrőszintű felhasználói módú bővítményének támogatását ismerteti. Ez az összetevő hozzáféréssel rendelkezik az MF API-khoz, a szálkészletekhez, a GPU-khoz és az internetszolgáltatói erőforrásokhoz. A szűrőkiterjesztés rugalmasságot biztosít, hogy bármilyen számú adatfolyam lehessen közte és a Ks eszköz szűrője között. Ez a rugalmasság zökkenőmentes sávon kívüli kommunikációt tesz lehetővé a felhasználói módú bővítmény és az illesztőprogram között, amely dedikált metaadatokhoz és 3A feldolgozási streamekhez használható.

veremarchitektúra rögzítése.

Az eszköz mft architektúrája.

Eszközátalakítás-kezelő (DTM)

A rögzítési verem bevezet egy új, a rendszer által biztosított összetevőt, a Device Transform Managert (DTM). Ez a DeviceSource-on belül található, és kezeli a Devproxy MFT-t és a Device MFT-t. A DTM elvégzi a MediaType-egyeztetést, a mintapropagálást és az összes MFT-eseménykezelést. Emellett elérhetővé teszi az IMFTransform felületet a DeviceSource-nak, valamint az egyéb szükséges privát interfészeket, amelyeknek a DeviceSource-nak szüksége van az eszközstreamek kezelésére. Ez az összetevő elvonja a Devproxyt és az Eszköz MFT-t a folyamatból. A folyamat a DTM-et csak eszközként látja, és a DTM-ből érkező streameket pedig eszközstreamekként.

Devproxy

A Devproxy egy aszinkron MFT, amely az AVStream kameraillesztő és a Media Foundation közötti parancsokat és videoképeket irányítja. Ezt a Windows biztosítja, és támogatja a kameraillesztő n számú kimenetét. Emellett ez birtokolja az eszköz által közzétett összes csapok kiosztóit.

Eszköz MFT

Az eszköz MFT egy felhasználói módú bővítmény a rögzítési illesztőprogramhoz. Ez egy m x n async MFT. A rögzítési illesztőprogrammal együtt telepítve van a rendszeren, és a rögzítési illesztőprogram szállítója biztosítja.

Az eszköz MFT bemeneti adatfolyamainak számának meg kell egyeznie az eszköz által közzétett Ks pin-eknek számával. Az eszköz MFT bemeneti adatfolyamai által támogatott mediatípusoknak meg kell egyeznie a KS-tűk által közzétett mediatípusokkal.

Az eszköz MFT által közzétett kimeneti streamek azok a streamek, amelyeket a DeviceSource és a rögzítési verem, valamint a rögzítési API és az alkalmazások láthatnak, és ezek lehetnek egy, két vagy három stream. Az eszköz MFT bemeneti és kimeneti streamszámának nem kell megegyeznie. Emellett a bemeneti és kimeneti streameknek nem kell azonos médiatípusokkal rendelkezniük, és általában különböző mediatípusokkal rendelkeznek. A mediatípusok számának sem kell egyeznie.

A Devproxy kimeneti adatfolyama által felhasználói módban képviselt első Ks Pin az Device MFT első bemeneti adatfolyamához társul, a második Ks Pin pedig a Devproxy kimeneti adatfolyamán keresztül a Device MFT második bemeneti adatfolyamához, és így tovább.

Az eszköz MFT-je mutatót kap a Devproxyra, a DX-eszközre és az MF WorkQueue-azonosítóra. Az eszközről érkező kereteket közvetlenül a hozzá tartozó eszköz MFT bemenetébe továbbítjuk MF mintákként. Ezekkel együtt az eszköz MFT képes utófeldolgozni a rögzített mintákat, és mintákat biztosíthat az előnézethez, a rögzítéshez és a fénykép csatlakozási pontokhoz.

Az eszközre vonatkozó összes parancs és vezérlő át lesz irányítva az eszköz MFT-re. Az eszköz MFT kezeli a vezérlőket, vagy átadja őket az illesztőprogramnak a Devproxyn keresztül. Ez leegyszerűsíti a parancsok kezelését a rögzítési illesztőprogram-veremen.

Funkcionális áttekintés

A rögzítési folyamat inicializálásakor, ha van az eszközhöz tartozó Device MFT, a DeviceSource példányosítja a DTM-et. Átadja a Devproxy egy példányát, amely az eszközt jelöli a DTM inicializálási rutinjának. A DTM összefogja az Eszköz MFT-t, és alapvető ellenőrzéseket végez, például ellenőrzi, hogy a Devproxy kimeneti tűinek száma megegyezik-e az eszköz MFT bemeneti csapjainak számával, a kötelező interfészek támogatásával stb.

A DeviceSource lekérdezi a DTM-et a támogatott kimeneti mediatípusok lekéréséhez. A DTM ezt az eszköz MFT kimeneti csatlakozóiból szerzi be. A DeviceSource ezen információk alapján teszi elérhetővé a bemutatóleírót és a streamleírót a rögzítési folyamat számára.

A SourceReader a DeviceSource közzétett mediatípusait használja, és beállítja az alapértelmezett mediatype-okat az egyes streameken. A DeviceSource viszont beállítja az alapértelmezett mediatype-okat a DTM kimeneti adatfolyamaihoz. A DTM a SetOutputStreamState metódussal beállítja az eszköz MFT kimeneti adatfolyamának mediatípusát.

A SetOutputStreamState meghívásakor az eszköz MFT üzenetet küld a DTM-nek, hogy módosítsa a bemeneti stream mediatípusát a kiválasztott kimeneti mediatípus alapján, majd várakozik. Erre az üzenetre válaszul a DTM lekérdezi az eszköz MFT bemeneti adatfolyamának előnyben részesített bemeneti mediatípusát a GetPreferredInputStreamState használatával. Ezzel beállítja a mediatípust a Devproxy megfelelő kimeneti adatfolyamán. Ha ez sikerül, akkor a DTM a SetInputStreamState használatával beállítja ugyanezt a mediatípust az eszköz MFT bemeneti adatfolyamára. A hívás fogadása után az eszköz MFT befejezi a SetOutputStreamState-t.

A CaptureEngine kiválasztja az egyes streameket a DeviceSource adott streamjeinek engedélyezésével. Ezt a DTM egy SetOutputStreamState-hívással propagálja az eszköz MFT-hez. Az eszköz MFT az adott kimeneti streameket a kért állapotba helyezi. Ahogy fentebb említettük, az eszköz MFT értesíti a DTM-et azokról a bemeneti adatfolyamokról is, amelyeket engedélyezni kell. Ez azt eredményezi, hogy a DTM propagálja a streamkijelölést a Devproxynak. A folyamat végén a Devproxyban és az Eszköz MFT-ben minden szükséges stream készen áll a streamelésre.

A SourceReader elindítja a DeviceSource-t, amikor a CaptureEngine meghívja a ReadSample-et. A DeviceSource viszont a folyamat kezdetét jelző MFT_MESSAGE_NOTIFY_BEGIN_STREAMING és MFT_MESSAGE_NOTIFY_START_OF_STREAM üzenetek küldésével indítja el a DTM-et. A DTM a Devproxy-t és az Eszköz MFT-t elindítja az MFT_MESSAGE_NOTIFY_BEGIN_STREAMING és az MFT_MESSAGE_NOTIFY_START_OF_STREAM üzenetek propagálásával.

Megjegyzés:

Az eszköz MFT inicializálása helyett foglalja le a szükséges erőforrásokat a streamelés indításakor.

A DTM meghívja a SetOutputStreamState-t az eszköz MFT-kimenetén a streamelési állapot paraméterrel. Az eszköz MFT-je elindítja a streamelést ezekben a kimeneti streamekben. A DTM elindítja a streamelést az érvényes mediatype-készlettel rendelkező Devproxy kimeneti streameken. A Devproxy lefoglalja a mintákat, és lehívja őket az eszközről. Ezeket a mintákat a megfelelő bemeneti pin segítségével az eszköz MFT-jébe továbbítják. Az eszköz MFT feldolgozza ezeket a mintákat, és megadja a kimenetet a DeviceSource-nak. A DeviceSource-ból a minták a SourceReaderen keresztül a CaptureEngine-be haladnak.

A CaptureEngine leállítja az egyes streameket azáltal, hogy letiltja az egyes streameket egy belső felületen a DeviceSource-on. Ez az eszköz MFT-jén a SetOutputStreamState-en keresztüli adott kimeneti adatfolyam-letiltásra lesz lefordítva. Az eszköz MFT-je viszont kérheti bizonyos bemeneti streamek letiltását a METransformInputStreamStateChanged eseményen keresztül. A DTM ezt a megfelelő Devproxy-streamekre propagálja.

Mindaddig, amíg maga az eszköz MFT streamelési állapotban van, bármilyen bemeneti adatfolyamot kérhet az érvényes DeviceStreamState-ra való áttéréshez. Elküldheti például a DeviceStreamState_Stop, DeviceStreamState_Run vagy DeviceStreamState_Pause állapotba, és így tovább, anélkül, hogy más adatfolyamokat befolyásolna.

A kimeneti stream átmenetét azonban a rögzítési csővezeték vezérli. Az előnézeti, rekord- és fényképstreameket például a rögzítési folyamat engedélyezi vagy letiltja. Ha a kimenetek le vannak tiltva, a bemeneti streamek akkor is streamelhetők, ha az eszköz MFT-je streamelési állapotban van.

eszköz mft folyamatának előzetes sorrendje.

Az eszköz készítsen fényképsorozatot.

Az eszköz MFT élettartama

Az eszköz MFT-jének betöltése a KS-szűrő létrehozása után történik. A KS Filter bezárása előtt ki lesz ürítve.

Folyamat szempontjából, amikor a DeviceSource létre van hozva, létrejön az eszköz MFT, és amikor a DeviceSource le van állítva, az eszköz MFT szinkron módon leállításra kerül.

A leállítás támogatásához az eszköz MFT-jének támogatnia kell az IMFShutdown felületet. Az eszköz MFT-leállítás hívását követően bármely más, az eszköz MFT-t célzó interfész hívásnak MF_E_SHUTDOWN hibát kell visszaadnia.

Memória típusa

A képkockák rögzíthetők rendszermemória-pufferekbe vagy DX memóriapufferekbe a kameraillesztők beállításai szerint. Bármilyen puffer jön ki a kameravezérlőből, közvetlenül a Device MFT-be kerül további feldolgozásra.

A Devproxy a puffereket az illesztőprogram előnyben részesítése alapján foglalja le. Az eszköz MFT-jének az MF-allokáló API-kat kell használnia a kimeneti csatlakozókhoz szükséges minták allokálásához a nem helyalapú átalakításokhoz.

Médiatípus módosítása streamelés közben

A SourceReader ügyfelei natívan támogatott mediatípusként láthatják az eszköz MFT kimeneti streamjei által közzétett mediatípusokat. A natív mediatype módosításakor a SourceReader mediatype értesítési hívásokat küld az eszköz MFT-jére a DeviceSource-on keresztül. Az eszköz MFT feladata, hogy kitisztítsa a stream várólistájából az összes függő mintát, és időben áttérjen a stream új médiatípusára. Ha szükség van a bemeneti mediatípus módosítására, akkor az aktuális bemeneti mediatípust erre kell módosítania. A DTM az eszköz MFT bemeneti adatfolyamából szerzi be az aktuális mediatípust, és beállítja azt a Devproxy kimeneti adatfolyamaira és az eszköz MFT bemenetére minden natív mediatípus-módosítás után.

Bemeneti mediatype-változás az eszköz MFT-ben

Mivel ez egy m x n MFT, a kimeneti streamelési pin mediatípusai és állapotváltozásai hatással lehetnek a bemeneti streamelési pin mediatípusaira és állapotváltozásaira. Különösen akkor, ha a következő változások történnek:

  • Kimeneti médiatípus-módosítások

    • Amikor egy alkalmazás megváltoztatja a natív médiumtípust, a rögzítési veremen keresztül végighalad, és az Eszköz MFT-ben kimeneti pin médiumtípus-változásként jelenik meg.

    • Amikor a kimeneti mediatípus megváltozik, a bemeneti mediatípus módosítása aktiválható. Tegyük fel például, hogy az összes kimeneti tű 720p sebességgel streamel. Ez 720p-s streamelést eredményez a kamerából. Ezután tegyük fel, hogy a rekordstream a natív mediatípusát 1080p-ra módosítja. Ebben az esetben az adatokat a rekordstreambe beolvasó eszköz MFT bemeneti adatfolyamainak egyikének módosítania kell a médiatípusát.

  • A kimeneti csatlakozó le van tiltva

    • Ha egy alkalmazás letiltja az eszköz MFT-kimeneteinek egyikét, ha ugyanazt a bemenetet több kimenet is megosztja, az optimalizáláshoz előfordulhat, hogy a bemenetnek módosítania kell a mediatípust. Ha például egy 1080p kimeneti stream leáll, és az összes többi stream, amely egy bemenetet oszt meg, 720p-n streamel, akkor a bemeneti streamnek 720p-ra kell módosítania a médiatípusát, hogy energiát takarítson meg és javítsa a teljesítményt.

A DTM a METransformInputStreamStateChanged értesítéseket kezeli az eszköz MFT-ből, hogy ezen feltételek mellett módosítsa az eszköz MFT-bemenetének és Devproxy-kimenetének mediatípusát és állapotát.

Az eszköz MFT preferált kimeneti mediatípusai

Azt javasoljuk, hogy az Eszköz MFT NV12 formátummal készítsen kimeneti adathordozó-típusokat. YUY2 a következő legjobb alternatíva. Az MJPEG- és RGB-médiatípusok használata nem ajánlott.

Eszköz MFT-jének törlése

Az eszköz MFT kezelése során kétféle öblítésre van szükség:

  • Globális öblítés

    • MFT-eszköz szintű öblítés. Ez általában akkor fordul elő, ha a DTM leállítási streamelési üzenetet készül küldeni az eszköz MFT-jének.

    • Az MFT eszköznek várhatóan el kell vetnie minden mintát a bemeneti és kimeneti sorokból, és szinkron módon kell visszatérnie.

    • Az eszköz MFT-jének nem szabad új bemenetet kérnie vagy értesítést küldenie az új elérhető kimenetről.

  • Helyi öblítés

    • Kimeneti pin-specifikus öblítés. Ez általában akkor fordul elő, ha egy stream le van állítva.

A kiürítés előtt közzétett összes eseményt a Device MFT Manager elveti. A kiürítés után az eszköz MFT-je újraindítja a belső METransformHaveOutput nyomkövetési számát.

Az eszköz MFT-jének ürítése

Az eszköz MFT-je nem fog külön ürítési üzenetet kapni, mivel nincs szükség ürítésre egy élő rögzítési forrás esetében.

Fényképes eseményindító

Ebben a modellben ahelyett, hogy közvetlenül az illesztőprogramnak küldené a fényképes indítókat és a fényképsorozat kezdés és leállítás indítókat, a rendszer átirányítja őket az eszköz MFT-re. Az eszköz MFT kezeli az eseményindítót, vagy szükség szerint továbbítja azt a kameraillesztőnek.

Meleg kezdés

A DeviceSource megpróbál meleg indítást végrehajtani egy adott kimeneti streamen úgy, hogy átváltja a streamet szünet üzemmódba. A DTM viszont meghívja az IMFDeviceTransform::SetOutputStreamState metódust az eszköz MFT-jén egy adott kimeneti stream szüneteltetésére. Ez azt eredményezi, hogy a megfelelő bemeneti adatfolyamot szüneteltetni kell. Ez az eszköz MFT által úgy érhető el, hogy a METransformInputStreamStateChanged kérést a DTM-hez továbbítják és az IMFDeviceTransform::SetInputStreamState metódust kezelik.

Változó fényképsorozat

Ezzel az architektúrával a fényképsorozat a kameraeszköz-illesztőprogrammal és az Eszköz MFT-vel van implementálva, ami jelentősen csökkenti a kameraeszköz-illesztőprogram összetettségét. A fényképsorozat indítási és leállítási eseményindítóit elküldik az eszköz MFT-jére, ami megkönnyíti a fényképsorozatok kezelését.

Fénykép megerősítése

Az eszköz MFT-je támogatja a fénykép megerősítését az IMFCapturePhotoConfirmation felületen keresztül. A folyamat ezt az interfészt az IMFGetService::GetService metóduson keresztül kéri le.

Metadaták

A Devproxy lekérdezi az illesztőprogramot a metaadatok pufferméretére vonatkozóan, és lefoglalja a metaadatok memóriáját. A driverből származó metaadatokat a Devproxy állítja be a mintára. Az eszköz MFT-je a minta metaadatait használja fel. A metaadatok továbbíthatók a mintával a kimeneti adatfolyamon keresztül, vagy felhasználhatók az utófeldolgozáshoz.

A device MFT bármilyen számú bemenetet támogat, a dedikált bemeneti pin-kód csak metaadatokhoz vagy sávon kívüli metaadatokhoz használható. A pin-kód mediatípusa egyéni, és az illesztő határozza meg a pufferek méretét és számát.

Ez a metaadat-adatfolyam a DTM-n kívül is elérhető. A stream streamelési állapotba helyezhető, amikor az Eszköz MFT elindítja a streamelést. Ha például a kimeneti streamek vannak kiválasztva a streameléshez, az eszköz MFT kérheti a DTM-et egy vagy több videostream, valamint a metaadat-adatfolyam elindításához a METransformInputStreamStateChanged esemény használatával.

Megjegyzés: Nincs szükség arra, hogy a bemeneti csapok száma megegyezik a modell kimeneti csapjainak számával. A metaadatokhoz vagy a 3A-hoz külön pin-kód is használható.

Eszközátalakítás-kezelő (DTM) eseménykezelése

Az eszközátalakítás-kezelő eseményeit a következő referenciacikkek határozzák meg:

IMFDeviceTransform felület

Az IMFDeviceTransform interfész az eszköz MFT-jével való interakcióhoz van definiálva. Ez az interfész megkönnyíti az m bemenetek és az n kimeneti eszköz MFT kezelését. A többi interfész mellett az eszköz MFT-nek is implementálnia kell ezt az interfészt.

Általános eseménypropagálás

Ha egy esemény a Devproxyban (vagy az eszközön belül) történik, azt propagálja az eszköz MFT-jének és a DeviceSource-nak.

Eszköz MFT-követelményei

Interfészkövetelmények

Az eszköz MFT-jeinek a következő interfészeket kell támogatniuk:

  • IMFDeviceTransform

  • IKsControl

    • Ez lehetővé teszi, hogy az összes ksproperties, esemény és metódus végighaladjon az eszköz MFT-én. Ez lehetővé teszi az eszköz MFT-jének, hogy kezelje ezeket a függvényhívásokat az Eszköz MFT-ben, vagy csak továbbítsa őket az illesztőprogramnak. Abban az esetben, ha a KsEvent metódusokat kezeli, az eszköz MFT-jének a következő lépéseket kell elvégeznie:

      • Ha az Eszköz MFT kezeli az KSEVENT_TYPE_ONESHOT eseményeket, akkor duplikálja a leírót, amikor KSEVENT_TYPE_ENABLE kap.

      • Amikor végzett az esemény beállításával vagy kialakításával, meghívja a CloseHandle függvényt a duplikált leírón.

      • Ha az eszköz MFT nem KSEVENT_TYPE_ONESHOT eseményeket kezel, akkor meg kell duplikálnia a leírót, amikor KSEVENT_TYPE_ENABLE-t kap, és amikor a ks esemény le van tiltva, meg kell hívnia a CloseHandle függvényt a duplikált leírón. Ehhez a KsEvent függvényt kell meghívni, miközben az első paramétert (ks eseményazonosító) és a második paramétert (eseményhossz) nullára állítja. Az eseményadatok és a hossz érvényesek. Az eseményadatok egyedileg azonosítanak egy adott ks-eseményt.

      • Ha az eszköz MFT nem KSEVENT_TYPE_ONESHOT eseményeket kezel, akkor meg kell duplikálnia a fogantyút, amikor KSEVENT_TYPE_ENABLE-t kap, és az összes paraméter nullára van állítva. A duplikált fogantyúkat pedig le kell zárnia CloseHandle hívásával, amikor a Ks-eseményeket letiltja.

  • IMFRealTimeClientEx

  • IMFMediaEventGenerator

  • IMF leállás

  • IMFSampleAllocatorControl

Értesítési követelmények

Az eszköz MFT-jeinek a következő üzenetekkel kell tájékoztatniuk a DTM-et a minták elérhetőségéről, a bemeneti stream állapotának változásáról stb.

Szálra vonatkozó követelmények

Az eszköz MFT-nek nem szabad saját szálakat létrehoznia. Ehelyett a Media Foundation munkasorokat kell használnia, amelyek az IMFRealTimeClientEx felületen keresztül a DMFT-nek átadott azonosító alapján vannak lefoglalva. Ez annak biztosítása, hogy az eszköz MFT-ben futó összes szál megkapja a megfelelő prioritást, amelyen a rögzítési folyamat fut, és elkerülje a szálprioritás-inverziókat.

InputStream-követelmények

Streamek száma

  • Az eszköz MFT-ben a bemeneti streamek számának meg kell egyeznie az illesztőprogram által támogatott streamek számával.

Médiafajták

  • Az eszköz MFT bemenetének támogatott médiatípusai és számuknak meg kell egyezniük az illesztőprogram által támogatott médiatípusok és azok számával.

  • A szám csak akkor lehet eltérő, ha az eszköz MFT bemenete által támogatott mediatípusok az illesztőprogram által támogatott mediatípusok egy részhalmaza.

  • Az eszköz MFT illesztőprogramja és bemenete által támogatott mediatípusok lehetnek standard vagy egyéni mediatype-típusok.

Az MFT eszköz regisztrálása

A kamera eszköz INF-jének az alábbi eszköz interfész bejegyzéssel kell rendelkeznie, amely megadja az eszköz MFT társosztályának CLSID azonosítóját.

[CaptureAvstrm.Device.NTarm.Interfaces]
AddInterface = %KSCATEGORY_VIDEO_CAMERA%, %Capture.FilterDescBack%, Capture.FilterBack

[Capture.FilterBack]
AddReg = Capture.FilterBack.AddReg, PinNames.AddReg

[Capture.FilterBack.AddReg]
HKR,,FriendlyName,,%Capture.FilterDescBack%
HKR,,CameraDeviceMftClsid,,%CameraDeviceMFT.Clsid%

Ezek az INF-bejegyzések a következő beállításkulcsok megadását eredményezik:

Megjegyzés:

Ez csak egy példa (nem a tényleges regkey)

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{E5323777-F976-4f5b-9B55-B94699C46E44}\##?#USB#VID_045E&PID_075D&MI_00#8&23C3DB65&0&0000#{E5323777-F976-4f5b-9B55-B94699C46E44}\#GLOBAL\Device Parameters]
"CLSID"="{17CCA71B-ECD7-11D0-B908-00A0C9223196}"
"FriendlyName"="USB Video Device"
"CameraDeviceMftClsid"="{3456A71B-ECD7-11D0-B908-00A0C9223196}"<<< Device MFT CoClass ID >>>

Eszköz MFT-láncolás

Az eszköz MFT az ajánlott felhasználói módú bővítmény az IHV-k és OEM-ek számára, a kamera funkcióinak bővítésére a Windows rendszeren.

A Windows 10 1703-es verziója előtt a kamerafolyamat csak egy DMFT bővítmény beépülő modult támogatott.

A Windows 10 1703-es verziójától kezdve a Windows kamerafolyamat támogatja a DMFT-k opcionális láncát, legfeljebb két DMFT-vel.

A Windows 11 22H2-es verziójától kezdve a Windows kamera feldolgozási láncolata legfeljebb négy DMFT-ből álló opcionális DMFT-láncot támogat.

Ez nagyobb rugalmasságot biztosít az OEM-eknek és az IHV-knek, hogy érték-hozzáadást biztosítsanak a kamerastreamek utófeldolgozása formájában. Egy eszköz például használhatja a PDMFT-t egy IHV DMFT és egy OEM DMFT mellett.

Az alábbi ábra a DMFT-k láncát magában foglaló architektúrát mutatja be.

DMFT lánc.

A minták áramlása a kamera meghajtótól a DevProxy felé, majd haladnak végig a DMFT-láncokon. A lánc minden DMFT-jének lehetősége van a minta feldolgozására. Ha a DMFT nem szeretné feldolgozni a mintát, akkor átmenőként is működhet, ha egyszerűen átadja a mintát a következő DMFT-nek.

Az olyan vezérlők esetében, mint a KsProperty, a hívás streamel – a lánc utolsó DMFT-je kapja meg először a hívást. A hívás ott kezelhető, vagy átadható a lánc korábbi DMFT-jének.

A hibák propagálása a DMFT-ből a DTM-be, majd az alkalmazásokba történik. Az IHV/OEM DMFT-k esetében, ha bármelyik DMFT példányosítása nem sikerül, az a DTM számára végzetes hiba.

A DMFT-kkel kapcsolatos követelmények:

  • A DMFT bemeneti tűszámának meg kell egyeznie az előző DMFT kimeneti pin-kódszámával. Ellenkező esetben a DTM inicializálás során meghiúsulna. Ugyanannak a DMFT-nek a bemeneti és kimeneti pin-kódjainak azonban nem kell egyeznie.

  • A DMFT-nek támogatnia kell az interfészeket – IMFDeviceTransform, IMFShutdown, IMFRealTimeClientEx, IKsControl és IMFMediaEventGenerator; Előfordulhat, hogy az IMFTransformot támogatni kell, ha az MFT0 konfigurálva van, vagy a lánc következő DMFT-jéhez IMFTransform-támogatás szükséges.

  • A Keretkiszolgálót nem használó 64 bites rendszereken a 32 bites és a 64 bites DMFT-ket is regisztrálni kell. Tekintettel arra, hogy egy USB-kamera csatlakoztatható egy tetszőleges rendszerhez, a "külső" (vagy nem dobozos) USB-kamerák esetében az USB-kamera gyártójának 32 bites és 64 bites DMFT-ket kell biztosítania.

A DMFT-lánc konfigurálása

A kameraeszköz opcionálisan megadhat egy DMFT COM-objektumot egy DLL-ben egy egyéni INF-fájl használatával, amely az USBVideo.INF beérkezett üzenetek mappájának szakaszait használja.

Az egyéni .INF fájl "Interface AddReg" szakaszában adja meg a DMFT CLSID-ket a következő beállításjegyzék-bejegyzés hozzáadásával:

CameraDeviceMftCLSIDChain (REG_MULTI_SZ) %Dmft0.CLSID%,%Dmft. CLSID%,%Dmft2.CLSID%

Ahogyan az alábbi INF-mintabeállításokban látható (cserélje le a %Dmft0.CLSID% és % Dmft1.CLSID% a DMFT-ekhez használt tényleges CLSID-sztringekre), a Windows 10-ben legfeljebb 2 CLSID engedélyezett, 1703-es verzió, és az első a DevProxyhoz legközelebbi, az utolsó pedig a lánc utolsó DMFT-je.

A platform DMFT CLSID azonosítója {3D096DDE-8971-4AD5-98F9-C74F56492630}.

Néhány példa a CameraDeviceMftCLSIDChain beállításaira:

  • Nincs IHV/OEM DMFT vagy platform DMFT

    • CameraDeviceMftCLSIDChain = "" (vagy nem kell megadni ezt a beállításjegyzék-bejegyzést)
  • IHV/OEM DMFT

    • CameraDeviceMftCLSIDChain = %Dmft. CLSID%
  • Platform DMFT <–> IHV/OEM DMFT

    • CameraDeviceMftCLSIDChain = "{3D096DDE-8971-4AD5-98F9-C74F56492630}",%Dmft. CLSID%

    • Íme egy képernyőkép egy USB-kamera eredménykulcs regiszteréről, amely platform DMFT-t és egy DMFT-t (GUID {D671BE6C-FDB8-424F-81D7-03F5B1CE2CC7}) tartalmaz a láncban.

Beállításszerkesztő DMFT-lánca.

  • IHV/OEM DMFT0 <–> IHV/OEM DMFT1

    • CameraDeviceMftCLSIDChain = %Dmft0.CLSID%,%Dmft1.CLSID%,

Megjegyzés:

A CameraDeviceMftCLSIDChain legfeljebb 2 CLSID-sel rendelkezhet.

Ha a CameraDeviceMftCLSIDChain konfigurálva van, az örökölt CameraDeviceMftCLSID-beállításokat a DTM kihagyja.

Ha a CameraDeviceMftCLSIDChain nincs konfigurálva, és a régi CameraDeviceMftCLSID van konfigurálva, a lánc a következőképpen nézne ki: ha USB kamera és a Platform DMFT támogatja, és engedélyezett, akkor DevProxy <–> Platform DMFT <–> OEM/IHV DMFT; vagy ha a kamera nem támogatott a Platform DMFT által, vagy a Platform DMFT le van tiltva, akkor DevProxy <-> OEM/IHV DMFT.

Példa INF-fájlbeállításokra:

[USBVideo.Interface.AddReg]
HKR,,CLSID,,%ProxyVCap.CLSID%
HKR,,FriendlyName,,%USBVideo.DeviceDesc%
HKR,,RTCFlags,0x00010001,0x00000010
HKR,,EnablePlatformDmft,0x00010001,0x00000001
HKR,,DisablePlatformDmftFeatures,0x00010001,0x00000001
HKR,,CameraDeviceMftCLSIDChain, 0x00010000,%Dmft0.CLSID%,%Dmft1.CLSID%

Eszköz MFT-jeinek com objektum- és MFT-regisztrációja

Az illesztő COM-objektum globális regisztrálása helyett az illesztőprogram COM-objektuma az eszközkulcs alatt van regisztrálva. Ez lehetővé teszi az MFT COM-regisztrációt a tárolóból, és megakadályozza a globális beállításkulcsok létrehozását, így megőrizve az illesztőprogram-csomagok elkülönítését. Az MFT-k az eszközkulcs alatt is regisztrálva vannak hasonló okokból.

Az illesztőprogram INF fájl módosításai

Az eszközillesztő telepítésekor az INF-nek mostantól az eszközkulcs alatt kell elvégeznie az összes COM-objektum- és MFT-regisztrációt. Az MFT- és COM-regisztrációknak az itt látható módon kell módosulnia:

MFT-regisztrációk

Előtte Utána
INF AddReg:

HKCR, MediaFoundation\Transforms\{clsid}\...
Per-Instance eszközszoftver INF AddReg:

HKR, MediaFoundation\Transforms\{clsid}\...
Beállításjegyzék helye:

HKLM\SOFTWARE\Classes\MediaFoundation\Transforms\{clsid}\...
Beállításjegyzék helyei:

szoftverkulcs\MediaFoundation\Transforms\{clsid}\...
COM-regisztrációk

Windows 26100-ban és újabb verziókban az eszköz MFT-jeihez tartozó összes COM-regisztrációnak AddComServer/AddComClass-irányelveket kell használnia az INF-ben. Itt egy szintaxisos példa látható:

[AvsCamera.COM]
AddComServer = AvsCameraMFT,,AvsCamera.COMInstall

[AvsCamera.COMInstall]
ServerType = 1; in-proc
ServerBinary = %13%\AvsCameraDMFT.dll
AddComClass = %DMFT.CLSID%,, AvsCamera.COMClassInstall


[AvsCamera.COMClassInstall]
ThreadingModel = Both
Description = %AvsCamera.ComServerDescription%

Az eszköz MFT COM-regisztrációjának korábbi verziói az AddReg használatával telepítették manuálisan a COM-osztályt.

Előtte Utána
INF AddReg:

HKLM,Software\Classes\CLSID\{clsid}\...
HKCR,CLSID\{clsid}\...
HKCR,Wow6432Node\CLSID\{clsid}\...
HKCR,WowAA32Node\CLSID\{clsid}\...
Per-Instance eszközszoftver INF AddReg:

HKR,Classes\CLSID\{clsid}\...
HKR,Classes\CLSID\{clsid}\...
HKR,Classes\Wow6432Node\CLSID\{clsid}\...
HKR,Classes\WowAA32Node\CLSID\{clsid}\...

Az operációs rendszer verzióján alapuló differenciálás INF-szintaxisa megtalálható a platformbővítmények és az operációsrendszer-verziók kombinálásában. A Windows 11 25300-tól kezdődően az INF-nek meg kell felelnie ezeknek az új beállításkulcsoknak. A régebbi operációsrendszer-verziók a hagyományos beállításkulcsokat használják a kompatibilitáshoz. Az INF-nek ezeket a beállításkulcsokat a régi helyen kell beállítania a régebbi operációsrendszer-buildeken, és létre kell hoznia az új kulcsokat az új helyen az újabb operációsrendszer-buildekhez. Egy régebbi build MFT-regisztrációja esetén például az INF a következő beállításjegyzék-bejegyzés alatt hozza létre a kulcsot:

HKLM\SOFTWARE\Classes\MediaFoundation\Transforms\{clsid}\ 

Egy új build MFT-regisztrációja esetén az INF a következő beállításjegyzék-bejegyzés alatt hozza létre a kulcsot:

**software key**\MediaFoundation\Transforms\{clsid}\ 

Ez a bejegyzés azt határozza meg, hogy a szoftverkulcs hol jelöli az eszköz szoftverkulcsát.

További információ: Az eszköz szoftverkulcsának megnyitása.

A különböző operációsrendszer-verziók célzásának szintaxisa itt látható:

[Manufacturer] 
%Msft% = Msft, NTamd64,NTamd64.10.0...25300 

; -------------- ; 
; Models Section ; 
; -------------- ; 

; Targets old builds
[Msft.NTamd64] 
%DeviceDesc% = ExampleDDInstall_Old, ExampleHardwareId

[ExampleDDInstall_Old]
 AddReg = MFT_Registration_Old

[MFT_Registration_Old]
; INF work for older build here

; Windows 10 build with build number equal to or greater than 25300 
[msft.ntamd64.10.0...25300]  
%DeviceDesc% = ExampleDDInstall_New, ExampleHardwareId

[ExampleDDInstall_new]
AddReg = MFT_Registration_new

[MFT_Registration_new]
; INF work for newer build here