Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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ó.
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.
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:
-
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.
É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.
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.
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