Questa funzionalità introduce un insieme di metodi che consentono ai client della videocamera di aggiungere e rimuovere dinamicamente le superfici di output mentre la sessione di acquisizione è attiva e lo streaming della videocamera è in corso. Un nuovo output può essere mappato a uno stream specifico di una videocamera condivisa selezionata dall'utente. Una volta aggiunta, una superficie può essere rimossa in qualsiasi momento.
L'idea generale è quella di condividere i buffer associati a un particolare flusso della videocamera all'interno di diverse superfici di output. Un contatore di riferimenti interni tiene traccia dei buffer man mano che diventano pronti per l'ulteriore elaborazione lato consumer. Quando tutti i consumatori completano le rispettive attività, il buffer viene rimosso dalla coda ed è disponibile per la videocamera.
Figura 1. Condivisione del buffer
La Figura 1 mostra uno scenario di esempio in cui i buffer elaborati dallo stream della videocamera 2 vengono collegati e scollegati dinamicamente, conteggiati in base ai riferimenti e gestiti dal componente di suddivisione dello stream all'interno di uno stream di output condiviso dedicato nel servizio della videocamera.
Esempi e origine
L'implementazione principale di questa funzionalità si trova nel modulo
Camera3StreamSplitter
. La documentazione su questa funzionalità è disponibile nel riferimento per gli sviluppatori:
Implementazione
Non è richiesta alcuna implementazione sul lato HAL della fotocamera, poiché questa funzionalità è implementata sul lato framework.
Convalida
La tua implementazione deve superare i test CTS che coprono questa funzionalità del modulo MultiViewTest e della libreria JNI nativa per l'API nativa.