Aracılığıyla paylaş


Video Karıştırıcı Denetimlerini Kullanma

[Gelişmiş Video oluşturucu bu sayfada açıklanan bileşen eski bir özelliktir. MediaPlayer ve IMFMediaEngine bileşenleri aracılığıyla kullanıma sunulan Basit Video Oluşturucu (SVR) tarafından değiştirildi. Video içeriğini oynatmak için bu bileşenlerden birine veri göndermeniz ve yeni video işleyicinin örneğini oluşturmalarına izin vermelisiniz. Bu bileşenler Windows 10 ve Windows 11 için iyileştirilmiştir. Microsoft, mümkün olduğunda yeni kodun EVR yerine Windows'ta video medyası yürütmek için MediaPlayer veya alt düzey IMFMediaEngine API'lerini kullanmasını kesinlikle önerir. Microsoft, mümkünse yeni API'leri kullanmak için eski API'leri kullanan mevcut kodun yeniden yazılmasını önerir.]

EVR karıştırıcı, bir uygulamanın mixer'ın videoyu nasıl işlediğini denetlemek için kullanabileceği çeşitli arabirimler sağlar. Bu arabirimler DirectShow veya Media Foundation'da kullanılabilir.

Arayüz Açıklama
IMFVideoMixerBitmap arabirimi Alfa, statik bit eşlem görüntüsünü videoya karıştırır.
IMFVideoMixerControl arabirimi EVR'nin video alt akışlarını nasıl karıştırdığını denetler.
IMFVideoProcessor arabirimi Renk ayarlama, görüntü filtreleri ve diğer video işleme özelliklerini denetler. Bu arabirim grafik sürücüsü tarafından uygulanan işlevlere erişim sağlar, bu nedenle tam özellikler kullanıcının grafik sürücüsüne bağlıdır.

 

