Após quatro anos de desenvolvimento, finalmente a biblioteca libcamera 0.0.1 lançado para Linux, Android e ChromeOS.
Libcamera é um projeto que está sendo produzido pelos desenvolvedores do subsistema multimídia do kernel Linux junto com alguns fabricantes de câmeras para padronizar o suporte do Linux para câmeras para smartphones e dispositivos embarcados que estão vinculados a drivers proprietários.
O código do projeto, bem como as instruções para compilar a biblioteca para trabalhar com ele, podem ser encontrados no link a seguir.
Agora, após quatro anos de desenvolvimento, foi lançada a primeira versão do projeto libcamera (0.0.1).
Libcamera 0.0.1 lançado para Linux, Android e ChromeOS
Libcamera 0.0.1 oferece uma pilha de software para trabalhar com filmadoras, câmeras e sintonizadores de TV no Linux, Android e ChromeOS, que continua o desenvolvimento a partir da API V4L2 e acabará por substituí-lo.
Como a API da biblioteca ainda está mudando e não está totalmente estabilizada, até agora o projeto foi desenvolvido sem bifurcar versões individuais usando um modelo de desenvolvimento contínuo.
Em resposta à necessidade de as distribuições acompanharem as alterações da API que afetam a compatibilidade e facilitar o envio da biblioteca em pacotes, agora foi decidido produzir lançamentos regulares que reflitam até que ponto a ABI e as APIs foram alteradas.
A API V4L2 que já está disponível no kernel Linux foi criada para funcionar com webcams tradicionais e não se encaixa bem com a tendência recente de mover a funcionalidade do MCU para a CPU.
Diferentemente das câmeras tradicionais, nas quais as operações primárias de processamento de imagem são realizadas no processador de propósito específico (MCU) embutido na câmera, em dispositivos embarcados, para reduzir custos, essas funções são colocadas nos ombros da CPU principal e requerem um sofisticado driver que inclui componentes licenciados que não podem ser abertos.
Dentro da estrutura do projeto libcamera, defensores do software livre e fabricantes de hardware tentaram criar uma solução de compromisso que, por um lado, atendesse às necessidades dos desenvolvedores de código aberto e, por outro lado, protegesse a propriedade intelectual dos fabricantes de câmeras.
A pilha fornecida pela biblioteca libcamera é implementada inteiramente no espaço do usuário. Para garantir a compatibilidade com aplicativos e ambientes de programação existentes, são fornecidas camadas para compatibilidade com a API V4L, Gstreamer e Android Camera HAL.
Os componentes de interação de hardware proprietários específicos da câmera são empacotados como módulos que são executados em processos separados e interagem com a biblioteca via IPC.
Os módulos não têm acesso direto ao dispositivo e acessam o equipamento por meio de uma API intermediária, por meio da qual as solicitações de acesso à funcionalidade necessária para controlar a câmera são analisadas, filtradas e estranguladas.
A biblioteca também fornece acesso a algoritmos para processamento e melhoria da qualidade de imagens e vídeos (correção de balanço de branco, remoção de ruído, estabilização de vídeo, autofoco, seleção de exposição, etc.), que podem ser conectados como bibliotecas externas abertas ou módulos proprietários isolados.
A API fornece acesso a funções como determinar a funcionalidade de câmeras integradas e externas existentes, usar perfis de dispositivo, manipular eventos de conexão e desconexão de câmera, gerenciar captura de dados de câmera no nível de quadro individual e sincronizar imagens com operação de flash.
É possível trabalhar separadamente com várias câmeras no sistema e organizar a captura de vários streams de vídeo de uma câmera ao mesmo tempo (por exemplo, uma com baixa resolução para uma videoconferência,
Esta versão de patch inicia os procedimentos de lançamento de pacotes para o projeto. Os lançamentos iniciais incluirão um aumento no número da versão do patch (0.0.x), bem como um aumento correspondente no nome do filho.
Por fim, para quem estiver interessado em saber mais sobre o assunto, deve saber que o código do projeto está escrito em C++ e é distribuído sob a licença LGPLv2.1.