terça-feira, 20 de setembro de 2011

Básico sobre pacotes de codecs

Alguns players, como o VLC, o jetAudio, entre outros, tocam tudo out-of-the-box. Então, afinal, por que preciso de pacote de codecs?

Esses programas não necessitam de "codecs" pois possuem implementações próprias. Fazem tudo por conta. Na forma como é popularmente usado, o termo "codecs", no mundo Windows, quer dizer filtros que são adicionados ao DirectShow, um framework do sistema, que decodifica fluxos de áudio e vídeo, disponível para qualquer aplicação. Quando você adiciona um determinado filtro que decodifique VP8, por exemplo, ao DirectShow, qualquer aplicativo que use-o estará capacitado a decodificar fluxos de vídeo codificados com esse codec. De forma superficial, o DirectShow é o equivalente do GStreamer das distribuições Linux. O filtro mais popular é o ffdshow, que usa as bibliotecas do projeto Libav (um fork do FFmpeg), libavcodec, libswscale, libavfilter, etc. e código próprio para formar um super-filtro, que suporta uma ampla gama de codecs, incluindo toda a família MPEG, VPx, entre outros, e recursos diversos, como upscaling, denoise, deblock, deinterlace, deband, etc. Até o Windows Vista, não existe decoder nativo para MPEG-2/4 (dos comuns Divx, Xvid, H.264, AAC). Neles, o ffdshow, empacotado pelos diversos pacotes de codecs, costuma ser a solução mais usada. A deficiência do ffdshow é a falta de otimização na decodificação pela CPU de vídeos mais "pesados" (H.264 em especial, que é o codec mais usado para distribuição de vídeos em alta definição). Isso tem melhorado nas últimas versões do FFmpeg — e, consequentemente, do ffdshow —, porém talvez ainda não seja o ideal.

Além dos filtros com decoders, existem os demuxers. Demuxer é um software que apenas desempacota os fluxos de áudio, vídeo, legenda, do container (conhecido por formato). Um arquivo Matroska (MKV), por exemplo, possui dentro dele fluxos codificados com algum codec. O demuxer extrai os fluxos de dentro do arquivo e passa cada um deles aos decoders, que farão o trabalho de obter o áudio e o vídeo bruto, a ser renderizado pela aplicação depois. O DirectShow suporta a adição de filtros que atuam como demuxers. Um bastante popular é o Haali Media Splitter, que suporta os formatos mais populares, como AVI, MKV, MP4, OGG. Observação: desde muito tempo o Windows possui um demuxer AVI nativo, que em geral é preferido frente ao Haali para o formato.

Tanto o ffdshow quanto o Haali são configuráveis, de forma que é possível definir com quais formatos/codecs se quer que eles trabalhem. O que os pacotes de codecs fazem é basicamente empacotar o ffdshow, Haali e o MPC-HC, todos configurados para para não se sobreporem uns aos outros. Ou seja, se o ffdshow estiver configurado para decodificar H.264, o respectivo decoder interno do MPC-HC é desativado, assim o MPC-HC usa o ffdshow via DirectShow. Além destes componentes, o VSFilter (chamado também de DirectVobSub), que renderiza legendas, é bem popular. E basicamente isso forma a base de todos os pacotes de codecs da praça e cobre os formatos/codecs mais populares. Como exemplo de pacotes enxutos assim temos o CCCP e o K-Lite Standard. No outro extremo, monstros como os K-Lite Full/Mega, que trazem uma montanha de porcaria que a maioria dos usuários nunca usará, mas que são recomendados como A Solução fóruns afora...

No Windows 7, a Microsoft adicionou ao sistema operacional decoders nativos, bastante eficientes, para a família MPEG e demuxer para MP4/MOV. Eles foram implementandos usando um novo framework, que exisite desde o Windows Vista, chamado Media Fundation. Esse framework é cheio de restrições para adição de componentes de terceiros, de forma que até agora não existe uma versão do ffdshow que use-o. Felizmente, como é tradição no Windows, componentes do sistema duram décadas, de forma que o DirectShow estará entre nós por longos anos ainda. Sobre isso, o suporte no Internet Explorer 9 ao formato WebM (subset do MKV com VP8/Vorbis) se "existirem codecs instalados no sistema" quer dizer se existir suporte via Media Fundation. DirectShow está descartado para ser usado pelo IE9. Como é fácil criar filtros para o DirectShow, existem alguns de qualidade duvidosa por aí, o que poderia queimar a reputação do IE9 se alguma implementação porca do WebM fosse usada. Com Media Fundation é muito mais restrito e, teoricamente, a empresa tem um controle melhor da qualidade dos complementos que são permitidos. Para falar a verdade, eu nem sei direito quais são essas restrições, porém sei que existem. Felizmente o Google lançou componentes MF: WebM for IE9

Os decoders nativos do Windows 7 têm a capacidade de usar aceleração por hardware na decodificação de H.264, VC-1, quando disponível na GPU. O ffdshow tem suporte à aceleração também desde algum tempo, porém pelo que leio ainda existem problemas na renderização de legendas, pois o VSFilter não pode ser usado simultaneamente com DXVA (API do DirectX pela qual é possível acelerar a decodificação). Isso obriga o uso do renderizador de legendas do próprio ffdshow, que parece não ser dos melhores até o momento.

Nenhum comentário:

Postar um comentário