Escolher FrameType
DefinaImageFrame.type antes de processImage. Não há argumento extra de modo.
FrameType.VIDEO (padrão)
- Prévia da câmera, videochamadas, transmissão ao vivo
- Menor latência
FrameType.IMAGE
- Fotos da galeria, exportação, captura de stills
- Qualidade mais alta, mais custo por quadro
Stills grandes (prévia e exportação)
Não envie pixels em resolução total paraprocessImage a cada movimento do slider, nem descarte o original depois de reduzir.
Ao abrir a foto, mantenha o Bitmap completo e crie um quadro de prévia (lado longo cerca de 1280–1440). Ajustes chamam processImage na prévia (FrameType.IMAGE). A exportação chama processImage num quadro em resolução total com os mesmos setters. O tamanho da saída acompanha a entrada — não amplie a prévia. A câmera continua na resolução de captura + FrameType.VIDEO.
Faixas de parâmetros
Comece baixo; aumente depois de confirmar a detecção facial e o FPS.
Prévia ao vivo (exemplo):
setBeautySkinOnly(true) quando não quiser suavização em cabelo / roupas / fundo.
Nomes das predefinições: Enums de parâmetros.
Memória
UseByteBuffers diretos ao criar quadros a partir de dados de pixel:
- Um mecanismo por processo / contexto GL; não crie a cada quadro
- Stills interativos: reduza uma cópia para a prévia; mantenha o
Bitmaporiginal para exportar. Veja Stills grandes convert()aloca um quadro novo — libere-o
OpenGL ES
QuandoexternalContext = true:
- Construa o mecanismo no thread GL com um contexto atual
- Mantenha a textura de entrada,
processImagee a textura de saída nesse mesmo contexto - Recrie o mecanismo após perda de contexto
- Leia o resultado com
output.getTexture(), não um download para CPU, quando permanecer na GPU
Um mecanismo, Application Context
Mantenha um únicoBeautyEffectEngine. Use getApplicationContext() para que o mecanismo sobreviva a uma Activity e ainda chame release() quando a sessão terminar.
Fora do thread de UI
ExecuteprocessImage em um thread de câmera / GL / dedicado. Envie resultados ao looper principal apenas para a UI.
ImageFrame entre threads sem o seu próprio lock. O caminho da câmera no demo processa o quadro mais recente no thread de renderização.
Filtros e adesivos a partir de assets
Mantenha arquivos.fbd em assets/ e passe byte[] (ou copie para filesDir e passe um caminho). Chame setFilter / setSticker uma vez quando o usuário escolher um efeito, não a cada quadro. Ajuste a mistura com setFilterIntensity.
O upload na GPU acontece no próximo processImage.
Monitorar com getStats
avgProcessTimeMs permanecer acima de ~33 ms em uma prévia ao vivo de 30 FPS, reduza a resolução, use FrameType.VIDEO ou diminua remodelagem / maquiagem / fundo virtual simultâneos.
Persistir sliders do usuário
Armazene as intensidades você mesmo (SharedPreferences). Reaplique com setSmoothing, setReshape, setLipstick, … depois que o mecanismo for criado — o SDK não persiste o estado da UI.
Ciclo de vida
onResume/onPause: inicie e pare a câmera; mantenha o mecanismo se for retomar em breveonDestroy/onDetach:engine.release()se este owner o criouexternalContext: criar / destruir no thread GL
Testes
licenseToken ou /facebetter/v2/auth alcançável mais um nome de pacote vinculado).
