Skip to main content
Esta página corresponde al SDK 2.0.0. Enumeraciones de maquillaje / remodelado: Enumeraciones de parámetros.

Elegir el tipo de fotograma correcto

Configura FBImageFrame.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 / NSImage — mayor calidad.

Fotos grandes (vista previa y exportación)

No envíes píxeles a resolución completa a processImage: en cada movimiento del deslizador, ni tires el original después de escalar. Al abrir la foto, conserva el NSImage completo y crea un fotograma de vista previa (lado largo unos 1280–1440, createWithNSImage:). 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]. 0 desactiva ese efecto.
  • Remodelado (setReshape:intensity:): [-1.0, 1.0]. 0 desactiva. Positivo y negativo son direcciones opuestas.
Empieza bajo en vídeo en directo. Significados de las enumeraciones: Enumeraciones de parámetros.

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).
No proceses fotogramas en el hilo principal salvo estáticos muy pequeños. No compartas un motor entre colas concurrentes.

Memoria

  • Prefiere ARC. Suelta las referencias a FBImageFrame cuando un fotograma termine.
  • Reutiliza buffers de píxel de la cámara (NV12 / BGRA) en lugar de convertir cada fotograma a RGBA.
  • Llama a setFilter: / setSticker: una vez; las texturas se cargan en el siguiente processImage:.
  • Usa clearFilter, clearSticker, clearVirtualBackground y clearChromaKey en lugar de crear un segundo motor.

OpenGL externo

Cuando la vista AppKit ya posee un contexto GL:
  1. Configura config.externalContext = YES.
  2. Crea el motor en ese hilo GL.
  3. Envuelve la textura con createWithTexture:width:height:stride:.
  4. Lee la salida con [output texture].

Supervisar con getStats

Apunta a avgProcessTimeMs por debajo de ~33 ms a 30 fps. Las GPU de escritorio pueden correr resoluciones más altas; aun así baja efectos si la UI se entrecorta.

Ciclo de vida (AppKit)

Mantén el motor en el NSViewController (o un objeto de sesión). Detén la captura en viewWillDisappear. Pausa cuando la ventana se minimice. Pon el motor a nil en dealloc / applicationWillTerminate.
Usa __weak en los bloques de FBEngineCallbacks.

Captura y visualización en macOS

  • Construye fotogramas con createWithNV12:..., createWithBGRA:... o createWithNSImage:.
  • Cámara frontal / vista previa de usuario: setMirror:@"horizontal".
  • Retina: procesa en tamaño de píxel (backingScaleFactor), no en puntos.
  • Cámara: NSCameraUsageDescription. Las apps en sandbox necesitan Outgoing Connections para autenticación en línea.
  • .fbd / imágenes de fondo elegidos por el usuario: URLs con ámbito de seguridad.

Pruebas

  • Vincula el Bundle ID de la app Mac (o el nombre del proceso para herramientas CLI).
  • Usa un appId / appKey o licenseToken reales.
  • Cubre FBFrameTypeImage + createWithNSImage: y FBFrameTypeVideo.
  • Comprueba que los códigos de los setters sean FBErrorCode_Success. Universal Binary: prueba Intel y Apple Silicon.