Sdílet prostřednictvím


Vytvoření ovladače fotoaparátu MFT pro aplikaci zařízení UPW

Důležité

Toto téma je zastaralé. Aktualizované pokyny najdete v průvodci návrhem MFT pro zařízení.

Aplikace zařízení pro UWP umožňují, aby výrobci zařízení mohli použít vlastní nastavení a speciální efekty na videostream fotoaparátu s ovladačem kamery MFT (transformace základu médií). Toto téma představuje MFT ovladačů a pomocí ukázky Driver MFT ukazuje, jak takový MFT vytvořit. Další informace o aplikacích zařízení UWP obecně najdete v tématu Meet UWP device apps.

Ovladač MFT

Tato část popisuje Media Foundation Transform (MFT), kterou vytvoříte pro aplikaci efektů na mediální stream pocházející z fotoaparátu. Tímto způsobem poskytujete transformace pro barevné efekty, režimy schématu a efekty sledování tváří, které skutečně rozlišují vaši kameru od ostatních. Tento MFT, známý jako ovladač MFT, se nejdříve použije na video stream připojený z ovladače kamery, když aplikace UWP zahájí záznam videa. Když tato aplikace vyvolá možnosti fotoaparátu uživatelské rozhraní, Windows automaticky poskytuje přístup k libovolnému rozhraní, které ovladač MFT implementuje pro řízení vlastních efektů.

ovladač fotoaparátu mft pomáhá aplikaci zařízení s Windows Store poskytovat vlastní efekty.

Pro aplikaci zařízení UWP není vyžadován ovladač MFT. Výrobce zařízení se může rozhodnout implementovat aplikaci zařízení pro UWP bez ovladače MFT, a tím poskytnout diferencované uživatelské rozhraní obsahující branding pro svůj hardware, aniž by aplikoval vlastní nastavení a speciální efekty na video stream.

Jak se používá ovladač MFT

Aplikace zařízení UWP pro fotoaparát běží ve jiném procesu než aplikace z Microsoft Store, která ji vyvolává z rozhraní API CameraCaptureUI. Aby aplikace zařízení z Microsoft Storu mohla řídit řadič MFT, musí nastat specifická posloupnost událostí v různých prostorech procesu.

  1. Aplikace pro UPW chce zachytit fotku, takže volá metodu CaptureFileAsync

  2. Systém Windows požaduje ukazatel MFT ovladače a ID zařízení fotoaparátu.

  3. Ukazatel MFT ovladače se předává hostiteli nastavení.

  4. Hostitel vyžaduje vlastnosti zařízení pro ID aplikace zařízení Microsoft Store přidružené k fotoaparátu (podle metadat zařízení).

  5. Pokud se nenajde žádná UWP aplikace zařízení, výchozí rozbalovací nabídka komunikuje se zachytávacím modulem.

  6. Pokud je nalezena aplikace zařízení pro UWP, aktivuje se a hostitel nastavení jí předá ukazatel ovladače MFT.

  7. Aplikace zařízení UWP řídí MFT ovladače pomocí rozhraní poskytovaného ukazatelem.

interakci procesu pro vyvolání aplikace zařízení s Windows Store.

Požadavek na model ovladače AvStream

Ovladač kamery musí používat model ovladače AvStream. Další informace o modelu ovladače AVStream naleznete v tématu AVStream Minidrivers Design Guide.

Jak je ovladač MFT vystavený aplikacím

Ovladač MFT je zaregistrovaný ve Windows jako rozhraní COM, aby se transformace, kterou implementuje, mohly použít na datový proud médií vycházející z konkrétního zařízení, jako je kamera.

Poznámka:

Ovladač MFT by neměl být registrován pomocí funkce MFTRegister, protože je specifický pro konkrétní zařízení a není určen pro obecné použití jako MFT. Informace o klíči registru najdete v části Instalace a registrace ovladače MFT dále v tomto tématu.

