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.
Uitgebreide besturingselementen maken gebruik van het KSPROPERTY-mechanisme om camerabesturingselementen beschikbaar te maken voor de toepassing.
De volgende lijst met gestandaardiseerde uitgebreide besturingselementen (gedefinieerd door Media Foundation) maken extra Windows-camerafuncties mogelijk:
Sommige besturingselementen zijn beschikbaar voor toepassingen als asynchrone besturingselementen en andere worden weergegeven als synchrone besturingselementen.
Synchrone bedieningselementen
Voor deze besturingselementen geeft de opnamepijplijn een KSPROPERTY-camerabesturingsstructuur uit en verwacht dat het stuurprogramma de aanvraag synchroon retourneert.
Asynchrone besturingselementen
Voor deze besturingselementen geeft de capture-pijplijn een KSPROPERTY uit, schakelt een KSEVENT in dat aan die eigenschap is gekoppeld en wacht tot de gebeurtenis wordt gesignaleerd. Het stuurprogramma moet de KSPROPERTY synchroon voltooien en dat als trigger gebruiken om de asynchrone bewerking te starten. Wanneer de asynchrone bewerking is voltooid, moet de driver het bijbehorende KSEVENT signaleren waarop de capture-pijplijn wacht. De capture-pijplijn meldt de toepassing over de voltooiing van de bewerking wanneer het signaal wordt ontvangen.
Als een asynchroon bedieningselement kan worden geannuleerd, moet het de vlag KSCAMERA_EXTENDEDPROP_FLAG_CANCELOPERATION in het bedieningselement vermelden. Als het besturingselement niet kan worden geannuleerd, mag de bewerking van het besturingselement niet groter zijn dan 5 ms.
Deze uitgebreide besturingselementen maken deel uit van de volgende KS-eigenschappenset die is gedefinieerd in ksmedia.h:
#define STATIC_KSPROPERTYSETID_ExtendedCameraControl \
0x1CB79112, 0xC0D2, 0x4213, 0x9C, 0xA6, 0xCD, 0x4F, 0xDB, 0x92, 0x79, 0x72
DEFINE_GUIDSTRUCT("1CB79112-C0D2-4213-9CA6-CD4FDB927972", KSPROPERTYSETID_ExtendedCameraControl);
#define KSPROPERTYSETID_ExtendedCameraControl DEFINE_GUIDNAMED(KSPROPERTYSETID_ExtendedCameraControl);
Metagegevens
Als u metagegevens wilt ophalen, moet het onderdeel gebruikersmodus (DevProxy) het stuurprogramma opvragen voor de vereiste metagegevensbuffer. Zodra het onderdeel van de gebruikersmodus deze informatie heeft, wordt de juiste metagegevensbuffer toegewezen voor het stuurprogramma om het onderdeel van de gebruikersmodus in te vullen en terug te keren.
De KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA eigenschaps-id die is gedefinieerd in de KSPROPERTY_CAMERACONTROL_EXTENDED_PROPERTY opsomming, wordt door de client gebruikt om te zoeken naar de vereisten voor de metagegevensbuffer, zoals de vereiste metagegevensgrootte, vereisten voor geheugenuitlijning en het gewenste type geheugentoewijzing, voor toewijzing van metagegevensbuffers.
Zodra het onderdeel van de gebruikersmodus de vereisten voor de metagegevensbuffer van het stuurprogramma heeft verkregen, wordt de metagegevensbuffer met de juiste grootte toegewezen met de gewenste geheugenuitlijning van de gewenste geheugengroep. Deze metagegevensbuffer, samen met de werkelijke framebuffer, wordt naar het stuurprogramma verzonden om te voldoen en vervolgens terug te keren naar het onderdeel van de gebruikersmodus wanneer deze is ingevuld. Voor scenario's met meerdere shots wordt een bijbehorende metagegevensbuffer toegewezen en aan het camerastuurprogramma geleverd voor elke toegewezen framebuffer.
De KSSTREAM_METADATA_INFO structuur, samen met de volgende vlag, wordt gebruikt om de metagegevensbuffer naar het stuurprogramma te verzenden.
#define KSSTREAM_HEADER_OPTIONSF_METADATA 0x00001000
Zodra de buffer (metagegevens en frame) in de wachtrij staat, verzendt DevProxy een standaardstructuur KSSTREAM_HEADER , gevolgd door een KS_FRAME_INFO structuur, gevolgd door een KSSTREAM_METADATA_INFO structuur. DevProxy zal KSSTREAM_HEADER.OptionFlags verder maskeren met KSSTREAM_HEADER_OPTIONSF_METADATA voordat de buffer aan het stuurprogramma wordt doorgegeven.
Als het stuurprogramma geen metagegevens ondersteunt of als KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA niet is geïmplementeerd, mislukt het eigenschapsbesturingselement KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA . In dit geval wijst DevProxy geen metagegevensbuffer toe en de payload die DevProxy aan het stuurprogramma doorgeeft, bevat niet de KSSTREAM_METADATA_INFO structuur.
Als het stuurprogramma metagegevens ondersteunt en de client geen metagegevens wil, wijst DevProxy geen metagegevensbuffer toe of geeft KSSTREAM_METADATA_INFO door wanneer de buffer naar het stuurprogramma wordt verzonden. Dit gedrag vermindert de onnodige geheugentoewijzing van metagegevens als een app geen metagegevens op een bepaalde pincode wil.
De volgende structuren beschrijven de indeling van de metagegevensitems die moeten worden gevuld door het camerastuurprogramma in de metagegevensbuffer.
De onderstaande lijst bevat de indeling van een metagegevensitem. Dit moet op 8 bytes worden uitgelijnd.
Metagegevens
De metagegevens van de fotobevestiging worden geïdentificeerd door MetadataId_PhotoConfirmation. Als dit aanwezig is, geeft het aan dat het voorbeeldframe een fotobevestigingsframe is. Metagegevens voor bevestiging van foto's worden geparseerd door devProxy.
De aangepaste metagegevens worden geïdentificeerd door een MetadataId die begint vanaf MetadataId_Custom_Start. Het aangepaste metagegevensitem kan een verzameling metagegevens bevatten, zoals een focusstatus en/of gezichtsherkenning voor de voorbeeldpin, EXIF- en/of de OEM-metagegevens voor een afbeeldingspin. De exacte indeling van de aangepaste blob wordt bepaald door de OEM die het stuurprogramma implementeert en MFT0. De MFT0 is verantwoordelijk voor het parseren van de aangepaste blob en het koppelen van elk metagegevensitem als een attribuut dat is gegroepeerd onder de attributenzak MFSampleExtension_CaptureMetadata in een indeling die leesbaar is voor de MF-capture-pijplijn en/of WinRT.
De volgende IMFAttributes zijn gedefinieerd in mfapi.h. Deze zijn vereist voor de MF-capture-pijplijn en/of WinRT. Houd er rekening mee dat MFT0 geen IMFAttributes instelt voor fotobevestiging, omdat het fotobevestigingskader niet verder stroomt dan DevProxy.
| Kenmerk (GUID) | Gegevenstype |
|---|---|
| MF_CAPTURE_METADATA_FOCUSSTATE | UINT32 |
| MF_CAPTURE_METADATA_FACEROIS | Klont |
| MF_CAPTURE_METADATA_FRAME_RAWSTREAM | IUnknown |
De MF_CAPTURE_METADATA_FRAME_RAWSTREAM IMFAttributes worden gemaakt en gekoppeld aan MFSampleExtension_CaptureMetadata door de DevProxy, die een pointer bevat naar de IMFMediaBuffer-interface die is gekoppeld aan de buffer voor onbewerkte metagegevens (KSSTREAM_METADATA_INFO.Data).
Wanneer de MFT0 een IMFSample ontvangt, krijgt deze de onbewerkte metagegevensbuffer van de MF_CAPTURE_METADATA_FRAME_RAWSTREAM en parseert eventuele aanvullende aangepaste metagegevensitems, zoals de focusstatus, en converteert deze naar overeenkomstige IMFAttributes die hierboven zijn gedefinieerd en koppelt deze aan de MFSampleExtension_CaptureMetadata kenmerktas. De volgende IMFAttributes moeten worden overgedragen door de MF-pijplijn en eventuele door derden geleverde MFTs:
| Naam | Typologie |
|---|---|
| MFSampleExtension_CaptureMetadata | IUnknown (IMFAttributes) |
| MFSampleExtension_EOS | UINT32 (Booleaanse waarde) |
| MFSampleExtension_PhotoThumbnail | IUnknown (IMFMediaBuffer) |
| MFSampleExtension_PhotoThumbnailMediaType | IUnknown (IMFMediaType) |
Voor toegang tot de buffer voor onbewerkte metagegevens doet de MFT0 het volgende:
Roept GetUnknown aan op MFSampleExtension_CaptureMetadata van de IMFSample-interface om de IMFAttributes-interface voor de kenmerktas op te halen.
Roept GetUnknown aan op MF_CAPTURE_METADATA_FRAME_RAWSTREAM van de IMFAttributes-interface die is verkregen uit de vorige stap om de IMFMediaBuffer-interface te verkrijgen.
Roept Lock aan om de onbewerkte metagegevensbuffer op te halen die is gekoppeld aan IMFMediaBuffer.
Als u de vereiste IMFAttributes wilt toevoegen aan de MFSampleExtension_CaptureMetadata kenmerktas, doet de MFT0 het volgende:
Roept GetUnknown aan op MFSampleExtension_CaptureMetadata van de IMFSample-interface om de IMFAttributes-interface voor de kenmerktas op te halen.
Roept SetUINT32, SetBlob of SetUnknown aan op MF_CAPTURE_METADATA_XXX van de IMFAttributes-interface die is verkregen uit de vorige stap op basis van de GUID en het gegevenstype dat is opgegeven in de bovenstaande tabel.
Verplichte metagegevenskenmerken
De volledige lijst met beschikbare metagegevenskenmerken vindt u op Capture Stats Metadata Attributes
Prioriteit van focus
De KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUSPRIORITY eigenschaps-id is het enige besturingselement dat is gekoppeld aan de DDI met focusprioriteit.
Focus-toestand
De KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUSSTATE eigenschaps-id is het enige besturingselement dat is gekoppeld aan de focusstatus-DDI.
Uitgebreide regio van interesse
De volgende eigenschaps-id's zijn de besturingselementen die zijn gekoppeld aan de ROI DDI:
Fotobevestiging
De KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOCONFIRMATION eigenschaps-ID is de enige besturing die is gekoppeld aan de DDI voor fotobevestiging.
Submodus van fotoreeks
De KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOMODE eigenschap-ID is het enige bedieningselement dat is gekoppeld aan de DDI van de fotoreeks.
EXIF- en HW JPEG-coderingsprogramma
De pijplijn is niet vereist om EXIF-gegevens voor de HW JPEG-encoder te verwerken of te vervormen; daarom wordt de EXIF-indeling geleverd door het stuurprogramma, MFT0 en de OEM HW JPEG-encoder. OEM-partners kunnen elke aangepaste kenmerk-GUID en variatietype voor het EXIF-kenmerk definiëren en deze koppelen aan de MFSampleExtension_CaptureMetaData kenmerklijst, zodat deze kan worden gebruikt door de OEM-onderdelen. Als er een HW JPEG-encoder beschikbaar is, zal de pipeline photo sink-component de HW JPEG-encoder laden en de EXIF-gegevens die zijn vastgelegd in de MFSampleExtension_CaptureMetaData attribuutzak instellen op de HW JPEG-encoder als een EXIF-encoderoptie met behulp van de methode IPropertyBag2::Write.
De eigenschapsverzameling van de encoderoptie bevat een reeks PROPBAG2 structuren die de beschikbare coderingsoptie-eigenschappen opgeven. De optie EXIF-encoder die is ingesteld op de HW JPEG-encoder, wordt geïdentificeerd door de volgende eigenschap in de eigenschapstas van de encoderoptie:
| Naam van de eigenschap | VARIABELETYPE | Waarde | Toepasselijke codecs |
|---|---|---|---|
| SampleMetaData | VT_UNKNOWN | Wijs een IMFAttributes-interface aan voor MFSampleExtension_CaptureMetaData kenmerkzak die een OEM-subkenmerk bevat met de EXIF-gegevens. | JPEG |
De MFSampleExtension_CaptureMetaData kenmerktas mag alleen een DOOR OEM gedefinieerd EXIF-subkenmerk bevatten dat de MFT0- en HW JPEG-encoder kan lezen om de EXIF-gegevens op te bevatten. Als u EXIF-gegevens van het stuurprogramma wilt doorgeven aan de HW JPEG-encoder, moet het stuurprogramma en MFT0 het volgende doen:
Het stuurprogramma biedt aangepaste EXIF-metagegevens in de metagegevensbuffer die door de pijplijn wordt geleverd. Dit is gekoppeld aan MFSampleExtension_CaptureMetadata als een MF_CAPTURE_METADATA_FRAME_RAWSTREAM IMFAttribute door DevProxy wanneer het voorbeeld wordt teruggestuurd naar DevProxy.
Wanneer de MFT0 een IMFSample ontvangt, krijgt deze de onbewerkte metagegevensbuffer van MF_CAPTURE_METADATA_FRAME_RAWSTREAM en parseert het aangepaste EXIF-metagegevensitem en converteert het naar een door OEM gedefinieerd IMFAttribute en koppelt deze aan het MFSampleExtension_CaptureMetadata kenmerkenpakket.
De pijplijnfotosink voert de volgende stappen uit om EXIF-gegevens van de MFT0 naar de HW JPEG-encoder door te geven:
Roept GetUnknown aan op MFSampleExtension_CaptureMetadata van IMFSample om de IMFAttributes-interface voor de kenmerktas op te halen wanneer IMFSample wordt ontvangen.
Roept IPropertyBag2::Write aan om de eigenschap encoderoptie, geïdentificeerd door SampleMetadata, in te stellen op de HW JPEG-encoder. De eigenschap encoder-optie bevat de IMFAttributes-interface die is verkregen uit de vorige stap. Deze interface bevat alle aangepaste subkenmerken, waaronder het SUBkenmerk OEM EXIF en de gestandaardiseerde subkenmerken in de sectie Metagegevens die eerder in dit onderwerp zijn besproken.
Als u de EXIF-gegevens voor verdere verwerking wilt ophalen, doet de HW JPEG-encoder het volgende:
Roept IPropertyBag2::Lees om de eigenschapswaarde op te halen voor de eigenschap die is geïdentificeerd door de naam van de eigenschap SampleMetadata en VT_UNKNOWN type. Als VARIANT.punkVal wordt geretourneerd, ontvangt het de IMFAttributes-interface voor MFSampleExtension_CaptureMetadata.
Roept GetBlob of GetUnknown aan op het OEM EXIF-subkenmerk van de interface die is verkregen uit de vorige stap om de EXIF-gegevensblob op te halen op basis van de GUID en het gegevenstype van het OEM EXIF-subkenmerk.
Miniatuurafbeelding
MFT0 is niet vereist om een miniatuurweergave voor het camera-stuurprogramma te produceren. De camera-app genereert naar verwachting een eigen miniatuur. De miniatuur kan worden geproduceerd op basis van de bevestigingsfoto, HW JPEG-encoder of door het verkleinen van een afbeelding op volledige grootte. Dit is aan de app-ontwikkelaars. Voor het onderhouden van API- en app-compatibiliteit met Windows 8.1-apps mag het camerastuurprogramma het besturingselement KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOTHUMBNAIL niet implementeren.
ISO voor geheel getal
De KSPROPERTY_CAMERACONTROL_EXTENDED_ISO_ADVANCED eigenschap-ID is de enige controle gekoppeld aan de integer ISO DDI.
Geavanceerde focus
De KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUSMODE eigenschaps-id is het enige besturingselement dat is gekoppeld aan het iso-DDI-geheel getal.
Flits
De eigenschaps-ID KSPROPERTY_CAMERACONTROL_EXTENDED_FLASHMODE is het enige besturingselement dat is gekoppeld aan de flits DDI.
Zoom
De KSPROPERTY_CAMERACONTROL_EXTENDED_ZOOM eigenschaps-id is het enige besturingselement dat is gekoppeld aan de zoom-DDI.
Scènemodus
De KSPROPERTY_CAMERACONTROL_EXTENDED_SCENEMODE eigenschap-ID is de enige besturingsoptie die aan de scènemodus-DDI is gekoppeld.