-->

terça-feira, 11 de maio de 2010

Como assistir H.264 consumindo tão pouco quanto 0% de CPU (DXVA).

E sem precisar da ajuda de Hermione Granger. Mas você precisa do hardware adequado, pois não se trata  de magia, nem de milagre.

Notas:
  • Com o hardware indicado abaixo serão 0% de CPU sem legendas e uns 16% com legendas externas/embutidas ativadas. Isso independe, até onde sei, da complexidade ou bitrate do filme;
  • Cuidado para não se perder: H.264 é um termo genérico que, para os fins deste post, é sinônimo de x264 e MPEG-4 AVC. A diferença entre x264 e H.264 é a mesma que existe entre XVID e DivX (para os fins deste texto, nenhuma). Leia os artigos na en.Wikipedia para entender melhor.

Essa façanha pode ser realizada se sua placa de vídeo tiver suporte nativo a H.264 e puder ser acessada através de DXVA. Por default todos os codecs/filtros instalados no Windows sempre tentam fazer a decodificação por software, mesmo que sua GPU (a placa de vídeo) tenha suporte e esteja completamente livre e que sua CPU esteja engasgando com a carga. É preciso ativar manualmente o DXVA, que é o que explico neste post.

O hardware

Estou usando uma Geforce 8200, embutida na minha motherboard ECS GF8200A. Supostamente toda a série 8xxx e 9xxx de GPUs Nvidia decodificam H.264. Mesmo as onboard, como a minha.

Minha CPU é um Athlon X2 5200+.

O software

Basta usar o ffdshow * revision 3305 ou superior. Como se trata de um filtro DirectShow o benefício fica disponível para quase todos os players no Windows que não estejam usando filtros próprios.

* Baixe a versão SSE do ffdshow porque é improvável que você tenha uma GPU compatível com H.264 mas não tenha uma CPU compatível com SSE. E se sua CPU é compatível com SSE você vai perder desempenho se usar qualquer outra versão do ffdshow.

Eu testei com os seguintes players:
Atenção para o fato de que alguns desses players vem com seus próprios mecanismos de decodificação, que precisam ser desativados. O mais "fácil" de funcionar é o WMP (embora ele não goste da extensão MKV).

Testes feitos no Windows XP SP3. É preciso um procedimento especial para rodar o ffdshow no Seven, caso queira tentar com essa versão do Windows.


Configurando DXVA no ffdshow

O ffdshow tem um atalho específico para isto no Menu Iniciar:



Em tray, dialogs and paths, selecione Modern. Isso é dispensável, mas muito útil enquanto durarem os testes.




Esta é a configuração para assistir sem legendas externas/embutidas (CPU zero):



E esta é a modificação para habilitar as legendas:




Clique em OK e execute um H.264 para testar.

Como saber que está sendo usado o DXVA

O ffdshow mostra um icone distinto na bandeja. Tem que ser este, marrom, com o texto "FFVA" (requer que você tenha configurado o padrão "Modern").


Para funcionar no WMP o trabalho de configuração acaba aqui. Vou explicar adiante o que é preciso fazer para que isso funcione também com outros players.

Configurando outros players

Atenção: excetuando o WMP, todos os meus players estão em inglês porque eu não suporto tentar decifrar o português da maioria deles. Todos tem o idioma definido em algum lugar nos menus.

KMplayer

Para abrir esta janela tecle F2. Desmarque os itens destacados.


GOM player

Para abrir esta janela tecle F5. Marque o item destacado.


Media Player Classic - Home Cinema

Para abrir esta janela tecle "O" (Options). Desmarque os itens destacados.



Problemas

Se seu sistema estiver configurado corretamente o Graphedit mostrará um gráfico como este para um arquivo cujo stream de vídeo seja H.264:

Nota: se você tentar abrir um MKV e o Graphedit acusar que o formato não é suportado, instale o Haali Media Splitter 



Somente nos importa o caminho do video, destacado em vermelho.

Se o Graphedit mostrar algo diferente, DXVA não funcionará para o arquivo H.264 especificado. Se estiver diferente disso para todos os seus H.264, você tem um problema na sua instalação. Geralmente o Graphedit lhe dará pistas suficientes no gráfico para você saber quem é o culpado. Leia meu texto sobre o Graphedit para saber um pouco mais sobre isso.



Nem todo H.264 é compatível.

Pois é. Alguns filmes não podem ser acelerados por DXVA e vão precisar ser decodificados por software. Mas o ffdshow se encarrega de determinar isso e ativar o decoder correto. O ícone mostrado na bandeja será diferente.