Když aplikace zahájí zachytávání videa, vytvoří se instance čtečky zdroje Media Foundation, která poskytne stream videa. Tento zdroj médií čte hodnotu registru z klíče registru zařízení. Pokud se v hodnotě registru nachází CLSID třídy COM MFT ovladače, zdrojový čteč vytvoří instanci tohoto ovladače MFT a vloží ji do mediálního kanálu.

Kromě aplikací pro zařízení s UPW je možné získat přístup k funkcím MFT ovladače, když se zařízení přidružené k němu používá k zachycení videa pomocí následujících rozhraní API:

  • HTML5 <video> tagy v aplikaci pro UWP pomocí HTML. Transformace, které ovladač MFT povolil, ovlivní video, které se přehrává pomocí prvku <video>, jak je znázorněno v následujícím příkladu kódu:

    var video = document.getElementById('myvideo');
        video.src = URL.createObjectURL(fileItem);
        video.play();
    
  • Rozhraní API pro Windows.Media.MediaCapture v aplikaci pro UPW pomocí prostředí Windows Runtime. Další informace o tom, jak se toto rozhraní API používá, najdete v ukázce Media Capture.

  • Čtečka zdroje Media Foundation pro aplikace, které zpracovávají data médií. Ovladač MFT bude zpřístupněn aplikacím jako první (0.) MFT při volání IMFSourceReaderEx::GetTransformForStream. Vrácená kategorie je MFT_CATEGORY_VIDEO_EFFECT.

    úloha čtenáře zdroje při zachytávání médií.

Kamery s více kolíky

Pokud máte tříkolíkovou nebo jinou kameru s více kolíky, podívejte se na Důležité informace o MFT pro ovladače na vícekolíkových kamerách.

Implementace ovladače MFT

Tato část obsahuje informace o implementaci MFT ovladače. Úplný příklad ovladače MFT, který spolupracuje s aplikací pro zařízení UPW, najdete v ukázce Driver MFT.

Vývojové nástroje

Vyžaduje se Microsoft Visual Studio Professional nebo Microsoft Visual Studio Ultimate.

Charakteristiky MFT ovladače

Pro každý datový proud se vytvoří instance ovladače MFT. Pro každý datový proud, který kamera podporuje, se vytvoří a připojí instance MFT. Očekává se, že ovladač MFT bude mít jeden vstupní datový proud a jeden výstupní datový proud. Ovladač MFT může být buď synchronní MFT, nebo asynchronní MFT.

Komunikace mezi kamerou a ovladačem MFT

Chcete-li povolit obousměrnou komunikaci mezi zdrojem médií a ovladačeM MFT, ukazatel na úložiště atributů zdrojového streamu je nastaven v úložišti atributů vstupního datového proudu ovladače MFT jako MFT_CONNECTED_STREAM_ATTRIBUTE. K tomu dochází prostřednictvím procesu handshake, který povolíte zveřejněním MFT_ENUM_HARDWARE_URL_Attribute v ovladači MFT, jako v následujícím příkladu:

HRESULT CDriverMft::GetAttributes(IMFAttributes** ppAttributes)
{
    HRESULT hr = S_OK;
    if (NULL == ppAttributes)
    {
       return E_POINTER; 
    };
        if(!m_pGlobalAttributes) {
           MFCreateAttributes(&m_pGlobalAttributes, 1);
           m_pGlobalAttributes-> 
             SetString(MFT_ENUM_HARDWARE_URL_Attribute, L"driverMFT");
        }
        *ppAttributes = m_pGlobalAttributes;
        (*ppAttributes)->AddRef();
        return S_OK;
}

V tomto příkladu je MFT_CONNECTED_STREAM_ATTRIBUTE v úložišti atributů ovladače MFT nastaveno tak, aby odkazovalo na úložiště atributů zdrojového datového proudu zařízení. Další podrobnosti o nastavení komunikace mezi kamerou a MFT najdete v části Hardwarová sekvence handshake.

Jak získat přístup ke zdrojovým informacím o zařízení

