Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Rozszerzone kontrolki używają mechanizmu KSPROPERTY , aby uwidocznić kontrolki aparatu w aplikacji.
Poniższa lista standardowych kontrolek rozszerzonych (zdefiniowanych przez program Media Foundation) umożliwia korzystanie z dodatkowych funkcji aparatu systemu Windows:
Niektóre kontrolki są widoczne dla aplikacji jako kontrolki asynchroniczne, a inne są widoczne jako kontrolki synchroniczne.
Kontrolki synchroniczne
W przypadku tych kontrolek potok przechwytywania wystawia strukturę sterowania kamerą KSPROPERTY i oczekuje, że sterownik synchronicznie zwróci żądanie.
Kontrolki asynchroniczne
W przypadku tych kontrolek potok przechwytywania wystawia ksPROPERTY, włącza zdarzenie KSEVENT skojarzone z tą właściwością i czeka na zdarzenie, aby uzyskać sygnał. Sterownik musi wykonać synchronicznie parametr KSPROPERTY i użyć go jako wyzwalacza, aby uruchomić operację asynchroniczną. Po zakończeniu operacji asynchronicznej sterownik musi zasygnalizować powiązane zdarzenie KSEVENT, na które oczekuje potok przechwytywania. Rurociąg przechwytywania powiadamia aplikację o zakończeniu przetwarzania w momencie odebrania sygnału.
Jeśli można anulować kontrolkę asynchroniczną, musi określić flagę KSCAMERA_EXTENDEDPROP_FLAG_CANCELOPERATION w kontrolce. Jeśli nie można anulować kontrolki, operacja kontrolki nie może przekraczać 5 ms.
Te rozszerzone kontrolki są częścią następującego zestawu właściwości KS zdefiniowanego w 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);
Metadane
Aby pobrać metadane, składnik trybu użytkownika (DevProxy) musi wysłać zapytanie do sterownika pod kątem wymagania buforu metadanych. Gdy składnik trybu użytkownika ma te informacje, przydziela odpowiedni bufor metadanych dla sterownika do wypełnienia i powrotu do składnika trybu użytkownika.
Identyfikator właściwości KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA zdefiniowany w wyliczeniu KSPROPERTY_CAMERACONTROL_EXTENDED_PROPERTY jest używany przez klienta do wykonywania zapytań dotyczących wymagań buforu metadanych, takich jak wymagany rozmiar metadanych, wymagania dotyczące wyrównania pamięci i żądany typ alokacji pamięci dla alokacji buforu metadanych.
Gdy składnik trybu użytkownika uzyskał wymagania dotyczące buforu metadanych od sterownika, przydziela odpowiednio dobrany bufor metadanych z żądanym wyrównaniem pamięci z żądanej puli pamięci. Te bufory - bufor metadanych oraz rzeczywisty bufor ramki - zostaną wysłane do sterownika w celu przetworzenia, a po wypełnieniu zostaną zwrócone do składnika trybu użytkownika. W przypadku scenariuszy obejmujących wiele zdjęć, odpowiedni bufor metadanych został przydzielony i dostarczony do sterownika aparatu dla każdego przydzielonego bufora ramki.
Struktura KSSTREAM_METADATA_INFO wraz z następującą flagą służy do wysyłania buforu metadanych do sterownika.
#define KSSTREAM_HEADER_OPTIONSF_METADATA 0x00001000
Gdy bufor (metadane i ramka) jest kolejkowany do sterownika, usługa DevProxy wysyła standardową strukturę KSSTREAM_HEADER , a następnie strukturę KS_FRAME_INFO , a następnie strukturę KSSTREAM_METADATA_INFO . Usługa DevProxy będzie dodatkowo maskować KSSTREAM_HEADER.OptionFlags z KSSTREAM_HEADER_OPTIONSF_METADATA przed przekazaniem buforu do sterownika.
Jeśli sterownik nie obsługuje metadanych lub jeśli KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA nie jest zaimplementowany, kontrolka właściwości KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA zakończy się niepowodzeniem. W takim przypadku usługa DevProxy nie przydzieli buforu metadanych, a ładunek przekazywany do sterownika z usługi DevProxy nie będzie zawierać struktury KSSTREAM_METADATA_INFO .
Jeśli sterownik obsługuje metadane, a klient nie chce żadnych metadanych, usługa DevProxy nie przydzieli buforu metadanych ani nie przekaże KSSTREAM_METADATA_INFO podczas wysyłania buforu do sterownika. To zachowanie zmniejsza niepotrzebną alokację pamięci metadanych, jeśli aplikacja nie chce metadanych na danym numerze PIN.
Poniższe struktury opisują układ elementów metadanych, które mają być wypełnione przez sterownik aparatu w buforze metadanych.
Poniższa lista zawiera układ elementu metadanych. Musi to być wyrównane do 8 bajtów.
Metadane
Metadane potwierdzenia zdjęcia są identyfikowane przez MetadataId_PhotoConfirmation. Jeśli jest obecna, wskazuje, że skojarzona klatka podglądu jest klatką potwierdzenia zdjęcia. Metadane potwierdzenia zdjęć są analizowane przez devProxy.
Metadane niestandardowe są identyfikowane przez identyfikator metadataid rozpoczynający się od MetadataId_Custom_Start. Niestandardowy element metadanych może zawierać obiekt blob metadanych, który może być stanem koncentracji uwagi i/lub twarzy wykrytymi dla numeru PIN podglądu, EXIF i/lub metadanych producenta OEM dla numeru PIN obrazu. Dokładny format niestandardowego obiektu blob jest określany przez producenta OEM, który implementuje sterownik i MFT0. MFT0 jest odpowiedzialny za parsowanie niestandardowego obiektu blob i dołączanie każdego elementu metadanych jako atrybut, zgrupowany w zbiorze atrybutów MFSampleExtension_CaptureMetadata, w formacie czytelnym dla potoku przechwytywania MF i/lub WinRT.
Następujące atrybuty IMFAttributes są zdefiniowane w pliku mfapi.h. Są one wymagane przez potok przechwytywania MF i/lub WinRT. Należy pamiętać, że MFT0 nie ustawia żadnych atrybutów IMFAttributes dla potwierdzenia zdjęcia, ponieważ klatka potwierdzająca zdjęcie nie będzie przechodzić poza DevProxy.
| Atrybut (GUID) | Typ danych |
|---|---|
| MF_CAPTURE_METADATA_FOCUSSTATE | UINT32 |
| MF_CAPTURE_METADATA_FACEROIS | Blob |
| MF_CAPTURE_METADATA_FRAME_RAWSTREAM | IUnknown |
MF_CAPTURE_METADATA_FRAME_RAWSTREAM IMFAttributes są tworzone i dołączane do MFSampleExtension_CaptureMetadata przez DevProxy, który zawiera wskaźnik do interfejsu IMFMediaBuffer skojarzonego z nieprzetworzonym buforem metadanych (KSSTREAM_METADATA_INFO.Data).
Gdy MFT0 odbiera IMFSample, pobiera nieprzetworzony bufor metadanych z MF_CAPTURE_METADATA_FRAME_RAWSTREAM i analizuje wszelkie dodatkowe niestandardowe elementy metadanych, takie jak stan fokusu, konwertuje je na odpowiednie atrybuty IMFAttributes zdefiniowane powyżej i dołącza je do MFSampleExtension_CaptureMetadata zestawu atrybutów. Następujące atrybuty IMFAttributes muszą być przenoszone przez potok MF oraz wszystkie inne dostarczone przez strony trzecie MFT:
| Nazwa | Typ |
|---|---|
| MFSampleExtension_CaptureMetadata | IUnknown (IMFAttributes) |
| MFSampleExtension_EOS | UINT32 (wartość logiczna) |
| MFSampleExtension_PhotoThumbnail | IUnknown (IMFMediaBuffer) |
| MFSampleExtension_PhotoThumbnailMediaType | IUnknown (IMFMediaType) |
Aby uzyskać dostęp do nieprzetworzonego buforu metadanych, MFT0 wykonuje następujące czynności:
Wywołuje metodę GetUnknown na MFSampleExtension_CaptureMetadata z interfejsu IMFSample, aby uzyskać interfejs IMFAttributes dla torby atrybutów.
Wywołuje metodę GetUnknown na MF_CAPTURE_METADATA_FRAME_RAWSTREAM z interfejsu IMFAttributes uzyskanego z poprzedniego kroku, aby uzyskać interfejs IMFMediaBuffer.
Wywołuje funkcję Lock w celu pobrania nieprzetworzonego buforu metadanych skojarzonego z usługą IMFMediaBuffer.
Aby dodać wymagane atrybuty IMFAttributes do zestawu atrybutów MFSampleExtension_CaptureMetadata, MFT0 wykonuje następujące czynności:
Wywołuje GetUnknown na MFSampleExtension_CaptureMetadata z interfejsu IMFSample, aby uzyskać interfejs IMFAttributes dla zbioru atrybutów.
Wywołuje SetUINT32, SetBlob lub SetUnknown na MF_CAPTURE_METADATA_XXX z interfejsu IMFAttributes uzyskanego w poprzednim kroku w oparciu o identyfikator GUID i typ danych określony w powyższej tabeli.
Obowiązkowe atrybuty metadanych
Pełną listę dostępnych atrybutów metadanych można znaleźć w temacie Capture Stats Metadata Attributes (Atrybuty metadanych statystyki przechwytywania)
Priorytet koncentracji uwagi
Identyfikator właściwości KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUSPRIORITY jest jedyną kontrolką skojarzona z priorytetem DDI fokusu.
Stan koncentracji uwagi
Identyfikator właściwości KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUSSTATE jest jedyną kontrolką skojarzoną ze stanem fokusu DDI.
Rozszerzony region zwrotu z inwestycji
Następujące identyfikatory właściwości to kontrolki skojarzone z ROI DDI:
Potwierdzenie zdjęcia
Identyfikator właściwości KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOCONFIRMATION jest jedyną kontrolą skojarzoną z DDI potwierdzenia zdjęcia.
Podtryb sekwencji zdjęć
Identyfikator właściwości KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOMODE jest jedyną kontrolą skojarzoną z sekwencją zdjęć DDI.
Koder EXIF i HW JPEG
Pipeline nie jest wymagany do przetwarzania ani zniekształcania jakichkolwiek danych EXIF dla kodera HW JPEG; dlatego format danych EXIF jest dostarczany przez sterownik, MFT0 i kodery HW JPEG OEM. Partnerzy OEM mają możliwość zdefiniowania każdego niestandardowego identyfikatora GUID atrybutu oraz rodzaju wariantu atrybutu EXIF i dołączenia go do pakietu atrybutów MFSampleExtension_CaptureMetaData, z którego będą korzystać składniki OEM. Jeśli dostępny jest koder HW JPEG, komponent ujścia obrazu potoku załaduje koder HW JPEG i skonfiguruje dane EXIF przechowywane w MFSampleExtension_CaptureMetaData zestaw atrybutów na koder HW JPEG jako opcję kodera EXIF przy użyciu metody IPropertyBag2::Write.
Zbiór właściwości opcji kodowania zawiera tablicę struktur PROPBAG2 określających dostępne opcje kodowania. Opcja kodera EXIF ustawiona na sprzętowy koder JPEG jest identyfikowana przez następującą właściwość w zbiorze właściwości opcji kodera:
| Nazwa właściwości | VARTYPE | Wartość | Odpowiednie koderki |
|---|---|---|---|
| SampleMetaData | VT_UNKNOWN | Wskaźnik do interfejsu IMFAttributes dla MFSampleExtension_CaptureMetaData, zbioru atrybutów, który zawiera podrzędny atrybut OEM wraz z danymi EXIF. | JPEG |
Worek atrybutów MFSampleExtension_CaptureMetaData może zawierać tylko dowolny atrybut podrzędny EXIF zdefiniowany przez producenta OEM, który koder MFT0 i HW JPEG może odczytywać w celu przechowywania danych EXIF. Aby przekazać dane EXIF ze sterownika do kodera HW JPEG, sterownik i MFT0 muszą wykonać następujące czynności:
Sterownik dostarcza niestandardowe metadane EXIF w buforze metadanych udostępnionym przez pipeline. Jest on dołączony do MFSampleExtension_CaptureMetadata jako MF_CAPTURE_METADATA_FRAME_RAWSTREAM IMFAttribute przez DevProxy, gdy próbka jest zwracana do DevProxy.
Gdy MFT0 odbiera IMFSample, pobiera nieprzetworzony bufor metadanych z MF_CAPTURE_METADATA_FRAME_RAWSTREAM, analizuje niestandardowy element metadanych EXIF, konwertuje go na IMFAttribute zdefiniowany przez producenta OEM i dołącza go do zbioru atrybutów MFSampleExtension_CaptureMetadata.
Aby przekazać dane EXIF z MFT0 do kodera HW JPEG, ujście zdjęć potoku wykonuje następujące czynności:
Wywołuje GetUnknown na MFSampleExtension_CaptureMetadata z IMFSample, aby uzyskać interfejs IMFAttributes dla zbioru atrybutów, gdy IMFSample jest odbierany.
Wywołuje metodę IPropertyBag2::Write, aby skonfigurować właściwość opcji kodera, zidentyfikowaną przez SampleMetadata, dla sprzętowego kodera JPEG. Właściwość opcji enkodera zawiera interfejs IMFAttributes uzyskany w poprzednim kroku. Ten interfejs zawiera wszystkie atrybuty podrzędne niestandardowe, w tym atrybut podrzędny OEM EXIF, oraz standardowe atrybuty podrzędne w sekcji Metadane omówione wcześniej w tym temacie.
Aby pobrać dane EXIF do dalszego przetwarzania, koder HW JPEG wykonuje następujące czynności:
Wywołuje metodę IPropertyBag2::Read, aby pobrać wartość właściwości zidentyfikowaną przez nazwę właściwości SampleMetadata i typ VT_UNKNOWN. Po zwróceniu VARIANT.punkVal otrzymuje interfejs IMFAttributes dla MFSampleExtension_CaptureMetadata.
Wywołuje metodę GetBlob lub GetUnknown dla atrybutu podrzędnego OEM EXIF z interfejsu uzyskanego w poprzednim kroku, aby uzyskać obiekt blob danych EXIF na podstawie identyfikatora GUID i typu danych atrybutu podrzędnego OEM EXIF.
Miniatura
Dla sterownika aparatu nie jest wymagane, aby MFT0 tworzył jakąkolwiek miniaturę. Oczekuje się, że aplikacja aparatu wygeneruje własną miniaturę. Miniaturę można wygenerować na podstawie obrazu potwierdzającego zdjęcie, kodera HW JPEG lub zmiany rozmiaru obrazu o pełnym rozmiarze. Dotyczy to deweloperów aplikacji. Aby zachować zgodność interfejsu API i aplikacji z aplikacjami systemu Windows 8.1, sterownik aparatu nie może zaimplementować kontrolki KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOTHUMBNAIL .
ISO dla liczb całkowitych
Identyfikator właściwości KSPROPERTY_CAMERACONTROL_EXTENDED_ISO_ADVANCED jest jedyną kontrolką skojarzona z liczbą całkowitą ISO DDI.
Fokus zaawansowany
Identyfikator właściwości KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUSMODE jest jedyną kontrolką skojarzoną z liczbą całkowitą ISO DDI.
Flash
Identyfikator właściwości KSPROPERTY_CAMERACONTROL_EXTENDED_FLASHMODE jest jedyną kontrolą związaną z interfejsem DDI lampy błyskowej.
Powiększenie
Identyfikator właściwości KSPROPERTY_CAMERACONTROL_EXTENDED_ZOOM jest jedyną kontrolą skojarzoną z zoom DDI.
Tryb sceny
Identyfikator właściwości KSPROPERTY_CAMERACONTROL_EXTENDED_SCENEMODE to jedyna kontrola skojarzona z trybem sceny DDI.