Aracılığıyla paylaş


Genişletilmiş kamera denetimleri

Genişletilmiş denetimler, kamera denetimlerini uygulamaya göstermek için KSPROPERTY mekanizmasını kullanır.

Aşağıdaki standartlaştırılmış genişletilmiş denetimlerin listesi (Media Foundation tarafından tanımlanır) ek Windows kamera özelliklerini etkinleştirir:

Bazı denetimler uygulamalara zaman uyumsuz denetimler olarak, bazıları ise zaman uyumlu denetimler olarak sunulur.

Zaman uyumlu denetimler

Bu denetimler için yakalama işlem hattı bir KSPROPERTY kamera denetim yapısı oluşturur ve sürücünün isteği zaman uyumlu bir şekilde döndürmesini bekler.

Asenkron denetimler

Bu denetimler için yakalama işlem hattı bir KSPROPERTY verir, bu özellik ile ilişkilendirilmiş bir KSEVENT'i etkinleştirir ve olayda sinyal almayı bekler. Sürücünün KSPROPERTY'yi zaman uyumlu olarak tamamlaması ve zaman uyumsuz işlemi başlatmak için bunu tetikleyici olarak kullanması gerekir. Zaman uyumsuz işlemin tamamlanmasının ardından, sürücünün yakalama işlem hattının beklediği ilişkili KSEVENT'i tetiklemesi gerekir. Yakalama işlem hattı, sinyali aldığında uygulamaya işlemin tamamlanmasını bildirir.

Zaman uyumsuz bir denetim iptal edilebilirse, denetimde KSCAMERA_EXTENDEDPROP_FLAG_CANCELOPERATION bayrağını belirtmelidir. Denetim iptal edilemiyorsa, denetimin işlemi 5 ms'yi aşmamalıdır.

Bu genişletilmiş denetimler, ksmedia.h dosyasında tanımlanan aşağıdaki KS özellik kümesinin bir parçasıdır:

#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);

Meta veriler

Meta verileri almak için kullanıcı modu bileşeninin (DevProxy) meta veri arabelleği gereksinimi için sürücüyü sorgulaması gerekir. Kullanıcı modu bileşeni bu bilgilere sahip olduktan sonra, sürücünün doldurması ve kullanıcı modu bileşenine geri dönmesi için uygun meta veri arabelleği ayırır.

KSPROPERTY_CAMERACONTROL_EXTENDED_PROPERTY numaralandırmasında tanımlanan KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA özellik kimliği, istemci tarafından meta veri arabelleği ayırma için gerekli meta veri boyutu, bellek hizalama gereksinimleri ve istenen bellek ayırma türü gibi meta veri arabelleği gereksinimlerini sorgulamak için kullanılır.

Kullanıcı modu bileşeni, sürücüden meta veri arabelleği gereksinimlerini aldıktan sonra, istenen bellek havuzundan istenen bellek hizalamasıyla uygun şekilde boyutlandırılmış meta veri arabelleği ayırır. Gerçek çerçeve arabelleğiyle birlikte bu meta veri arabelleği, yerine getirilmesi için sürücüye gönderilir ve doldurulduğunda kullanıcı modu bileşenine geri döndürülür. Çok çekimli senaryolar için, karşılık gelen bir meta veri arabelleği ayrılır ve her bir ayrılan çerçeve arabelleği için kamera sürücüsüne teslim edilir.

KSSTREAM_METADATA_INFO yapısı, aşağıdaki bayrakla birlikte, meta veri arabelleğinin sürücüye gönderilmesi için kullanılır.

#define KSSTREAM_HEADER_OPTIONSF_METADATA           0x00001000

Arabellek (meta veri + çerçeve) sürücüye kuyruğa alındıktan sonra DevProxy standart bir KSSTREAM_HEADER yapısı, ardından bir KS_FRAME_INFO yapısı ve ardından bir KSSTREAM_METADATA_INFO yapısı gönderir. DevProxy, KSSTREAM_HEADER.OptionFlagsKSSTREAM_HEADER_OPTIONSF_METADATA ile maskeleyerek arabelleği sürücüye iletmeden önce.