Následující příklad kódu ukazuje, jak ovladač MFT může získat ukazatel na zdrojovou transformaci z jeho vstupního úložiště atributů. Ovladač MFT pak může pomocí zdrojového ukazatele získat informace o zdroji zařízení.

if(!m_pSourceTransform && m_pInputAttributes) {

          m_pInputAttributes->
              GetUnknown( MFT_CONNECTED_STREAM_ATTRIBUTE,
              IID_PPV_ARGS(&pSourceAttributes));
          pSourceAttributes-> 
              GetUnknown(
              MF_DEVICESTREAM_EXTENSION_PLUGIN_CONNECTION_POINT,            
              IID_PPV_ARGS(&pUnk)));
          pUnk->QueryInterface(__uuidof(IMFTransform), 
              (void**)&m_pSourceTransform));
      }
      if (m_pSourceTransform) {
         // Put code to get device source information here.         
      }

Jak implementovat režim předávání

Pokud chcete ovladač MFT umístit do režimu předávání, zadejte stejný typ média pro vstupní a výstupní datový proud. ProcessInput a ProcessOutput budou nadále volat na MFT. Je na implementaci MFT vašeho ovladače, aby určila, zda dochází ke zpracování v režimu passtrought nebo ne.

Soubory hlaviček, které se mají zahrnout

Budete muset zahrnout soubory hlaviček pro IInspectable a IMFTransform metody, které musí ovladač MFT implementovat. Seznam souborů hlaviček, které se mají zahrnout, najdete v stdafx.h v adresáři SampleMFT0 aplikace zařízení UWP pro ukázku fotoaparátu.

// required for IInspectable
#include <inspectable.h>

Jak implementovat IInspectable

Ovladač MFT, který je určený pro použití z aplikace zařízení UPW fotoaparátu, musí implementovat metody IInspectable, aby aplikace zařízení z Microsoft Storu měla přístup k ukazateli na ovladač MFT při spuštění. Ovladač MFT by měl implementovat metody IInspectable následujícím způsobem:

  • IInspectable::GetIids by měl vrátit hodnotu null v parametru iids out a vrátit hodnotu 0 v parametru iidCount out.

  • IInspectable::GetRuntimeClassName by měl v parametru out vrátit hodnotu null.

  • IInspectable::GetRuntiGetTrustLevel by měl vrátit TrustLevel::BaseTrust ve výstupním parametru.

Následující příklad kódu ukazuje, jak se IInspectable metody implementují v ukázkovém ovladači MFT. Tento kód najdete v souboru Mft0.cpp v adresáři SampleMFT0 ukázky.

// Mft0.cpp
STDMETHODIMP CMft0::GetIids( 
    /* [out] */ __RPC__out ULONG *iidCount,
    /* [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(*iidCount) IID **iids)
{
    HRESULT hr = S_OK;
    do {
        CHK_NULL_PTR_BRK(iidCount);
        CHK_NULL_PTR_BRK(iids);
        *iids = NULL;
        *iidCount = 0;
    } while (FALSE);

    return hr;
}

STDMETHODIMP CMft0::GetRuntimeClassName( 
    /* [out] */ __RPC__deref_out_opt HSTRING *className)
{
    HRESULT hr = S_OK;
    do {
        CHK_NULL_PTR_BRK(className);
        *className = NULL;
    } while (FALSE);

    return hr;
}

STDMETHODIMP CMft0::GetTrustLevel( 
    /* [out] */ __RPC__out TrustLevel *trustLevel)
{
    HRESULT hr = S_OK;
    do {
        CHK_NULL_PTR_BRK(trustLevel);
        *trustLevel = TrustLevel::BaseTrust;
    } while (FALSE);

    return hr;
}

Implementace modelu COM

Každé rozhraní, které váš ovladač MFT implementuje, by mělo implementovat a být odvozeno od IUnknown, aby bylo možné jej správně zprostředkovat do aplikace zařízení UWP fotoaparátu. Následuje příklad souboru .idl pro ovladač MFT, který to ukazuje.