Eu ainda não sei ao certo o que causa a incompatibilidade, mas em todas as amostras incompatíveis que testei, Mediainfo reportou um profile High@L5.1 e pelo menos 6 reframes no stream de vídeo:



Isso possivelmente é um problema da mesma natureza que o causado por Packet Bitstream em XviD e à medida que as "fontes" forem tomando conhecimento de que o problema existe você verá menos filmes incompatívels, porque elas aprenderão a evitar as configurações problemáticas. Se você procurar por "DXVA x264" no Google verá que alguns na "scene" já estão marcando alguns "releases" como compatíveis.

O consumo de energia

Como eu disse antes, não se trata de magia. Você pode até usar 0% de CPU, mas sua GPU vai cobrar pelo esforço extra. O quanto ela vai cobrar depende exclusivamente dela, mas como GPUs são teoricamente mais eficientes que CPUs quando o assunto é vídeo, dá para esperar uma economia de energia ao usar DXVA, o que pode ser particularmente interessante em notebooks.

Eu fiz um teste de alguns minutos aqui e meu medidor de energia no pior caso mostrou um aumento de 10W em relação ao consumo em idle. Comparando com as medições que fiz em dezembro eu estou chutando um consumo pelo menos 10W menor do que fazendo a mesma coisa sem DXVA. Eu ainda preciso fazer testes mais elaborados mas uma coisa parece garantida: você consome menos energia usando DXVA.

