2012-12-13 30 views
5

Bir FBO ekli dokudan gelen belirli bir görüntü dizisinden video kodlama yeteneğine ihtiyacım olan bir uygulama yazmayı planlıyorum. GPU paralellik ve hepsi maksimum "sunucu tarafı" yapın. NVidia'nın CUDA kullanarak video kodlayan bir SDK olduğunu öğrendim, ancak SDK white paper'u okuduktan sonra görüntü çerçevesi olarak bir FBO dokusu gönderilebiliyorsa bana hala net değil. GPU'dan ayrılmadan NVCUVENC (kodlayıcı) için kaynak. CPU'dan görüntü yüklemenin kodlama işlemine devasa ek yük eklediğine inanıyorum çünkü FBO dokusunu doğrudan GPU tarafında alamıyorsam, piksellerini CPU'ya okumam ve daha sonra kodlama için tekrar GPU'ya gönderin. Yani temelde 2 soru var:FBO dokusunu doğrudan GPU üzerinde H.264 videosuna kodlama

  1. NVIDIA CODEC Libraries mı izin istediğim eylemde?

  2. Değilse, OpenCL veya OpenGL 4.3 hesaplama gölgelendiricileri gibi diğer GPGPU SDK'ları ile yapılabilir mi? Ben sadece NVidia donanımı kullanmak Linux.Also için ihtiyaç olarak DirectX veya malzeme ile ilgili diğer pencerelere ilişkin

şey dikkate alınamaz.

cevap

3

Evet, kesinlikle OpenGL tarafından oluşturulan görüntüleri CUDA Codec Kitaplığı'na aktarabilirsiniz. CUDA API referansına bakın. Sizin için en çok ilgi çeken Doku Referansı Yönetimi ve Grafik Birlikte Çalışabilirliği. Temel fikir, CUDA'nın kodlayıcıya görüntü kaynağı olarak aktarabileceğiniz bir doku nesnesinin bir aygıt tarafı bellek eşlemesi almanıza izin vermesidir.

+0

Bunun için, özellikle OpenGL'de kalmak, herhangi bir cuda'nın yapabildiği şeyleri (kütüphaneleri bir kenara bırakarak) temelde hesaplayabilen herhangi bir alternatif var mı? –

+1

@Paul: Pek sayılmaz. NVIDIA GPU'ların h264 kodlayıcısı, GPU'larda silikonun özel bir parçasıdır ve çalışan bir gölgelendirici program değildir. Bu nedenle, bunun için her zaman belirli satıcı API'sini kullanmanız gerekir. Ya (varsayımsal) OpenGL uzantısı veya CUDA gibi bir yardımcı API aracılığıyla. – datenwolf