// SampleMft0.idl : IDL source for SampleMft0
//

// This file will be processed by the MIDL tool to
// produce the type library (SampleMft0.tlb) and marshalling code.

import "oaidl.idl";
import "ocidl.idl";
import "Inspectable.idl";
import "mftransform.idl";
[
    object,
    uuid(F5208B72-A37A-457E-A309-AE3060780E21),
    oleautomation,
    nonextensible,
    pointer_default(unique)
]
interface IMft0 : IUnknown{
    [id(1)] HRESULT UpdateDsp([in] UINT32 uiPercentOfScreen);
    [id(2)] HRESULT Enable(void);
    [id(3)] HRESULT Disable(void);
    [id(4)] HRESULT GetDspSetting([out] UINT* puiPercentOfScreen, [out] BOOL* pIsEnabled);
};
[
    uuid(DE05674A-C564-4C0E-9B7C-E1519F7AA767),
    version(1.0),
]
library SampleMft0Lib
{
    importlib("stdole2.tlb");
    [
        uuid(7BB640D9-33A4-4759-B290-F41A31DCF848)      
    ]
    coclass Mft0
    {
        [default] interface IMft0;
        interface IInspectable;
        interface IMFTransform;
    };
};

Poznámka:

Ovladač MFT je běžná třída modelu COM, kterou lze vytvořit pomocí CoCreateInstance. Funkci MFTRegister byste neměli používat k registraci, protože se nejedná o univerzální MFT.

Vytvoření proxy serveru

Ovladač MFT je mimoprocesový server. Chcete-li jej použít v aplikaci zařízení pro UWP, musíte poskytnout podporu marshalingu v proxy, aby šlo rozhraní MFT ovladače použít přes hranice procesů. Příklad najdete v ukázce Driver MFT. Ukázka používá kompilátor MIDL k vygenerování proxu bez stubů.

Zveřejnění ovladače MFT aplikacím

Pokud chcete napsat aplikaci zařízení pro UPW v jazyce C# nebo JavaScriptu, která komunikuje s ovladačem MFT, musíte v projektu Microsoft Visual Studio aplikace zařízení v Microsoft Storu vytvořit další komponentu. Tato komponenta je obálka, která zveřejňuje rozhraní MFT ovladače v komponentě prostředí Windows Runtime, která je viditelná pro aplikaci zařízení Microsoft Store.

Dílčí projekt Wrapper v zařízení aplikaci UWP pro vzorek kamery poskytuje příklad, jak vystavit ovladač MFT pro rozhraní Windows Runtime, abyste ho mohli použít z aplikace zařízení UWP implementované v C# nebo JavaScriptu. Je navržen tak, aby spolupracoval s ukázkou Driver MFT. Podívejte se na ukázkovou stránku ovladače MFT pro podrobný návod na instalaci, spuštění a testování ukázek.

Instalace a registrace ovladače MFT

Tato část uvádí kroky pro instalaci ovladače MFT:

  1. Knihovna DLL ovladače MFT musí být nainstalována do podadresáře na následujícím místě:

    • %SystemDrive%\Program Files\
  2. Instalační program kamery zaregistruje ovladač MFT pomocí volání regsvr32 na ovladač MFT DLL nebo poskytnutím souboru manifestu (.man) pro knihovnu DLL, kterou instalační program používá k registraci.

  3. Nastavte hodnotu CameraPostProcessingPluginCLSID v klíči registru pro vaši kameru. INF soubor by měl určit CLSID ovladače MFT v klíči registru třídy zařízení nastavením hodnoty CameraPostProcessingPluginCLSID na GUID CLSID třídy ovladače MFT. Následuje příklad ze položky souboru INF, která naplní klíče registru fotoaparátu:

KSCATEGORY_VIDEO_CAMERA:

