Condividi tramite


Supporto MFT del dispositivo (Profilo fotocamera V2)

Negli scenari in cui IHV/OEMs devono pubblicare profili di fotocamera in base alle informazioni di runtime (ad esempio, un set di driver usati per più SKU che usano sensori diversi), i driver della fotocamera devono implementare un dispositivo MFT per pubblicare i profili della fotocamera.

Durante la chiamata InitializeTransform di Device MFT, il DMFT può pubblicare profili di fotocamera fornendo l'interfaccia IMFSensorProfileCollection tramite l'attributo seguente:

// MF_DEVICEMFT_SENSORPROFILE_COLLECTION
// Data type: IUnknown
// IMFSensorProfileCollection interface that SGT Factory can provide to indicate new
// profiles available to the SG generation.
cpp_quote("EXTERN_GUID(MF_DEVICEMFT_SENSORPROFILE_COLLECTION, 0x36EBDC44, 0xB12C, 0x441B, 0x89, 0xF4, 0x08, 0xB2, 0xF4, 0x1A, 0x9C, 0xFC );")

Questo attributo deve essere impostato nell'archivio attributi di FMTransform fornito al DMFT tramite l'attributo MF_DEVICEMFT_CONNECTED_FILTER_KSCONTROL.

La parte di codice seguente illustra come il DMFT durante il metodo InitializeTransform possa fornire un nuovo profilo di fotocamera.

Per questo esempio, è possibile fare alcuni presupposti:

  1. Questa è una fotocamera a 4 pin.

  2. Pin 0 – Acquisizione, Pin 1 – Anteprima, Pin 2 – Foto e Pin 3 – Flusso ir.

IFACEMETHODIMP
SampleDMFT::InitializeTransform(
    _In_ IMFAttributes *pAttributes 
    )
{
    ComPtr<IMFTransform>                spTransform;
    ComPtr<IMFAttributes>               spAttributes;
    ComPtr<IMFSensorProfileCollection>  spProfileCollection;
    ComPtr<IMFSensorProfile>            spProfile;


    if (nullptr == pAttributes)
    {
        return E_INVALIDARG;
    }

    RETURN_IF_FAILED (pAttributes->GetUnknown(MF_DEVICEMFT_CONNECTED_FILTER_KSCONTROL, 
                                              IID_PPV_ARGS(&spTransform)));
    RETURN_IF_FAILED (spTransform->GetAttributes(&spAttributes));

    // Create an empty collection...
    RETURN_IF_FAILED (MFCreateSensorProfileCollection(&spProfileCollection));

    // Create various profiles we want to publish.
    // For the legacy profile, we don't want to expose the IR stream since
    // legacy apps will not be able to consume it.
    RETURN_IF_FAILED (MFCreateSensorProfile(KSCAMERAPROFILE_Legacy, 0, nullptr, &spProfile));
    RETURN_IF_FAILED (spProfile->AddProfileFilter(0, L"((RES==;FRT<=30,1;SUT==))"));
    RETURN_IF_FAILED (spProfile->AddProfileFilter(1, L"((RES==;FRT<=30,1;SUT==))"));
    RETURN_IF_FAILED (spProfile->AddProfileFilter(2, L"((RES==;FRT<=30,1;SUT==))"));
    RETURN_IF_FAILED (spProfile->AddProfileFilter(3, L"(!)"));
    RETURN_IF_FAILED (spProfileCollection->AddProfile(spProfile));
    spProfile = nullptr;

    // For the High Frame Rate recording profile, we only support 60fps or
    // higher on the record pin and any on the preview (since preview only
    // exposes 30fps).
    RETURN_IF_FAILED (MFCreateSensorProfile(KSCAMERAPROFILE_HighFrameRate, 0, nullptr, &spProfile));
    RETURN_IF_FAILED (spProfile->AddProfileFilter(0, L"((RES==;FRT>=60,1;SUT==))"));
    RETURN_IF_FAILED (spProfile->AddProfileFilter(1, L"((RES==;FRT==;SUT==))"));
    RETURN_IF_FAILED (spProfile->AddProfileFilter(2, L"(!)"));
    RETURN_IF_FAILED (spProfile->AddProfileFilter(3, L"(!)"));
    RETURN_IF_FAILED (spProfileCollection->AddProfile(spProfile));
    spProfile = nullptr;

    // For the Face Auth, we can handle any media type on the preview but we
    // want to remove the photo and record pins and allow the IR pin to only
    // expose one media type:  VGA@60fps with L8.
    RETURN_IF_FAILED (MFCreateSensorProfile(KSCAMERAPROFILE_FaceAuth_Mode, 0, nullptr, &spProfile));
    RETURN_IF_FAILED (spProfile->AddProfileFilter(0, L"(!)"));
    RETURN_IF_FAILED (spProfile->AddProfileFilter(1, L"((RES==;FRT==;SUT==))"));
    RETURN_IF_FAILED (spProfile->AddProfileFilter(2, L"(!)"));
    RETURN_IF_FAILED (spProfile->AddProfileFilter(3, L"((RES==640,480;FRT==60,1;SUT==L8))"));
    RETURN_IF_FAILED (spProfileCollection->AddProfile(spProfile));
    spProfile = nullptr;

    // Set the profile collection to the attribute store of the IMFTransform.
    RETURN_IF_FAILED (spAttributes->SetUnknown(MF_DEVICEMFT_SENSORPROFILE_COLLECTION, 
                                               spProfileCollection));

    // ... Reset of the InitializeTransform logic...
 }

Il MF_DEVICEMFT_SENSORPROFILE_COLLECTION deve essere pubblicato nell'archivio attributi di FMTransform connesso prima che il metodo InitializeTransform() restituisca.

DMFT concatenata

Nello scenario in cui più DMFT vengono concatenati all'interno dell'origine del dispositivo, il DMFT responsabile della pubblicazione del profilo della fotocamera deve essere configurato dall'IHV/OEM come prima trasformazione nella catena seguente DevProxy o Platform DMFT se Platform DMFT è abilitato.

Ad esempio, la pubblicazione di profili fotocamera da IHV/OEM DMFT1 nelle topologie seguenti è supportata:

concatenata D M F T.

Nella topologia 1 e 2 solo DMFT1 può pubblicare profili fotocamera. Qualsiasi profilo di fotocamera pubblicato da DMFT2 verrà ignorato.

M-in, N-out Device MFT

Una delle funzionalità supportate dalle unità multifunzione del dispositivo è la possibilità di acquisire un numero arbitrario di flussi di input ed esporre un numero diverso di flussi di output.

Poiché la logica del profilo richiede l'ID pin per identificare le informazioni sul filtro del profilo, il mapping dei pin deve essere coerente.

FmiSensorProfileCollection pubblicato da Device MFT deve usare il numero di pin in base al pin di output del DMFT. L'ID pin in questo caso deve corrispondere all'attributo MF_DEVICESTREAM_STREAM_ID presentato nell'archivio attributi del pin di output.

Per evitare possibili collisioni di ID pin, il DMFT DEVE rimuovere la MF_DEVICESTREAM_TRANSFORM_STREAM_ID. Il MF_DEVICESTREAM_TRANSFORM_STREAM_ID viene presentato solo da DevProxy ed è significativo solo nel contesto di DevProxy. Per un DMFT M-out N, il MF_DEVICESTREAM_TRANSFORM_STREAM_ID non è definito.

Specifica per sviluppatori del profilo della fotocamera V2