Primeira versão do libcamera, uma pilha para suporte de câmera no Linux

Após quatro anos de desenvolvimento, foi formada a primeira versão do projeto libcamera (0.0.1), oferecendo uma pilha de software para trabalhar com câmeras de vídeo, câmeras e sintonizadores de TV em Linux, Android e ChromeOS, que dá continuidade ao desenvolvimento da API V4L2 e eventualmente irá substituí-lo. Como a API da biblioteca ainda está mudando e ainda não foi totalmente estabilizada, o projeto até agora foi desenvolvido sem ramificar versões individuais usando um modelo de desenvolvimento contínuo. Em resposta à necessidade das distribuições acompanharem as alterações da API que afetam a compatibilidade e simplificar a entrega de bibliotecas em pacotes, foi tomada agora a decisão de gerar periodicamente versões que reflitam a extensão das alterações da ABI e da API. O código do projeto é escrito em C++ e distribuído sob a licença LGPLv2.1.

O projeto está sendo desenvolvido por desenvolvedores de subsistemas multimídia do kernel Linux em conjunto com alguns fabricantes de câmeras, a fim de normalizar a situação com suporte Linux para câmeras para smartphones e dispositivos embarcados vinculados a drivers proprietários. A API V4L2, já disponível no kernel Linux, foi criada para funcionar com câmeras web tradicionais separadas e está mal adaptada à tendência recente de transferir a funcionalidade do MCU para os ombros da CPU.

Ao contrário das câmeras tradicionais, nas quais as operações primárias de processamento de imagem são realizadas em um processador especializado embutido na câmera (MCU), em dispositivos embarcados, para reduzir custos, essas funções são realizadas nos ombros da CPU principal e requerem um driver complexo que inclui componentes licenciados de código aberto. Como parte do projeto libcamera, os proponentes do software de código aberto e os fabricantes de hardware tentaram criar uma solução de compromisso que, por um lado, satisfizesse as necessidades dos desenvolvedores de software de código aberto e, por outro, permitisse proteger a propriedade intelectual dos fabricantes de câmeras.

A pilha oferecida pela biblioteca libcamera é implementada inteiramente no espaço do usuário. Para garantir a compatibilidade com ambientes de software e aplicativos existentes, são fornecidas camadas de compatibilidade para a API V4L, Gstreamer e Android Camera HAL. Componentes proprietários de interação com equipamentos específicos de cada câmera são projetados como módulos executados em processos separados e interagindo com a biblioteca via IPC. Os módulos não possuem acesso direto ao dispositivo e acessam o equipamento por meio de uma API intermediária, cujas solicitações são verificadas, filtradas e limitadas ao acesso apenas às funcionalidades necessárias ao controle da câmera.

A biblioteca também fornece acesso a algoritmos para processamento e melhoria da qualidade de imagens e vídeos (ajuste de balanço de branco, redução de ruído, estabilização de vídeo, foco automático, seleção de exposição, etc.), que podem ser conectados na forma de bibliotecas externas abertas ou proprietárias módulos isolados. A API fornece acesso a recursos como determinar a funcionalidade de câmeras externas e integradas existentes, usar perfis de dispositivos, lidar com eventos de conexão e desconexão de câmeras, gerenciar a captura de dados da câmera no nível de quadro individual e sincronizar imagens com flash. É possível trabalhar separadamente com várias câmeras do sistema e organizar a captura simultânea de vários streams de vídeo de uma câmera (por exemplo, uma com baixa resolução para videoconferência e outra com alta resolução para gravação de arquivo em disco).

Fonte: opennet.ru

Adicionar um comentário