Skip to main content
このページは SDK 2.0.0 に対応します。メイク / リシェイプ列挙: パラメータ列挙

正しいフレームタイプを選ぶ

processImage:FBImageFrame.type を設定します。エンジンメソッドに独立した処理モード引数はありません。
  • FBFrameTypeVideo1: カメラプレビュー、ライブ配信、通話。遅延が低い。
  • FBFrameTypeImage0: 静止画 / NSImage。効果が高い。

大きな静止画(プレビューと書き出し)

高解像度の静止画では、スライダーのたびに原寸を processImage: に渡さないでください。縮小したあとに原画を捨てないでください。 写真を開いたら完全な NSImage を残し、プレビュー用フレームを 1 枚作ります(長辺は約 1280–1440、createWithNSImage:)。パラメータ調整はプレビュー(FBFrameTypeImage)、書き出しは同じ setter で全サイズをもう一度処理します。出力サイズは入力と同じです。カメラプレビューはキャプチャ解像度 + FBFrameTypeVideo のままです。

パラメータ範囲

  • 美肌 / メイク / フィルター強度: [0.0, 1.0]0 はその項目をオフにします。
  • リシェイプ(setReshape:intensity:): [-1.0, 1.0]0 はオフ。正負は逆方向です。
ライブプレビューは小さめの値から始めてください。列挙の意味は パラメータ列挙 を参照してください。

1 つのエンジン、1 つのシリアルキュー

createEngineWithConfig: が返すのはインスタンスであり、プロセス単位のシングルトンではありません。セッションごとにエンジンを 1 つ保持し、シリアルキュー上で呼び出します(externalContext = YES の場合は GL スレッド)。
ごく小さい静止画以外は、メインスレッドで処理しないでください。複数の並行キューから同じエンジンに同時アクセスしないでください。

メモリ

  • ARC を使い、使い終わった FBImageFramenil にします。
  • カメラがすでに NV12 / BGRA の場合、毎フレーム RGBA へ変換しないでください。
  • setFilter: / setSticker: は 1 回で十分です。テクスチャは次の processImage: で読み込まれます。
  • clearFilterclearStickerclearVirtualBackgroundclearChromaKey を使い、別エンジンを作らないでください。

外部 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 の block では __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 の両方でテストしてください。