Como assistir H.264 consumindo tão pouco quanto 0% de CPU (DXVA).
Autor: Jefferson | Publicado: 2010-05-11T12:32:00-03:00

E sem precisar da ajuda de Hermione Granger. Mas você precisa do hardware adequado, pois não se trata&nbsp; 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:

Windows Media Player 11 (0%) - Mas o 6 também deve funcionar.
Mediaportal 1.1.0 RC2
GOM Player 2.1 (12%) - Sem explicação ainda.
KMplayer 2.9.4 (0%)
Media Player Classic Home Cinema 1.3 (0%) 

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&nbsp; 




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.