Infraestrutura de software de um núcleo de processador de vídeo embutido para soluções multimídia

Por Ranganathan sk, Softnautics

Introdução

Com tecnologias da nova era, como Internet das Coisas, aprendizado de máquina e inteligência artificial, as empresas estão reinventando e criando aplicativos multimídia inteligentes, mesclando realidade física e informações digitais de maneiras inovadoras. Uma solução multimídia envolve codec de áudio/vídeo, processamento de imagem/áudio/vídeo, aplicativos de borda/nuvem e, em alguns casos, também AR/VR. Este blog falará sobre a infraestrutura de software envolvida para um núcleo de processador de vídeo integrado em qualquer solução multimídia.

O processador de vídeo é um bloco IP reforçado baseado em RTL disponível para uso nas principais placas FPGA atualmente. Com esse núcleo integrado, os usuários podem oferecer suporte nativo a aplicativos de videoconferência, streaming de vídeo e identificação facial baseada em ML e reconhecimento de imagem com baixa latência e alta eficiência de recursos. No entanto, existem problemas de nível de software relacionados à compatibilidade do SO, processamento H.264/265, desenvolvimento de driver, etc., que podem surgir antes que o renderizador de vídeo seja implementado.

Vamos começar com uma visão geral dos processadores de vídeo e ver como esses problemas podem ser resolvidos para as empresas de semicondutores, permitindo que os usuários finais aproveitem os benefícios de seus produtos.

O núcleo do processador de vídeo integrado

O processador de vídeo é uma solução multicomponente, consistindo no próprio mecanismo de processamento de vídeo, um bloco DDR4 e um bloco de sincronização. Juntos, esses componentes são dedicados ao suporte à codificação e decodificação H.264/.265 em resoluções de até 4k UHD (3840x2160p60) e, para os níveis de velocidade total desta família de dispositivos FPGA, até 4096x2160p60. As camadas e perfis com suporte incluem até L5.1 High Tier para HEVC e L5.2 para AVC. Todos os três são produtos IP embutidos baseados em RTL que são implementados na malha lógica programável da família de dispositivos FPGA específica e são otimizados/’reforçados’ para máxima eficiência e desempenho de recursos.

O mecanismo do processador de vídeo é capaz de codificar e decodificar simultaneamente até 32 fluxos de vídeo. Isso é conseguido dividindo a largura de banda de 2160p60 em todos os canais pretendidos, suportando fluxos de vídeo com resolução de 480p30. Suporta decodificação H.264 para fluxos de bits de até 960 Mb/s em L5.2 2160p60 High Profile 4:2:2 (CAVLC) e decodificação H.265 para fluxos de bits de até 533 Mb/s L5.1 2160p60 Principal 4:2: 2 10b Perfil Intra (CABAC.)

Há também uma versatilidade significativa incorporada ao mecanismo de renderização de vídeo. As opções de controle de taxa incluem CBR, VBR e QP constante. Resoluções superiores a 2160p60 são suportadas em taxas de quadros mais baixas. O mecanismo pode lidar com profundidades de cor de 8b e 10b juntamente com formatos YCbCr Chroma de 4:0:0, 4:2:0 e 4:2:2.

A microarquitetura inclui seções separadas de codificador e decodificador, cada uma gerenciada por um MCU integrado 32b sintetizável subserviente à APU host por meio de um único 32b AXI-4 Lite I/F. Cada MCU tem sua instrução L1 e cache de dados apoiados por um mestre AXI-4 32b dedicado. As transferências de dados com memória do sistema são feitas por meio de um I/F mestre AXI-4 128b de 4 canais que é dividido entre o codificador e o decodificador. Há também um monitor de desempenho AXI integrado que mede as transações e latências do barramento diretamente, eliminando a necessidade de sobrecarga de software adicional além do firmware bloqueado para cada MCU.

O bloco DDR4 é um controlador de memória combinado e PHY. A parte controladora otimiza as transações R/W com SDRAM, enquanto a PHY executa tarefas de gerenciamento de SerDes e clock. Existem blocos de suporte adicionais que fornecem inicialização e calibração com memória do sistema. Cinco portas AXI e uma porta SODIMM 64b oferecem desempenho de até 2677 MT/s.

O terceiro bloco sincroniza as transações de dados entre o codificador do mecanismo do processador de vídeo e o DMA. Ele pode armazenar em buffer até 256 transações AXI e garante desempenho de baixa latência.

O ambiente de desenvolvimento integrado (IDE) da empresa é usado para determinar o número de núcleos de processador de vídeo necessários para um determinado aplicativo e a configuração de buffers para codificar ou decodificar, com base no número de fluxos de bits, no codec selecionado e no perfil desejado. Através da cadeia de ferramentas, os usuários podem selecionar codecs AVC ou HEVC, codificação de quadros I/B/P, resolução e nível, formato de quadros por segundo e profundidade de cor, uso de memória e operações de compactação/descompactação. O IDE também fornece estimativas de requisitos de largura de banda e consumo de energia.

Suporte de software integrado

