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

올바른 프레임 유형 선택

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

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

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

파라미터 범위

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

엔진 하나, 직렬 큐 하나

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

메모리

  • ARC를 권장합니다. 프레임이 끝나면 FBImageFrame 참조를 버리세요.
  • 카메라 픽셀 버퍼를 재사용하세요. 캡처 형식이 이미 NV12 / BGRA이면 매 프레임 새 RGBA 버퍼를 할당하지 마세요.
  • 필터와 스티커는 다음 processImage:(GL 스레드)에서 로드됩니다. 같은 .fbd를 매 프레임 다시 로드하지 마세요. setFilter: / setSticker:를 한 번 호출한 뒤 필요하면 setFilterIntensity:를 사용하세요.
  • 두 번째 엔진을 만들지 말고 clearFilter, clearSticker, clearVirtualBackground, clearChromaKey를 사용하세요.

외부 OpenGL ES

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

getStats로 모니터링

직접 만든 타이머보다 FBEngineStats를 권장합니다.
30 fps에서 avgProcessTimeMs가 약 33 ms 이하가 되도록 하세요. 올라가면 해상도를 낮추거나, FBFrameTypeVideo로 바꾸거나, 사용하지 않는 메이크업 / 스티커를 끄세요.

라이프사이클

엔진을 뷰 컨트롤러(또는 세션 객체)의 strong 프로퍼티로 유지하세요. 세션이 끝나면 dealloc에서 nil로 만드세요. viewWillDisappear / applicationDidEnterBackground에서 캡처를 일시 중지해 processImage: 호출을 멈추세요. 별도의 “pause” API는 필요 없습니다.
retain cycle을 피하려면 FBEngineCallbacks 블록에서 __weak를 사용하세요.

iOS 캡처

  • 카메라 미리보기는 보통 kCVPixelFormatType_420YpCbCr8BiPlanarFullRange(NV12) 또는 BGRA입니다. CPU에서 RGBA로 변환하지 말고 createWithNV12:... 또는 createWithBGRA:...FBImageFrame을 만드세요.
  • 전면 카메라: 프레임에 setMirror:@"horizontal"(엔진 전에 픽셀을 뒤집어야 하면 mirror:).
  • 카메라 권한: Info.plistNSCameraUsageDescription. 정지를 고르면 NSPhotoLibraryUsageDescription.

테스트

  • 테스트 앱의 Bundle ID를 바인딩하고 실제 appId / appKey 또는 licenseToken을 사용하세요. 더미 문자열은 라이선스 이벤트 1 / 101로 실패합니다.
  • 정지(FBFrameTypeImage + createWithUIImage:)와 라이브(FBFrameTypeVideo) 경로를 모두 커버하세요.
  • setter 반환 코드가 FBErrorCode_Success인지 단언하세요.