Skip to main content
이 페이지는 SDK 2.0.0에 해당합니다. 메이크업 / 리셰이프 열거형: 파라미터 열거형.

올바른 프레임 유형 선택

processImage: 전에 FBImageFrame.type을 설정하세요. 엔진에 처리 모드 인자는 없습니다.
  • FBFrameTypeVideo (1): 카메라 미리보기, 라이브, 통화 — 더 낮은 지연.
  • FBFrameTypeImage (0): 정지 사진 / NSImage — 더 높은 품질.

큰 정지 이미지(미리보기와 내보내기)

고해상도 정지 이미지에서는 슬라이더마다 원본 픽셀을 processImage:에 넣지 마세요. 축소한 뒤 원본을 버리지 마세요. 사진을 열면 전체 NSImage를 유지하고 미리보기 프레임을 한 장 만드세요(긴 변 약 1280–1440, createWithNSImage:). 파라미터 조절은 미리보기(FBFrameTypeImage)를 처리하고, 내보내기는 같은 setter로 전체 해상도를 한 번 더 처리합니다. 출력 크기는 입력과 같습니다. 카메라 미리보기는 캡처 해상도 + FBFrameTypeVideo입니다.

파라미터 범위

  • 피부 / 메이크업 / 필터 강도: [0.0, 1.0]. 0이면 해당 효과가 꺼집니다.
  • 리셰이프 (setReshape:intensity:): [-1.0, 1.0]. 0은 꺼짐. 양수와 음수는 반대 방향입니다.
라이브 비디오에서는 낮게 시작하세요. 전체 열거형 의미: 파라미터 열거형.

엔진 하나, 직렬 큐 하나

createEngineWithConfig:는 프로세스 전역 싱글톤이 아니라 인스턴스를 반환합니다. 세션당 엔진 하나를 유지하고 직렬 큐에서 호출하세요(externalContext = YES이면 GL 스레드).
아주 작은 정지 이미지가 아니면 메인 스레드에서 프레임을 처리하지 마세요. 동시 큐에서 엔진 하나를 공유하지 마세요.

메모리

  • ARC를 권장합니다. 프레임이 끝나면 FBImageFrame 참조를 버리세요.
  • 매 프레임 RGBA로 변환하지 말고 카메라 픽셀 버퍼(NV12 / BGRA)를 재사용하세요.
  • setFilter: / setSticker:는 한 번 호출하세요. 텍스처는 다음 processImage:에서 로드됩니다.
  • 두 번째 엔진을 만들지 말고 clearFilter, clearSticker, clearVirtualBackground, clearChromaKey를 사용하세요.

외부 OpenGL

AppKit 뷰가 이미 GL 컨텍스트를 소유할 때:
  1. config.externalContext = YES를 설정합니다.
  2. 해당 GL 스레드에서 엔진을 만듭니다.
  3. createWithTexture:width:height:stride:로 텍스처를 감쌉니다.
  4. [output texture]로 출력을 읽습니다.

getStats로 모니터링

30 fps에서 avgProcessTimeMs가 약 33 ms 이하가 되도록 하세요. 데스크톱 GPU는 더 높은 해상도를 돌릴 수 있지만, UI가 끊기면 효과를 줄이세요.

라이프사이클 (AppKit)

엔진을 NSViewController(또는 세션 객체)에 유지하세요. viewWillDisappear에서 캡처를 중지하세요. 창이 최소화되면 일시 중지하세요. dealloc / applicationWillTerminate에서 엔진을 nil로 만드세요.
FBEngineCallbacks 블록에서 __weak를 사용하세요.

macOS 캡처와 표시

  • createWithNV12:..., createWithBGRA:..., 또는 createWithNSImage:로 프레임을 만드세요.
  • 전면 카메라 / 사용자 향 미리보기: setMirror:@"horizontal".
  • Retina: 포인트 크기가 아니라 픽셀 크기(backingScaleFactor)로 처리하세요.
  • 카메라: NSCameraUsageDescription. 샌드박스 앱의 온라인 인증에는 Outgoing Connections가 필요합니다.
  • 사용자가 고른 .fbd / 배경 이미지: security-scoped URL.

테스트

  • Mac 앱 Bundle ID(또는 CLI 도구의 프로세스 이름)를 바인딩하세요.
  • 실제 appId / appKey 또는 licenseToken을 사용하세요.
  • FBFrameTypeImage + createWithNSImage:FBFrameTypeVideo를 커버하세요.
  • setter 코드가 FBErrorCode_Success인지 단언하세요. Universal Binary: Intel과 Apple Silicon에서 테스트하세요.