Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In scenario's waarin IHV/OEM's cameraprofielen moeten publiceren op basis van runtime-informatie (bijvoorbeeld één set stuurprogramma's die worden gebruikt voor meerdere SKU's die gebruikmaken van verschillende sensoren), moeten camerastuurprogramma's een apparaat-MFT implementeren om de cameraprofielen te publiceren.
Tijdens de aanroep InitializeTransform van Device MFT kan de DMFT camera-profielen publiceren door de IMFSensorProfileCollection-interface op te geven via het volgende kenmerk:
// 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 );")
Dit kenmerk moet worden ingesteld op het kenmerkarchief van het IMFTransform dat aan de DMFT wordt verstrekt via het kenmerk MF_DEVICEMFT_CONNECTED_FILTER_KSCONTROL.
In het volgende codefragment ziet u hoe de DMFT tijdens de methode InitializeTransform een nieuw cameraprofiel kan bieden.
Voor dit voorbeeld gaan we enkele veronderstellingen maken:
Dit is een 4 pin camera.
nl-NL: Pin 0 – Vastleggen, Pin 1 – Voorvertoning, Pin 2 – Foto en Pin 3 – IR-stream.
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...
}
De MF_DEVICEMFT_SENSORPROFILE_COLLECTION moet worden gepubliceerd in de attributenopslag van de verbonden IMFTransform voordat de InitializeTransform() methode terugkeert.
Gekoppelde DMFT
In het scenario waarin meerdere DMFT's binnen de apparaatbron zijn gekoppeld, moet de DMFT die verantwoordelijk is voor het publiceren van de Camera Profile door de IHV/OEM worden getransformeerd als de eerste in de keten, volgend op DevProxy of Platform DMFT indien de Platform DMFT is ingeschakeld.
Het publiceren van cameraprofielen van IHV/OEM DMFT1 in de volgende topologieën wordt bijvoorbeeld ondersteund:
In topologie 1 en 2 kan alleen DMFT1 cameraprofielen publiceren. Elk cameraprofiel dat door DMFT2 wordt gepubliceerd, wordt genegeerd.
M-in, N-out Apparaat MFT
Een van de functies die door apparaatMFT's worden ondersteund, is de mogelijkheid om een willekeurig aantal invoerstromen op te nemen en een ander aantal uitvoerstromen beschikbaar te maken.
Omdat voor de profiellogica pin-ID vereist is om de profielfiltergegevens te identificeren, moet de pin-mapping consistent zijn.
De IMFSensorProfileCollection die door het apparaat-MFT is gepubliceerd, moet de pinnummering gebruiken op basis van de uitvoerpin van de DMFT. De Pin-ID moet in dit geval overeenkomen met het kenmerk MF_DEVICESTREAM_STREAM_ID dat aanwezig is in de attributenopslag van de uitvoerpin.
Om mogelijke conflict tussen pin-id's te voorkomen, moet de DMFT de MF_DEVICESTREAM_TRANSFORM_STREAM_ID verwijderen. De MF_DEVICESTREAM_TRANSFORM_STREAM_ID wordt alleen gepresenteerd door de DevProxy en alleen zinvol binnen de context van de DevProxy. Voor een M-in, N-out DMFT is de MF_DEVICESTREAM_TRANSFORM_STREAM_ID niet gedefinieerd.