Sürücü meta verileri desteklemiyorsa veya KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA uygulanmadıysa , KSPROPERTY_CAMERACONTROL_EXTENDED_METADATA özellik denetimi başarısız olur. Bu durumda DevProxy bir meta veri arabelleği ayırmaz ve DevProxy'den sürücüye geçirilen yük KSSTREAM_METADATA_INFO yapısını içermez.

Sürücü meta verileri destekliyorsa ve istemci herhangi bir meta veri istemiyorsa, DevProxy ne meta veri arabelleği ayırır ne de arabelleği sürücüye gönderirken KSSTREAM_METADATA_INFO iletir. Bu davranış, bir uygulama belirli bir pin üzerinde meta veri istemiyorsa gereksiz meta veri bellek ayırmayı azaltır.

Aşağıdaki yapılar, meta veri arabelleğindeki kamera sürücüsü tarafından doldurulacak meta veri öğelerinin düzenini açıklar.

Aşağıdaki liste bir meta veri öğesinin düzenini içerir. Bunun 8 bayt hizalanmış olması gerekir.

Fotoğraf onayı meta verileri MetadataId_PhotoConfirmation tarafından tanımlanır. Mevcut olduğunda, ilişkili önizleme çerçevesinin bir fotoğraf onay çerçevesi olduğunu gösterir. Fotoğraf onayı meta verileri DevProxy tarafından ayrıştırılır.

Özel meta veriler, MetadataId_Custom_Start başlayan bir MetadataId ile tanımlanır. Özel meta veri öğesi, önizleme pimi için bir odak durumu ve/veya algılanan yüzleri ve görüntü pini için EXIF ve/veya OEM meta verilerini içeren bir meta veri blobu içerebilir. Özel blobun tam biçimi, sürücüyü ve MFT0'yi uygulayan OEM tarafından belirlenir. MFT0, özel blobu ayrıştırıp her meta veri öğesini MF yakalama işlem hattı ve/veya WinRT tarafından okunabilir bir biçimde MFSampleExtension_CaptureMetadata öznitelik paketi altında gruplandırılmış bir öznitelik olarak eklemekle sorumludur.

Aşağıdaki IMFAttributes mfapi.h dosyasında tanımlanmıştır. Bunlar MF yakalama işlem hattı ve/veya WinRT için gereklidir. MFT0'nin, fotoğraf onay çerçevesi DevProxy'nin ötesine geçmeyeceğinden, fotoğraf onayı için herhangi bir IMFAttributes ayarlamadığını dikkate alın.

Öznitelik (GUID) Veri türü
MF_CAPTURE_METADATA_FOCUSSTATE UINT32
MF_CAPTURE_METADATA_FACEROIS Damlacık
MF_CAPTURE_METADATA_FRAME_RAWSTREAM IUnknown

MF_CAPTURE_METADATA_FRAME_RAWSTREAM IMFAttributes DevProxy tarafından oluşturulur ve MFSampleExtension_CaptureMetadata'ye eklenir; bu, ham metadata arabelleği (KSSTREAM_METADATA_INFO.Data) ile ilişkili IMFMediaBuffer arabirimine bir işaretçi içerir.

MFT0 bir IMFSample aldığında, MF_CAPTURE_METADATA_FRAME_RAWSTREAM ham meta veri arabelleğini alır, odak durumu gibi ek özel meta veri öğelerini ayrıştırır ve ilgili IMFAttributes'e dönüştürerek MFSampleExtension_CaptureMetadata öznitelik paketine ekler. Aşağıdaki IMFAttributes, MF işlem hattı ve üçüncü taraf tarafından sağlanan tüm MFT'ler tarafından taşınmalıdır:

İsim Türü
MFSampleExtension_CaptureMetadata IUnknown (IMFAttributes)
MFSampleExtension_EOS UINT32 (Boolean)
MFSampleExtension_PhotoThumbnail IUnknown (IMFMediaBuffer)
MFSampleExtension_PhotoThumbnailMediaType IUnknown (IMFMediaType)

