2016-03-29 18 views
2

Ekranı yakalayan ve kodlayan bir proje üzerinde çalışıyorum. Zaten masaüstü çoğaltma API'sini (Win8 +) kullanarak ekran yakalayabilirim. API kullanarak ID3D11Texture2D dokuları alabilir ve bunları GPU'dan CPU'ya transfer edebilir ve daha sonra bunları şifrelemek için libx264 kullanabilirim. Bununla birlikte, dokuları GPU'dan CPU'ya çekmek, potansiyel olarak fps'yi azaltabilen bir şişe boynu olabilir. Ayrıca libx264, çerçeveleri kodlamak için CPU döngülerini (kaliteye bağlı olarak) alır. Bir optimizasyon olarak kodlamak için CPU kullanmak yerine GPU'da ID3D11Texture2D dokuları kodlamak için arıyorum.Donanım Media Foundation ile H264 kodlama ID3D11Texture2D

Zaten belgeleri ve bazı örnek kodları kontrol ettim ama başarılı olmadım. Birisi beni güvenilir bir şekilde istediğimi yapan bir kaynağa yönlendirebilirse memnun olurum.

cevap

2

Video kodlayıcılar, donanım ve yazılımlar farklı form faktörlerinde mevcut olabilir. Windows'un kendisi enkoderler seçeneği ile genişletilebilir API'ler sunar ve daha sonra ek kodlayıcılar kütüphaneler ve SDK'lar olarak kullanılabilir. Bu kütüphanelerden birini zaten kullanıyorsunuz (x264). Donanım kodlayıcıları genellikle satıcıya özgüdür ve doğrudan kodlama işleminde yer alan mevcut donanıma bağlıdır. Belirli bir donanım için çözümle ilgileniyorsanız, ilgili SDK'yı kontrol etmek mantıklı olabilir. Aksi taktirde, Windows'da donanım destekli video kodlaması için tipik genel arabirim Media Foundation Transform (MFT)'dur. Microsoft, MFT arabirimini diğer seçeneklerle paylaşması dışında, x264 üzerinde herhangi bir avantaj sağlaması beklenmeyen yalnızca H.264 video kodlayıcı stok yazılımı sağlamaktadır. Ancak, video donanım sürücüleri, donanımsal donanım tarafından desteklenen daha fazla MFT ekleyen donanım için genellikle ek MFT'ler yükler. Böyle örnekler:

  • Intel® Quick Sync video H.264 Encoder MFT
  • NVIDIA H.264 Encoder MFT
  • AMDh264Encoder farklı satıcılar tarafından Sunulan

, bunlar benzer işlevler sunan ve H.264'ü kodlamak için bu MFT'leri kullanmanız, geniş bir donanım yelpazesi ile donanım video kodlamasından yararlanmanın iyi bir yoludur.

Ayrıca bakınız:

0

Sen GPU kodlayıcı ve DirectX arasındaki doku paylaşımı mümkün olup olmadığını kontrol etmek zorunda.

Nvidia Decoder ve DirectX arasında doku paylaşmanın mümkün olduğunu biliyorum çünkü başarılı bir şekilde yaptım. Nvidia'nın bazı birlikte çalışma kapasitesi vardır, bu yüzden önce GPU'da her şeyi yapabilmek için dokuyu paylaşıp paylaşamayacağınıza bakın.

Nvidia ile bunu yapabilirsiniz: Nvidia Decoding-> GPU'da DirectX Display.

Kontrol DirectX Görüntü-> Nvidia şifreleme bu kez (bilerek nvidia Interop'u sunar) Intel ve ATI için

, onlar DirectX ile birlikte çalışma sağlarsanız bilmiyorum mümkünse.

Bilinmesi gereken en önemli nokta, DirectX dokusunun GPU kodlayıcı dokusuyla birlikte çalışıp çalışmadığını kontrol etmektir.