21 comentários:

  1. Oxysucker11/5/10 15:34

    Jefferson, aqui eu uso o MPC-HC apenas, sem o ffdshow, em quatro computadores, dois com Win7 x64 e dois com Win7 x86 (sendo que um deles é um note), e em todos eles o programa já faz a decodificação por DXVA para todos os releases H.264 que tenho aqui, sem precisar fazer nenhuma alteração nos filtros internos.

    É claro que para as máquinas com SO x64 uso o MPC-HC adequado.

    Três das máquinas tem GPU onboard fornecida pela chip AMD 780 (Radeon 3200) e a minha máquina principal está com uma Radeon 5770.

    O uso da CPU, em todas as máquinas, com legendas, fica entre 5% e 10%. Sem legendas tende a 0%.

    Vale resaltar, tanto no caso do seu tutorial como no meu, que o menor consumo e a maior eficiência na decodificação não são os únicos benefícios. Para quem vai montar um htpc, com um bom vídeo onboard, o uso da gpu, ao deixar a cpu livre, também te ofere menor aquecimento geral do sistema e maior silêncio de operação, já que o cooler do processador não será exigido e a refrigeração da gpu costuma ser satisfatóriamente resolvida com um cooler passivo.

    Ah sim, a versão do MPC-HC que eu uso é a 1.3.1249.0

    ResponderExcluir
  2. Oxysucker,

    Obrigado por divulgar sua experiência. É muito bom saber que o AMD 780 é uma alternativa.

    Eu comecei tentando com o MPC-HC, mas como está explicado no meu Buzz, falhei miseravelmente. Foi durante os testes com ele que eu esbarrei no fato de que o ffdshow tinha suporte (eu desconhecia isso completamente). E daí fui fazendo testes até chegar ao resultado acima.

    ResponderExcluir
  3. Ryan, eu também uso somente o mpc-hc sem nenhum filtro ou plugin adicional. Sempre baixo a última versão daqui : http://www.xvidvideo.ru/content/view/125/2/.
    ps. Lembrei que adicionei somente o realalternative codec para rmvb.

    ResponderExcluir
  4. oxysucker11/5/10 16:30

    JR, eu também uso o realalternative + o quicktime lite. Também esqueci que o Hali Media Splitter está instalado e a opção nos filtros internos do MPC-HC para Matroska está desativada.

    ResponderExcluir
  5. oxysucker11/5/10 16:37

    Hum, não tinha me dado conta do seu Buzz, até por que não habilitei o meu.

    Acho que não é só uma questão do AMD 780, me parece que a versão mais nova do MPC-HC tem melhor suporte a DXVA e ao Win7.

    Pode ser também que o Win7 tenha algo a ver com isso (estou apenas especulando), já que antes de instalá-lo, eu tinha que usar o ffdshow no XP para alguns releases (nem me lembro mais como era a configuração).

    Quando instalei o Win7 x64 no htpc, não consegui fazer o ffdshow funcionar de forma alguma. Eu estava usando uma versão antiga do MPC-HC que já tinha salvo na minha pasta de programas para instalação (constumo manter cópia de tudo que instalo), que funcionava bem com o RC, mas não estava tendo bom desempenho com o x86 Home Premium. Resolvi verificar por uma nova versão e tudo funcionou as mil maravilhas.

    ResponderExcluir
  6. Você vai ROLAR de rir agora. Eu sempre torci o nariz, e odiei arquivos .MKV com H264 encapsulado dentro. (Vale lembrar que o MKV é um container), porque MESMO com uma bela maquina aqui, um opteron 170, ram a vontade e um GForce 8400GS a nhaca nos H264 andava aos "trancos" ou seja perdia frames.

    Simplesmente instalei o ffdshow 3425 ativei o DVXA e o problema ACABOU!

    Estou exibindo um vídeo em H264 em tela cheia (fazendo resize) aqui que esta mais "liso" que um DVD.

    Consumo de CPU pelo Media Player Classic - Home Cinema: ZERO!

    Essa valeu mesmo!

    ResponderExcluir
  7. Rolar de rir? de forma alguma.

    Eu fico sempre satisfeito quando o trabalhão que eu tenho para pesquisar, testar e elaborar o texto acba sendo útil para outras pessoas.

    E quando é um dos amigos então... :)

    ResponderExcluir
  8. Tentei abrir o DXVA Video decoder configuration e deu o seguinte erro: Error in FFDshow.ax. Missing entry: configureDXVA http://shark007.net/forum/attachment.php?aid=252

    Uso o Win7 x64.

    http://shark007.net/forum/Thread-Error-in-FFDshow-ax-DXVA

    ResponderExcluir
  9. Pelo que eu entendi, isso ocorre porque você está usando ou usou uma versão distribuída por shark007. Eu sempre obtenho os releases no link indicado no meu texto.

    ResponderExcluir
  10. Encontrei esse shark007 quando busquei pelo problema no Google. O Ffdshow foi baixado pelo link do texto.

    Vou continuar investigando.

    ResponderExcluir
  11. Oi Ryan,

    Obrigado pelo post! Foi bem elucidativo!
    Sem querer ser chato, eu vivia me confundindo com x264 e H.264, mas recentemente eu achei que tinha dominado as diferenças.
    Você disse:"Cuidado para não se perder: H.264 é um termo genérico que, para os fins deste post, é sinônimo de x264 e MPEG-4 AVC. A diferença entre x264 e H.264 é a mesma que existe entre XVID e DivX"
    O que eu entendi até agora é:
    x264 é um encoder (ou codec) open source que cria arquivos de vídeo H.264 (ou MPEG4 AVC).
    XviD e DivX seriam também encoders (ou codecs) que criam arquivos de vídeo MPEG-4 ASP.
    Em resumo: x264 está para XviD ou DivX como H.264/MPEG4 AVC está para MPEG4 ASP.
    Estou certo, ou será que ainda estou meio perdido?

    ResponderExcluir
  12. "x264 é um encoder (ou codec) open source que cria arquivos de vídeo H.264 (ou MPEG4 AVC)."

    Correto

    "XviD e DivX seriam também encoders (ou codecs) que criam arquivos de vídeo MPEG-4 ASP."

    Correto

    "x264 está para XviD ou DivX como H.264/MPEG4 AVC está para MPEG4 ASP."

    Correto.

    Tenha em mente que quando eu disse que "para os fins do post" x264 e h.264 eram sinônimos eu estava me referindo aos arquivos (o resultado da codificação).

    ResponderExcluir
  13. Resolvi o problema instalando a versão x64 do ffdshow. Na hora de baixar eu nem me toquei nisso.

    ResponderExcluir
  14. Jefferson, dxva do ffdshow funciona em qualquer Windows (XP/Vista/7)? Os decoders que vêm no 7 já usam DXVA nativamente e tenho visto o pessoal recomendando evitar o uso do ffdshow nele, dizendo que o os decoders nativos seriam melhores, por usarem a API Media Fundation (que usa DXVA 2.0), ao contrário do ffdshow que usa DirectShow (DXVA 1.0). Eu não tenho idéia das diferenças, por isso pergunto.

    ResponderExcluir
  15. Eu estou usando exclusivamente o XP. Só quando sair o SP1 do Seven eu vou testar de novo se a josta do Seven roda direito com o meu hardware.

    ResponderExcluir
  16. com uma vga dx 10.1 (radeon 4850) o dxva fica tudo preto no media player classic home cinema 1.3.1249 já com uma placa nativa dx 11 (radeon 5670) fluiu normalmente no mesmo pc mesmo sistema tudo apenas trocando as placas com mesmos drivers também

    ResponderExcluir
  17. Jefferson, eu tentei isso.. mas realmente fiquei meio noob na história.

    Vc usa aquele pacote K-Lite Mega Codec?

    Se não, o que você instala pra rodar o resto (flv, avi (xvid), etc..)?

    Estou usando Win7 x32.

    Só pra constar.. vc é cara! =)

    ResponderExcluir
  18. instalei o seven x64 do zero e com a hd 4850 e o MPC 1.3.1249 x86 e mesmo driver 10.6 ati e rolou o dxva de boa sem configurar nada e sem instalar o ffdshow sequer vai entender ...
    no xp 32 bits sem chance de o dxva rodar na minha 4850 ...

    ResponderExcluir
  19. DheRLaN,

    Eu não uso pacotes de codecs. Instalo apenas o que preciso, à medida que vai sendo necessário, como está explicado aqui. No XP o ffdshow sozinho já cobre quase tudo.

    Mas para usar o ffdshow no Seven é preciso ter cuidados especiais.

    ResponderExcluir
  20. Existe alguma maneira de eu saber, sem testar, se a minha placa de vídeo faz a decodificação do x264 via hardware?

    Eu quero dizer: será que existe alguma documentação do fabricante, ou algum termo técnico nas especificações da placa, que signifique isso?

    Eu tenho dois notebooks da Acer, ainda não fiz os testes (vou fazer!), mas acho que as plaquinhas de vídeo deles não vão fazer por hardware a decodificação.

    O primeiro deles é um Acer Aspire 2680-2992, que comprei no final de 2007, com Celeron M440 @1.86GHz, e o adaptador de vídeo é "Mobile Intel(R) 945 Express Chipset Family".

    O segundo, novinho, é um sub-notebook Acer Aspire One 532h-2462, com tela de 10.1", Atom N450 @1.66GHz, e o adaptador de vídeo é "Intel Graphics Media Accelerator 3150".

    Eu procurei a documentação do adaptador de vídeo do computador novo, mas não encontrei (parece que a documentação do adaptador de vídeo é contida junto com a documentação do processador, eu não entendi direito, achei meio confuso).

    Enfim, eu vou fazer os testes com o FFDShow, mas antes de fazer os testes tive essa dúvida e resolvi postar ela, de uma maneira mais teórico-reflexiva do que prática.

    Até porque eu estou achando que não vai dar certo nos meus adaptadores onboard e se isso acontecer eu não vou saber se fiz algo errado na configuração ou se é culpa do hardware mesmo.

    ResponderExcluir
  21. Errata: o modelo do computador mais antigo é 3680-2992.

    Testei no computador pequeno (netbook 10.1") e não funcionou.

    Fiz todas as etapas sugeridas neste post e na hora de rodar o vídeo simplesmente não apareceu o FFVA no tray. Somente o FFV. Chequei as configurações e tentei mais umas cinco vezes.

    Atrás de informações, no Google, encontrei algumas referências dando a entender que as Intel GMA série 3100 não dão decodificam H.264 via hardware.

    E então encontrei um software chamado DXVA Checker, que supostamente checa se o hardware é compatível com DVXA.

    Ao rodar o programa ele me diz, entre outras coisas, isso (que parecem ser os dados mais relevantes):

    Intel(R) Graphics Media Accelerator 3150
    ModeMPEG2_A: DXVA1, IMC4, 720x480 / 1280x720 / 1920x1080
    ModeMPEG2_B: DXVA1, IMC4, 720x480 / 1280x720 / 1920x1080
    ModeMPEG2_C: DXVA1, IMC4, 720x480 / 1280x720 / 1920x1080
    ModeMPEG2_D: DXVA1, IMC4, 720x480 / 1280x720 / 1920x1080
    ModeMPEG2_MoComp: DXVA2, IMC4, 720x480 / 1280x720 / 1920x1080
    ModeMPEG2_IDCT: DXVA2, IMC4, 720x480 / 1280x720 / 1920x1080

    Como a documentação do software é em japonês, parti para a análise crua dessas informações, pelo método dedutivo/adivinhation, e concluí que o meu hardware faz decodificação high definition via hardware sim, mas somente MPEG2, e não H.264. Ou seja: adianta exatamente NADA, porque tudo que eu quero ver em HD está em H.264.

    Era o esperado de um hardware tão simples quanto o meu.

    Felizmente estou conseguindo assistir lindamente a vídeos H.264 1920x1080 pixels nessa minha máquina (mas não com 0% de uso do processador) usando um filtro chamado 'CoreAVC Video Decoder'.

    ResponderExcluir

Siga as regras do blog ou seu comentário será ignorado.