MFT0, ham meta veri arabelleğine erişmek için aşağıdakileri yapar:

  1. IMFSample arabiriminden MFSampleExtension_CaptureMetadata üzerinde GetUnknown çağırarak öznitelik çantası için IMFAttributes arabirimini alır.

  2. IMFMediaBuffer arabirimini elde etmek için, önceki adımda elde edilen IMFAttributes arabiriminden MF_CAPTURE_METADATA_FRAME_RAWSTREAM üzerinde GetUnknown çağrısında bulunur.

  3. IMFMediaBuffer ile ilişkili ham meta veri arabelleği almak için Lock'ı çağırır.

gerekli IMFAttributes'i MFSampleExtension_CaptureMetadata öznitelik paketine eklemek için MFT0 aşağıdakileri yapar:

  1. IMFSample arabiriminden MFSampleExtension_CaptureMetadata üzerinde GetUnknown çağrı yaparak özellik torbası için IMFAttributes arabirimini alır.

  2. Yukarıdaki tabloda belirtilen GUID ve veri türüne göre önceki adımdan alınan IMFAttributes arabiriminden MF_CAPTURE_METADATA_XXXsetUINT32, SetBlob veya SetUnknown'ı çağırır.

Zorunlu meta veri öznitelikleri

Kullanılabilir meta veri özniteliklerinin tam listesi Yakalama İstatistikleri Meta Veri Öznitelikleri'nde bulunabilir

Odak önceliği

KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUSPRIORITY özellik kimliği, odak önceliği DDI ile ilişkili tek denetimdir.

Odak durumu

KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUSSTATE özellik kimliği, odak durumu DDI ile ilişkili tek denetimdir.

Genişletilmiş ilgi bölgesi

Aşağıdaki özellik kimlikleri ROI DDI ile ilişkili denetimlerdir:

Fotoğraf onayı

KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOCONFIRMATION özellik kimliği, fotoğraf onay API'si (DDI) ile ilişkili tek denetimdir.

Fotoğraf dizisi alt mod

KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOMODE özellik kimliği, fotoğraf dizisi DDI ile ilişkili tek denetimdir.

EXIF ve HW JPEG kodlayıcı

İşlem hattı HW JPEG kodlayıcı için herhangi bir EXIF verilerini işlemek veya çarpıtmak için gerekli değildir; bu nedenle, EXIF veri biçimi sürücü, MFT0 ve OEM HW JPEG kodlayıcı tarafından sağlanır. OEM'ler iş ortakları EXIF özniteliği için herhangi bir özel öznitelik GUID'sini ve değişken türünü tanımlayabilir ve OEM bileşenleri tarafından kullanılması için MFSampleExtension_CaptureMetaData öznitelik paketine ekleyebilir. HW JPEG kod çözücü varsa, işlem hattı fotoğraf havuzu bileşeni HW JPEG kod çözücüyü yükler ve MFSampleExtension_CaptureMetaData öznitelikler çantasında yer alan EXIF verilerini IPropertyBag2::Write yöntemini kullanarak EXIF kodlama seçeneği olarak ayarlar.

Kodlayıcı seçeneği özellik paketi, kullanılabilir kodlama seçeneği özelliklerini belirten bir dizi PROPBAG2 yapısı içerir. HW JPEG kodlayıcıya ayarlanan EXIF kodlayıcı seçeneği, kodlayıcı seçeneği özellik paketinde aşağıdaki özellik tarafından tanımlanır:

Özellik adı DEĞİŞKEN TÜRÜ Değer Geçerli codec'ler
SampleMetaData VT_UNKNOWN MFSampleExtension_CaptureMetaData öznitelik paketi, EXIF verilerini içeren bir OEM alt özniteliği içindeki IMFAttributes arabirimi için bir işaretçidir. JPEG

