2012-03-15 26 views
19

OpenGL kullanarak renk dönüştürme, ölçekleme ve çevirme gibi video işlemlerini yapan bir uygulamam var. Çoğunlukla BGRA (1xGL_BGRA) veya YUVA (4xGL_R) video ile çalışıyorum, yani alfa dahil.Grafik görüntü Grafiklerdeki metinlerin tercümesi

Şimdi de yüksek kaliteli söndürme yapmak istiyorum. Nvidia'nın "PureVideo" işlevselliği sayesinde yüksek kaliteli donanımları hızlandırmaya çalıştığını fark ettim. Temel olarak yapmak istediğim, x sayıdaki renk kanalları ile taramalı bir OpenGL dokusu göndermek ve iki aşamalı dokudan kurtulmak.

Sorum şu: Bu işleve en kolay ve en verimli şekilde (muhtemelen OpenGL ile birlikte çalışırken) nasıl erişebilirim?

DXVA ve OpenMax'a bakıyorum, ancak her ikisi de daha çok oynatmaya odaklanmış gibi görünüyor (işleme ayrıştırma işlemi değil, çerçeve hızının ayarlanması vb. Gibi ilgili olmayan seçenekler vb.) Ve alfa formatları yok ...

+1

? Sadece bir görüntü almak ve alternatif piksel satırları ile ikiye bölmek istiyorsanız, bunu bir gölgelendiricide kolayca yapabilirsiniz, ancak ben bir video uzmanı değilim ve demek istediğim buysa emin değilim. – Tim

+1

Uzamsal zamansal deinterlacing çizgileri boyunca bir şey kastediyorum. Düşündüğünüz şey korkunç bir kalitedir. – ronag

+1

http://guru.multimedia.cx/deinterlacing-filters/ adresinde "yüksek" ve "düşük" kalite giderici arasındaki farkı görmek için buraya bakabilirsiniz. – ronag

cevap

5

gStreamer libraries have good de-interlacing modules. Sonuçları bir pencerede görüntülemek için bir directshow modülünü kullanabilir veya çeşitli olaylara girerek çerçeveleri kendiniz işleyebilirsiniz. Tüm video işleme ihtiyaçlarımız için şu anda işte kullanıyoruz.

+2

Gpu hızlandırılmış görünmüyor. – ronag

+1

gStreamer ile boru hattına bağlandığınız modüle bağlıdır. Örneğin, GPU hızlandırılan bir 'gldeinterlace' modülü var. Aslında, bağlayabileceğiniz çeşitli türde yaklaşık 10 GL modülü vardır. – Robinson

+0

Ben gStreamer sunduğu daha iyi kaliteye sahip gibi görünüyor ffmpeg yadif deinterlace kullanarak alrdy değilim. – ronag

3

Açıklanan gereksinimlerinize dayanarak, VDPAU, istediğinizi en yakın eşleşme gibi görünüyor. Komplikasyon: Windows değil, Unix tabanlı işletim sistemleri içindir.

Windows'a kilitlendiyseniz, gitmek için DXVA yoludur. Çapraz platform ortamında çalışıyorsanız, gitmek için OpenMAX yoldur. Ve eğer sorunuzda vermiş olduğunuzların dışındaki önerilere açıksanız, the rest of these peşinde koşmaya değer.

+0

Bu, sorularımın içinde belirtmiş olduğum DXVA veya OpenMax'ı kullanmam gerektiğini yeniden doğrulamaktan başka bir şey eklemez. Bunlardan hiçbiri istediğimi yapmanın basit bir yolunu görmese de alfa ile herhangi bir formatı desteklemiyor. – ronag

+0

@ronag Aslında, öyle. Yapabileceğimin en iyisi en yakın eşleşmedir, çünkü sorgunuz 'Windows & Alpha & Hardware Support''un kesişiminde tatmin edici değildir. Bir geliştirme ortamında rahatlamak için bu kısıtlamaların en kolayı, 'Windows' size daha önce tartışmaya getirilmemiş bir araç sunuyor. VDPAU Nvidia tarafından destekleniyor ve [alfa desteği var gibi görünüyor] (http://http.download.nvidia.com/XFree86/vdpau/doxygen/html/group__misc__types.html). Sorgunuzun başka bir şekilde kendi çözümünüzü yitirmeden veya mevcut olanları genişletmeden tatmin edici olduğuna inanmıyorum. – MrGomez

+0

Maalesef, pencereler bir zorunluluktur. VDPAU'nun alfa desteğinin olması ilginçtir. – ronag

0

Nokta 1: Donanımın hızlandırılmasının iyi kaliteye sahip olmasını istiyorsanız, DirectX üzerinden gitmeniz gerekir.

Nokta 2: Başkalarının adını verdiği (DXVA ve OpenMAX) seçeneklerin yanı sıra, en azından Quicksync hızlandırılmış deinterlace için adlandırılmış ve VPP video ön işlemesi aracılığıyla bir çerçeve ayırma teklifi sunan Intel Media SDK'sı var. filtreler.

Nokta 3: NVidia üzerine OpenGL'e DirectX gitmek için: http://developer.download.nvidia.com/opengl/specs/WGL_NV_DX_interop.txt 'yüksek kalite' deinterlacing tanımlayan unsur

İlgili konular