Considerações sobre MFTs do driver em câmeras multipinos (aplicativos de dispositivo UWP)
O Windows 8.1 oferece aos IHVs e OEMs de sistema o recurso para criar plug-ins de processamento de vídeo no formato Media Foundation Transform (MFT), conhecido como MFT de driver de câmera. Depois de instalados, esses MFTs de driver podem ser usados por aplicativos de dispositivo UWP para habilitar efeitos especiais de vídeo. Algumas câmeras fornecem pinos separados para visualização, captura e imagens estáticas. Essas câmeras multipinos representam desafios únicos para os desenvolvedores. Este tópico aborda alguns pontos a serem considerados durante o desenvolvimento de um MFT de driver de câmera em uma câmera multipino. Para obter mais informações sobre como criar um MFT de driver, consulte Criando um MFT de driver de câmera.
Introdução
O MFT de driver também é conhecido como MFT0 para indicar que é o primeiro MFT a operar no leitor de origem. Uma instância separada de MFT0 é conectada a cada pino na fonte de captura. Para alguns OEMs do sistema, o driver de captura AVStream deve ter suporte para um pino de visualização, um pino de captura e um pino de imagem estática. Isso significa que pode haver três instâncias de MFT0. Este diagrama mostra essa arquitetura, com três cópias do IHV Plug-in MFT, uma para cada fluxo.
Cenários típicos para MFT0 podem apresentar desafios. Duas funções populares para MFT0 são:
Analisar o fluxo de vídeo para fornecer comentários à câmera para melhorar a captura (como foco automático baseado em host e exposição automática)
Adicionar efeitos de vídeo
Webcam de um pino
Historicamente, as câmeras foram expostas ao Windows como um pino de captura único. Este diagrama representa como funciona a webcam de um pino:
Nesse caso, tanto o controle da câmera quanto os efeitos de vídeo funcionam conforme projetado, porque a visualização e as imagens estáticas são retiradas do pino de captura depois que o controle da câmera e os efeitos de vídeo são aplicados. O resultado é que o arquivo salvo ou o chatbuddy do usuário verá os mesmos efeitos de vídeo que o usuário vê em sua visualização, e que há apenas uma instância do recurso de controle da câmera. Se houver um aplicativo de dispositivo UWP associado, o aplicativo será conectado ao MFT0 no pino de captura, para que o MFT0 obtenha as mensagens de controle do aplicativo (ou seja, o usuário).
Webcam de três pinos
Uma câmera de três pinos pode ter até três instâncias de MFT0, dependendo das necessidades do aplicativo. Este diagrama representa como funciona uma câmera de três pinos:
Essa situação apresenta vários desafios. Primeiro, no caso de uma solução de exposição automática baseada em host, que requer controle direto do sensor da câmera e das configurações do ISP, três MFT0s podem estar tentando controlar a câmera ao mesmo tempo. Isso quebra o sistema de controle.
Em segundo lugar, há potencialmente três instâncias de efeitos de vídeo. Além de incorrer no custo de três vezes os cálculos, as três instâncias do MFT0 agora devem se comunicar de uma forma que cada quadro de vídeo tenha sempre o mesmo efeito exatamente no mesmo estado. Caso contrário, o que o usuário verá não será o que está salvo ou é compartilhado.
Além disso, existem dois fatores compostos finais:
Cada instância do MFT0 pode ser criada ou encerrada a qualquer momento
O aplicativo de dispositivo UWP só está conectado a uma instância do MFT0
Vídeo compactado
Um OEM de webcam ou do sistema pode optar por compactar o vídeo antes que ele seja apresentado no pino de captura (ou seja, na webcam propriamente dita). O descarregamento da compactação para uma webcam permite que PCs de menor potência salvem e compartilhem vídeo HD. Geralmente, esse fluxo de vídeo não pode ser analisado para permitir o controle da câmera, nem os efeitos de vídeo podem ser aplicados. Isso apresenta o desafio de tornar todas as instâncias do MFT0 (e o aplicativo de dispositivo da Microsoft Store, se estiver lá) cientes de que nenhum efeito será aplicado ao fluxo de captura. Este diagrama representa o vídeo compactado:
Se um usuário aplicar um efeito de vídeo ao fluxo de visualização, ele não poderá ser aplicado ao fluxo de captura ou ao pino de imagem estática. Portanto, o usuário vê um efeito de vídeo que não é aplicado ao vídeo salvo ou transmitido. Se o fluxo de visualização for interrompido, o aplicativo de dispositivo da Microsoft Store tentará se conectar ao fluxo de captura. Quando um usuário está transmitindo um vídeo compactado, não há muitos recursos disponíveis.
Comunicação entre instâncias MFT0
Se as três instâncias do MFT0 puderem se comunicar, a maioria dos problemas poderá ser resolvida. A forma como essas instâncias se descobrem depende do IHV. Depois que todos os MFT0s puderem se comunicar, a instância do MFT0 conectada ao aplicativo de dispositivo da Microsoft Store poderá permitir que outras instâncias saibam qual efeito está sendo aplicado e seu estado atual. Além disso, as três instâncias podem determinar qual instância aplica o controle de câmera. Por fim, o pino de visualização poderá determinar se o pino de captura está transmitindo vídeo codificado. O pino de visualização pode desabilitar os efeitos de vídeo.
Embora a comunicação entre as instâncias do MFT0 resolva os principais problemas de experiência do usuário, três instâncias de efeitos de vídeo ainda devem estar sendo executadas simultaneamente. Alguns efeitos de vídeo podem usar a maioria dos recursos de CPU disponíveis, principalmente quando o vídeo de tela inteira estiver sendo visualizado e capturado ao mesmo tempo. Esses são problemas sérios. Por motivos de desempenho, cada ISV deve considerar qual processamento pode ser executado uma vez, como detecção facial, e compartilhado com todas as instâncias de MFT0.