MFSampleExtension_CaptureMetaData öznitelik paketi yalnızca MFT0 ve HW JPEG kodlayıcının EXIF verilerini tutmak için okuyabileceği OEM tanımlı exif alt özniteliklerini içerebilir. EXIF verilerini sürücüden HW JPEG kodlayıcıya geçirmek için, sürücü ve MFT0 aşağıdakileri yapmalıdır:

  1. Sürücü, işlem hattı tarafından sağlanan meta veri arabelleğinde özel EXIF meta verileri sağlar. Bu, MFSampleExtension_CaptureMetadata, örnek DevProxy'ye geri döndürüldüğünde DevProxy tarafından MF_CAPTURE_METADATA_FRAME_RAWSTREAM bir IMFAttribute olarak eklenir.

  2. MFT0 bir IMFSample aldığında, MF_CAPTURE_METADATA_FRAME_RAWSTREAM ham meta veri tamponunu alır, özel EXIF meta veri öğesini ayrıştırıp OEM tarafından tanımlı bir IMFAttribute'a dönüştürür ve MFSampleExtension_CaptureMetadata öznitelik paketine ekler.

EXIF verilerini MFT0'den HW JPEG kodlayıcıya geçirmek için işlem hattı fotoğraf havuzu aşağıdakileri yapar:

  1. IMFSample alındığında, öznitelik paketi için IMFAttributes arabirimini almak amacıyla IMFSample'dan MFSampleExtension_CaptureMetadata üzerinde GetUnknown çağrısı yapar.

  2. SampleMetadata tarafından tanımlanan kodlayıcı seçenek özelliğini HW JPEG kodlayıcıya ayarlamak için IPropertyBag2::Write'ı çağırır. Kodlayıcı seçenek özelliği, önceki adımda elde edilen IMFAttributes arabirimini içerir. Bu arabirim, OEM EXIF alt özniteliği de dahil olmak üzere tüm özel alt öznitelikleri ve bu konunun önceki bölümlerinde ele alınan Meta Veri bölümündeki standartlaştırılmış alt öznitelikleri içerir.

Daha fazla işleme için EXIF verilerini almak için HW JPEG kodlayıcısı aşağıdakileri yapar:

  1. SampleMetadata özellik adı ve VT_UNKNOWN türü tarafından tanımlanan özelliğin özellik değerini almak için IPropertyBag2::Read çağrıları. Döndürülen VARIANT.punkVal, MFSampleExtension_CaptureMetadata için IMFAttributes arabirimini alır.

  2. ÖNCEKI adımdan alınan arabirimden OEM EXIF alt özniteliğinde GetBlob veya GetUnknown'ı çağırarak, OEM EXIF alt özniteliğinin GUID ve veri türünü temel alan EXIF veri blobunu alır.

Küçük Resim

Kamera sürücüsü için herhangi bir küçük resim oluşturmak için MFT0 gerekli değildir. Kamera uygulamasının kendi küçük resmini oluşturması beklenir. Küçük resim, fotoğraf onay görüntüsünden, donanım tabanlı JPEG kodlayıcıdan veya tam boyutlu bir görüntünün boyutunu küçülterek oluşturulabilir. Bu, uygulama geliştiricilerine bağlı. Windows 8.1 uygulamalarıyla API ve uygulama uyumluluğunu korumak için kamera sürücüsünün KSPROPERTY_CAMERACONTROL_EXTENDED_PHOTOTHUMBNAIL denetimini uygulamaması gerekir.

Tamsayı (Integer) ISO

KSPROPERTY_CAMERACONTROL_EXTENDED_ISO_ADVANCED özellik kimliği, ISO DDI tamsayısıyla ilişkilendirilmiş tek denetimdir.

Gelişmiş odak

KSPROPERTY_CAMERACONTROL_EXTENDED_FOCUSMODE özellik kimliği, ISO DDI tamsayısıyla ilişkilendirilmiş tek denetimdir.

Flaş

KSPROPERTY_CAMERACONTROL_EXTENDED_FLASHMODE özellik kimliği, flash DDI ile ilişkili tek denetimdir.

Yakınlaştırma

KSPROPERTY_CAMERACONTROL_EXTENDED_ZOOM özellik kimliği, yakınlaştırma DDI'siyle ilişkili tek denetimdir.

Sahne modu

KSPROPERTY_CAMERACONTROL_EXTENDED_SCENEMODE özellik kimliği, sahne modu DDI ile ilişkili tek denetimdir.