[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"
"RTCFlags"=dword:00000010
"CameraPostProcessingPluginCLSID"="{3456A71B-ECD7-11D0-B908-00A0C9223196}" 
KSCATEGORY_CAPTURE:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses\{ 65E8773D-8F56-11D0-A3B9-00A0C9223196}\##?#USB#VID_045E&PID_075D&MI_00#8&23C3DB65&0&0000#{65E8773D-8F56-11D0-A3B9-00A0C9223196}\#GLOBAL\Device Parameters]
"CLSID"="{17CCA71B-ECD7-11D0-B908-00A0C9223196}"
"FriendlyName"="USB Video Device"
"RTCFlags"=dword:00000010
"CameraPostProcessingPluginCLSID"="{3456A71B-ECD7-11D0-B908-00A0C9223196}"

Poznámka:

KSCATEGORY_VIDEO_CAMERA se doporučuje pro kamery. V závislosti na způsobu registrace zařízení obvykle potřebujete jenom jeden z klíčů registru.

Přidružení aplikace k fotoaparátu

Tato část obsahuje informace o krocích potřebných k identifikaci fotoaparátu v metadatech zařízení a v registru Windows. Tato metadata umožňují spárovat aplikaci zařízení pro UPW a identifikovat vaši aplikaci, aby se mohla bez problémů stáhnout při prvním připojení fotoaparátu.

Aktualizace

Pokud uživatel po první instalaci aplikace stáhne aktualizovanou verzi aplikace, aktualizace se automaticky integrují do prostředí pro zachytávání z fotoaparátu. Aktualizace se ale nestáhnou automaticky. Uživatel si musí stáhnout další aktualizace aplikací z Microsoft Storu, protože aplikace se automaticky instaluje jenom při prvním připojení. Hlavní stránka aplikace pro zařízení s UPW může poskytovat oznámení o dostupných aktualizacích a poskytovat odkazy na aktualizace ke stažení.

Důležité

Aktualizovaná aplikace by měla fungovat se všemi aktualizovanými ovladači distribuovanými prostřednictvím služby Windows Update.

Více fotoaparátů

Několik modelů fotoaparátu může deklarovat stejnou aplikaci zařízení UPW v metadatech zařízení. Pokud má systém více interně vložených fotoaparátů, musí fotoaparáty sdílet stejnou aplikaci zařízení pro UPW. Aplikace obsahuje logiku pro určení používané kamery a může zobrazit jiné uživatelské rozhraní pro každou kameru v Další možnosti prostředí. Další informace o přizpůsobení prostředí naleznete v tématu Jak přizpůsobit možnosti fotoaparátu.

Interní kamery

Aplikace zařízení UWP pro interní kamery mají nárok na automatickou instalaci z Microsoft Store, ale doporučuje se, aby byly předinstalované pro nejplynulejší uživatelskou zkušenost. K podpoře interních fotoaparátů je potřeba provést další kroky a přidružit k nim aplikaci zařízení pro UPW. Další informace najdete v tématu Určení polohy interních fotoaparátů.

Vytvoření balíčku metadat zařízení

Pro interní i externí kamery musíte vytvořit balíček metadat zařízení. Když odešlete aplikaci zařízení UPW fotoaparátu do Microsoft Storu (nebo ji předinstalujete pomocí OPK v případě interních fotoaparátů), budete kromě samotné aplikace muset zadat metadata obsahující následující:

  • Název vydavatele aplikace

  • Název balíčku aplikace

  • Identifikátor elementu aplikace

  • Identifikátor prostředí zařízení

Další informace o tom, jak pomocí metadat zařízení přidružit aplikaci k zařízení, najdete v tématu Vytváření aplikací pro zařízení UPW.

Vytváření aplikací pro zařízení s UWP

Automatická instalace pro UWP aplikace pro zařízení

sekvence navázání spojení pro hardware (hardwarové MFT)

průvodce návrhem minidriverů AVStream

aplikace zařízení UWP pro ukázku fotoaparátu

Ukázka ovladače MFT