Bu arabirimlere yönelik işaretçileri edinmenin doğru yolu, EVR'nin DirectShow sürümünü mü yoksa Media Foundation sürümünü mü kullandığınıza bağlıdır. Media Foundation EVR için, EVR'yi doğrudan mı yoksa Medya Oturumuaracılığıyla mı kullandığınıza da bağlıdır. (Genellikle bir uygulama EVR'yi doğrudan değil, Medya Oturumu aracılığıyla kullanır).

Bu arabirimlerden herhangi birine işaretçi almak için aşağıdakileri yapın:

  1. EVR'de IMFGetService arabirimine işaretçi alın.

    • DirectShow EVR filtresini kullanıyorsanız, filtrede QueryInterface çağrısı yapın.

    • EVR medya lavabosunu doğrudan kullanıyorsanız, medya lavabosunda QueryInterface çağrısı yapın.

    • Medya Oturumu kullanıyorsanız, Medya Oturumu'nda QueryInterface çağrısını yapın.

  2. Medya Oturumu kullanıyorsanız, Medya Oturumu'nun durum değeri MF_TOPOSTATUS_READY olan MESessionTopologyStatus olayını göndermesini bekleyin. (Medya Oturumu kullanmıyorsanız bu adımı atlayın.)

  3. Karıştırıcı arabirimini almak için IMFGetService::GetService'ni çağırın. MR_VIDEO_MIXER_SERVICE hizmet tanımlayıcısını kullanın.

Videoya Bit Eşlem Harmanlayan Alfa

Oynatım sırasında statik bitmapi videoya alfa harmanlamak için IMFVideoMixerBitmap arabirimini kullanabilirsiniz. Bit eşlemi, IDirect3DSurface9 işaretçisi olarak belirtilen bir Direct3D yüzeyinde depolayabilir veya bir GDI bit eşlemi kullanabilirsiniz.

Bit eşlem için bir Direct3D yüzeyi kullanırsanız, yüzey piksel başına alfa verisi içerebilir. Karıştırıcı, görüntüyü alfa ile harmanladığında bu veriler kullanılacaktır. Alternatif olarak, bit eşlem içinde göründüğü her yerde saydam olacak tek bir renk olan bir renk anahtarı tanımlayabilirsiniz. Ayrıca, görüntünün tamamına uygulanacak bir alfa değeri belirtebilirsiniz. Bitmap'ı kırpmak için bir kaynak dikdörtgen ve video çerçevesi içinde konumlandırmak için bir hedef dikdörtgen de ayarlayabilirsiniz.

Bit eşlemi ayarlamak için, IMFVideoMixerBitmap::SetAlphaBitmapöğesini çağırın. Bu yöntem, bit eşlemi ve alfa karışımı parametrelerini belirten MFVideoAlphaBitmap yapısına bir işaretçi alır. Örn. kod için SetAlphaBitmap yönteminin başvuru konusuna bakabilirsiniz.

Bit eşlemi ayarladıktan sonra, kaynak ve hedef dikdörtgenler de dahil olmak üzere karıştırma parametrelerini, IMFVideoMixerBitmap::UpdateAlphaBitmapParametersçağırarak güncelleştirebilirsiniz. Güncelleştirme, bir sonraki video karesinde geçerli olur. Güncelleştirmenin gerçekleşmesi için videonun oynatılması gerekir. Bit eşlem üzerinde basit animasyonlar gerçekleştirmek için bu yöntemi kullanabilirsiniz. (Daha karmaşık efektlere ihtiyacınız varsa, özel bir EVR karıştırıcısı yazmayı göz önünde bulundurun.)

Bit eşlemi temizlemek için, IMFVideoMixerBitmap::ClearAlphaBitmapyöntemini çağırın.

Alt Akışları Denetleme

EVR, birincil video akışında bir veya daha fazla video alt akışını karıştırabilir. Alt akış karıştırmasını kontrol etmek için IMFVideoMixerControl arabirimini kullanın.

  • Bileşik video çerçevesi içindeki bir alt akışın konumunu ayarlamak için IMFVideoMixerControl::SetStreamOutputRect çağırın.

  • Alt akışların z sırasını ayarlamak için IMFVideoMixerControl::SetStreamZOrderçağırın. EVR, video akışlarını sıfırdan başlayarak z sırası değerlerine göre çizer. Birincil video akışı her zaman z düzeninde ilk sıradadır.

Video İşlemcisi Ayarları

EVR karıştırıcısı, giriş akışlarında video işleme gerçekleştirmek için DirectX Video Acceleration (DXVA) kullanır. Tam işleme özellikleri grafik sürücüsüne bağlıdır. Video işleme özellikleri, DXVA2_VideoProcessorCaps yapısı kullanılarak açıklanır. Belirli bir özellik kümesi, video işleme modu olarak adlandırılır ve her mod bir GUID ile tanımlanır. Önceden tanımlanmış GUID'lerin listesi için bkz. IDirectXVideoProcessorService::GetVideoProcessorDeviceGuids. Sürücü, farklı yetenek bileşimlerini temsil eden satıcıya özgü ek GUID'ler tanımlayabilir.

Desteklenen modları ve her modun özelliklerini bulmak için aşağıdakileri yapın:

  1. Karıştırıcının IMFVideoProcessor arabirimine bir işaretçi almak için IMFGetService::GetService'i çağırın.

  2. Çağrısı IMFVideoProcessor::GetAvailableVideoProcessorModes. Bu yöntem, kullanılabilir video işlemci modlarını tanımlayan bir GUID dizisi döndürür. Liste, listede ilk sırada en yüksek kaliteye sahip mod olan azalan kalite düzeninde döndürülür. Liste, videonun biçimine bağlı olarak değişebilir.

  3. Listedeki her GUID için, ilgili video işlemci modunun özelliklerini bulmak için IMFVideoProcessor::GetVideoProcessorCaps çağrısı yapın. yöntemi, DXVA2_VideoProcessorCaps bir yapıyı özelliklerin açıklamasıyla doldurur.

  4. Mod seçmek için IMFVideoProcessor::SetVideoProcessorModeçağrısı yapın. Aksi takdirde, akış başladığında EVR otomatik olarak bir mod seçer. Bu durumda, hangi modun seçildiğini bulmak için IMFVideoProcessor::GetVideoProcessorMode çağırabilirsiniz.

DXVA2_VideoProcessorCaps yapısındaki alanların çoğu düşük düzeyli sürücü davranışını tanımlar ve tipik bir uygulamayla ilgilenmez. Aşağıdaki alanlar büyük olasılıkla ilgi çekicidir:

  • DeviceCaps. Bu alan, video işlemenin donanım veya yazılımda gerçekleştirilip gerçekleştirilmediğini ve grafik sürücüsünün eski bir DXVA 1.0 sürücüsü olup olmadığını gösterir.

  • Deinterlace Teknoloji. Bu alan, kaynak videonun aralanmış olması durumunda ne düzeyde bir ayrıştırma kalitesi bekleyebileceğinizi gösterir.

  • procAmpControlCaps . Bu alan, hangi renk ayarlama denetimlerinin kullanılabilir olduğunu belirtir. Olası renk ayarlamalarının listesi için bkz. ProcAmp Ayarları. Sürücü renk ayarlaması yapamıyorsa, bu alan sıfırdır.

  • VideoProcessorOperations. Bu alan, çeşitli video işleme özelliklerini açıklayan bayraklar içerir. Özellikle önemli olan iki bayrak, DXVA2_VideoProcess_SubStreams bayrağı ve DXVA2_VideoProcess_SubStreams bayrağıdır. EVR'nin alt akışları başvuru video akışına karıştırması için bu bayraklardan en az birinin mevcut olması gerekir. Her iki bayrak da yoksa EVR tek bir video akışıyla sınırlıdır.

  • GürültüFiltresiTeknolojisi. Bu alan, grafik sürücüsü tarafından desteklenen kirlilik filtrelerini gösterir. Sürücü gürültü filtrelemeyi desteklemiyorsa, değer DXVA2_NoiseFilterTech_Unsupported.

  • DetailFilterTechnology. Bu alan, grafik sürücüsü tarafından desteklenen ayrıntı filtrelerini gösterir. Gürültü filtrelemeyi desteklemeyen bir sürücü olduğunda, değer DXVA2_DetailFilterTech_Unsupported olur.

Renk Ayarlama ve Görüntü Filtreleme

Grafik sürücüsü renk ayarlamayı (işlem amplifikasyon veya yalnızca ProcAmp olarak da adlandırılır) ve görüntü filtrelemeyi destekleyebilebilir. GPU tarafından gerçekleştirildiğinde renk ayarlaması ve görüntü filtreleme CPU yükü oluşturmadan gerçek zamanlı olarak yapılabilir.

Bu özellikleri kullanmak için aşağıdaki adımları uygulayın:

  1. Önceki bölümde açıklandığı gibi bir video işleme modu seçin.

  2. Önceki bölümde açıklandığı gibi video işleme özelliklerini bulmak için IMFVideoProcessor::GetVideoProcessorCaps çağrısı yapın. Yöntem, sürücünün renk ayarlaması ve görüntü filtresini destekleyip desteklemediği gibi özellikleri açıklayan DXVA2_VideoProcessorCaps yapısını doldurur.

  3. Sürücü tarafından desteklenen her renk ayarlaması için, bu ayar için olası değer aralığını bulmak için IMFVideoProcessor::GetProcAmpRange çağrısı yapın. Bu yöntem, ayar için varsayılan değeri de döndürür. Ayarların geçerli değerini bulmak için IMFVideoProcessor::GetProcAmpValues çağrısı yapın. Değerler belirtilen birimlere sahip değil. Değer aralığını tanımlamak sürücüye bağlı.

  4. Renk ayarlama değeri ayarlamak için IMFVideoProcessor::SetFilteringValue çağrısı yapın.

  5. Sürücü görüntü filtrelemeyi destekliyorsa, her filtre türü (kirlilik ve ayrıntı) hem chroma hem de luma'da üç ayarı (düzey, yarıçap ve eşik) destekler. (Bkz. DXVA Görüntü Filtresi Ayarları.) Her ayar için, olası değer aralığını almak için IMFVideoProcessor::GetFilteringRange çağırın ve geçerli değeri almak için IMFVideoProcessor::GetFilteringValue çağırın.

  6. Görüntü filtresi ayarını değiştirmek için, IMFVideoProcessor::SetFilteringValueçağrısında bulunur.

Geliştirilmiş Video İşleyici