Esta página corresponde al SDK 2.0.0. Enumeraciones de maquillaje / remodelado: Enumeraciones de parámetros.
Elegir el tipo de fotograma correcto
ConfiguraFBImageFrame.type antes de processImage:. El motor no tiene un argumento de modo de proceso.
FBFrameTypeVideo(1): vista previa de cámara, directo, llamadas — menor latencia.FBFrameTypeImage(0): fotos estáticas — mayor calidad.
Fotos grandes (vista previa y exportación)
No envíes píxeles a resolución completa aprocessImage: en cada movimiento del deslizador, ni tires el original después de escalar.
Al abrir la foto, conserva el UIImage completo y crea un fotograma de vista previa (lado largo unos 1280–1440, createWithUIImage:). Los ajustes procesan la vista previa (FBFrameTypeImage). La exportación procesa un fotograma a resolución completa con los mismos setters. El tamaño de salida coincide con la entrada. La cámara sigue en resolución de captura + FBFrameTypeVideo.
Rangos de parámetros
- Intensidad de piel / maquillaje / filtro:
[0.0, 1.0].0desactiva ese efecto. - Remodelado (
setReshape:intensity:):[-1.0, 1.0].0desactiva. Positivo y negativo son direcciones opuestas.
Un motor, una cola serial
createEngineWithConfig: devuelve una instancia, no un singleton de proceso. Mantén un motor por sesión y llámalo desde una cola serial (o el hilo GL cuando externalContext = YES).
Memoria
- Prefiere ARC. Suelta las referencias a
FBImageFramecuando un fotograma termine. - Reutiliza buffers de píxel de la cámara; evita asignar un buffer RGBA nuevo en cada fotograma si el formato de captura ya es NV12 / BGRA.
- Los filtros y stickers se cargan en el siguiente
processImage:(hilo GL). No recargues el mismo.fbden cada fotograma: llama asetFilter:/setSticker:una vez y luego asetFilterIntensity:según haga falta. - Usa
clearFilter,clearSticker,clearVirtualBackgroundyclearChromaKeyen lugar de crear un segundo motor.
OpenGL ES externo
Cuando la app ya posee un contexto GL:- Configura
config.externalContext = YES. - Crea el motor en ese hilo GL.
- Envuelve la textura con
createWithTexture:width:height:stride:. - Lee la salida con
[output texture].
Supervisar con getStats
Prefiere FBEngineStats a un temporizador casero:
avgProcessTimeMs por debajo de ~33 ms a 30 fps. Si sube, baja la resolución, cambia a FBFrameTypeVideo o desactiva maquillaje / stickers no usados.
Ciclo de vida
Mantén el motor como propiedad strong del view controller (o de un objeto de sesión). Ponlo a nil endealloc cuando termine la sesión. Pausa la captura en viewWillDisappear / applicationDidEnterBackground para dejar de llamar a processImage:: no hace falta una API especial de “pausa”.
__weak en los bloques de FBEngineCallbacks para evitar ciclos de retención.
Captura en iOS
- La vista previa de cámara suele ser
kCVPixelFormatType_420YpCbCr8BiPlanarFullRange(NV12) o BGRA. CreaFBImageFrameconcreateWithNV12:...ocreateWithBGRA:...en lugar de convertir a RGBA en CPU. - Cámara frontal:
setMirror:@"horizontal"en el fotograma (omirror:si necesitas voltear los píxeles antes del motor). - Permiso de cámara:
NSCameraUsageDescriptionenInfo.plist. Fototeca:NSPhotoLibraryUsageDescriptionsi eliges estáticos.
Pruebas
- Vincula el Bundle ID de la app de prueba y usa un
appId/appKeyolicenseTokenreales. Las cadenas dummy fallan con eventos de licencia1/101. - Cubre los caminos estático (
FBFrameTypeImage+createWithUIImage:) y en directo (FBFrameTypeVideo). - Comprueba que los códigos de retorno de los setters sean
FBErrorCode_Success.

