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

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

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

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

高解像度の静止画では、スライダーのたびに原寸を processImage: に渡さないでください。縮小したあとに原画を捨てないでください。 写真を開いたら完全な UIImage を残し、プレビュー用フレームを 1 枚作ります(長辺は約 1280–1440、createWithUIImage:)。パラメータ調整はプレビュー(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 へ変換しないでください。
  • フィルターとステッカーのテクスチャは、次の processImage:(GL スレッド)で作成されます。毎フレーム setFilter: / setSticker: せず、強度は setFilterIntensity: で変えます。
  • clearFilterclearStickerclearVirtualBackgroundclearChromaKey を使い、別エンジンを作らないでください。

外部 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 を使うか、不要なメイク / ステッカーをオフにします。

ライフサイクル

エンジンは ViewController(またはセッションオブジェクト)の strong プロパティで保持します。セッション終了時は deallocnil にします。viewWillDisappear / applicationDidEnterBackground でキャプチャを止め、processImage: の呼び出しを止めます。専用の pause API はありません。
FBEngineCallbacks の block では __weak を使い、循環参照を避けます。

iOS キャプチャ

  • プレビューは多くが NV12 または BGRA です。createWithNV12:... / createWithBGRA:... を使います。
  • フロントカメラ: フレームに setMirror:@"horizontal"(ピクセルを先に反転する必要がある場合は mirror:)。
  • カメラ権限: Info.plistNSCameraUsageDescription。フォトライブラリ: NSPhotoLibraryUsageDescription

テスト

  • テストアプリの Bundle ID をバインドし、実際の appId / appKey または licenseToken を使います。プレースホルダ文字列は認証イベント 1 / 101 を引き起こします。
  • 静止画(FBFrameTypeImage + createWithUIImage:)とリアルタイム(FBFrameTypeVideo)の両方をカバーします。
  • setter が FBErrorCode_Success を返すことをアサートします。