FFmpeg MT

O fork Libav foi quem integrou primeiro o branch "MT" do FFmpeg, mantido por Alexander Strange. A infraestrutura foi adicionada, porém a implementação da decodificação multithreading foi sendo feita aos poucos. Primeiro foram codecs mais simples para depois complexos como o VP8 e a família MPEG. Hoje foi adicionado código MT para decodificação dos codecs da família MPEG, incluindo MPEG-1, MPEG-2, MPEG-4 (H.264 = MPEG-4 AVC). Como a libavcodec do FFmpeg/Libav é o coração de muitos tocadores multimídia, é um marco importante, pois significa que em máquinas fracas (com pelo menos um dual-core), onde não existe aceleração na decodificação de H.264 por hardware, o novo código pode ser a diferença entre você conseguir ou não assistir a um vídeo full HD. Ou então significa um melhor uso da CPU. Lembrando que desde a versão 0.6 do FFmpeg, lançada há mais de um ano, foram adicionadas muitas otimizações em assembly para decodificação de H.264 e VP8, que tornarão o futuro FFmpeg/Libav 0.7 (e suas bibliotecas) mais eficientes na decodificação destes codecs.

Os tocadores para Linux em sua totalidade usam a libavcodec para os codecs de vídeo MPEG (o GStreamer usa a libvpx para decodificar VP8). No Windows, todos que usam os "pacotes de codec" estão usando-a também através do ffdshow. No OS X idem se você usar o Perian. Com o VLC idem.

Além dos codecs MPEG, o VP3 (que inclui o Theora no código da libavcodec) e o VP8 também foram contemplados.

Commits relevantes:
H264/MPEG frame-level multi-threading.
mdec: enable frame-level multithreading.
vp8: frame-multithreading.
mimic: implement multithreading.
huffyuv: Add multithreading support
vp3: Frame-based multithreading support
Frame-based multithreading framework using pthreads

Se não me engano, o Google Chrome (ou o Chromium) usam a libavcodec para decodificar VP8 ao invés da biblioteca de referência, a libvpx. Porque a libavcodec é muito mais rápida. Com suporte a MT melhor ainda.

FFmpeg/Libav são projetos muito importantes para a multimídia em geral. Apesar do racha com o fork, os projetos estão mais ou menos sincronizados, cada um fazendo merges com o git de um lado para outro. Isso é bom.

Comentários