O suporte ao desenvolvimento de software incorporado para qualquer hardware no processamento de vídeo pode ser dividido nas seguintes categorias gerais:

  1. Validação de codec de vídeo e testes funcionais
  2. Suporte ao Linux, incluindo desenvolvimento de kernel, desenvolvimento de driver e suporte a aplicativos
  3. Desenvolvimento de ferramentas e frameworks
  4. Desenvolvimento e implementação de projetos de referência
  5. Uso e contribuições para organizações de código aberto conforme necessário

A validação dos codecs AVC e HEVC no renderizador de vídeo é extensa. Ele deve ser executado em níveis de desempenho de 3840x2160p60 para codificação e decodificação em ambientes bare metal e compatíveis com Linux. O desempenho de baixa latência também é validado desde a prototipagem até a produção total.

Trabalho Linux focado em frameworks e camadas multimídia para customização de kernels e drivers. Isso inclui o subsistema v4l2, estrutura DRM e drivers para o bloco de sincronização para garantir um desempenho de baixa latência.

Os projetos de codec e Linux se prestaram efetivamente ao desenvolvimento de uma ampla variedade de designs de referência em nome do cliente. Designs de borda para codificação e decodificação, desenvolvimentos que variam de videoconferência de baixa latência a streaming de vídeo de 32 canais, codificação baseada em região de interesse e detecção de face ML, tudo isso pode ser alcançado por meio do uso de uma seleção cuidadosamente considerada de ferramentas de origem, estruturas e recursos. Veja abaixo um resumo dessas ofertas:

  1. GStreamer: Uma biblioteca de componentes multimídia de código aberto e multi-SO que pode ser montada em um pipeline, seguindo uma abordagem de design orientada a objetos com uma arquitetura de plug-in, para reprodução, edição, gravação e streaming de multimídia. Ele suporta a construção rápida de aplicativos multimídia e está disponível sob a licença GNU LGPL. A oferta do GStreamer também inclui uma variedade de ferramentas incrivelmente úteis, como gst-launch (para criar e executar pipelines do GStreamer) e gsttrace (uma ferramenta básica de rastreamento).
  2. StreamEye – Uma ferramenta de código aberto que fornece dados e exibições gráficas para análise aprofundada de fluxos de vídeo.
  3. Gstshark – Disponível como um projeto de código aberto da Ridgerun, essa ferramenta fornece recursos de rastreamento e benchmarking para analisar e depurar compilações de aplicativos de mídia GStreamer.
  4. FFmpeg e FFprobe – Ambos fazem parte do projeto FFmpeg de código aberto, são ferramentas multi-SO independentes de hardware para desenvolvedores de software multimídia. O FFmpeg permite aos usuários converter arquivos de mídia entre vários formatos, alterar taxas de amostragem e dimensionar vídeos. FFprobe é uma ferramenta básica para análise de mídia de streaming.
  5. OpenMAX – Disponível através do Khronos Group, esta é uma biblioteca de APIs e funções de processamento de sinal que permitem aos desenvolvedores tornar uma pilha de mídia portátil em todas as plataformas de hardware.
  6. Yocto – Uma colaboração de código aberto da Linux Foundation que cria ferramentas (incluindo SDKs e BSPs) e recursos de suporte para desenvolver implementações Linux personalizadas para aplicativos incorporados e IoT. A comunidade e sua versão do Linux são independentes de hardware.
  7. Libdrm – Um conjunto de código aberto de bibliotecas de baixo nível usadas para dar suporte a DRM. O Direct Rendering Manager é um kernel Linux que gerencia hardware de vídeo baseado em GPU em nome dos programas do usuário. Gerencia as solicitações do programa em modo de arbitragem por meio de uma fila de comandos e gerencia os recursos do subsistema de hardware, principalmente a memória. As bibliotecas libdrm incluem funções para suportar GPUs da Intel, AMD e Nvidia também. Libdrm inclui ferramentas como modetest, para testar o driver de vídeo DRM.
  8. Media-ctl – Uma ferramenta de código aberto amplamente disponível para configurar o pipeline de driver de mídia na camada Linux v4l2.
  9. PYUV Player – Outra ferramenta de código aberto amplamente disponível que permite aos usuários reproduzir fluxos de vídeo não compactados.
  10. Audacity – Um editor de áudio multi-OS gratuito.

As ferramentas/frameworks acima ajudam a projetar soluções multimídia eficientes e de qualidade em processamento de vídeo, streaming e conferência.

Autor: Ranganathan sk

Ranganathan lidera o grupo multimídia e de rede na softnáutica. Ele tem mais de 19 anos de experiência projetando e desenvolvendo sistemas embarcados para setores de defesa, industrial, consumidor e automotivo para casas de design, OEMs líderes e designers de chips globais. Aproveitando sua experiência com tecnologias de tendências como arquiteto de soluções, ele agora está se concentrando em permitir que os compradores de tecnologia tomem as decisões de negócios corretas, superando os desafios de negócios e as soluções de tecnologia mais adequadas.

Leave a Comment