SDK 2.0.0. La API C++ se comparte con Linux. Enumeraciones: Enumeraciones de parámetros.
Apunta resource_path a resource.fbd
Los motores de escritorio abren el paquete con fopen. Pasa el archivo, no una carpeta:
resource.fbd junto a la app (o bajo un directorio de assets) y resuelve una ruta absoluta al arrancar.
Un motor, ProcessImage serial
BeautyEffectEngine se crea con Create y no es un singleton. Mantén una instancia para la sesión. ImageFrame y el motor no son thread-safe: serializa ProcessImage en un único worker (o el hilo GL cuando external_context = true).
shared_ptr cuando termine la sesión de cámara. Recrear el motor en cada fotograma es costoso (licencia + init).
FrameType en el fotograma
Configura frame->type antes de ProcessImage.
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 búfer completo y crea un fotograma de vista previa (lado largo unos 1280–1440). Los ajustes procesan la vista previa (FrameType::Image). 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 + FrameType::Video.
Intensidades
Empieza bajo en tiempo real. El remodelado es[-1.0, 1.0]; las demás intensidades son [0.0, 1.0].
SetBeautySkinOnly(true) para que el suavizado / blanqueamiento se queden en la piel.
Filtros y stickers
Pasa rutas o bytes.fbd. Los cambios entran en vigor en el siguiente ProcessImage. Evita cambiar filtro/sticker en cada fotograma.
Supervisar con GetStats
avg_process_time_ms por debajo de tu presupuesto de fotograma (unos 33 ms a 30 fps). Prefiere 720p para vista previa; usa FrameType::Image para exportar estáticos.
Contexto OpenGL
Coloca
facebetter.dll junto al .exe (o en PATH). Enlaza facebetter.lib en tiempo de compilación.
Pausar cuando está inactivo
Cuando la ventana está minimizada o la cámara se detiene, omiteProcessImage y opcionalmente engine.reset() si la sesión ha terminado. No proceses en el hilo de UI si bloquea la entrada.
Autenticación
Prefierelicense_token para redes sin conexión / restringidas. En caso contrario, app_id + app_key v2 en línea. No hardcodees claves de producción en repos públicos: cárgalas desde configuración. Consulta Autenticación y licencia.
