1

私のアプリケーションでは、3 つのフィルターのスタックを使用し、それを stillCamera に追加しています。filter1 から画像を取得しようとしています。これは空のフィルターであるため、実際の画像が返されます。

    [stillCamera addTarget:filter1];
[filter1 addTarget:filter2];
[filter2 addTarget:filter3];
[filter3 addTarget:cameraView];

capturePhotoAsImageProcessedUpToFilter を呼び出すと、以下のように filter3 を渡したときにのみ画像が返されます。

[stillCamera capturePhotoAsImageProcessedUpToFilter:filter3 with...

以下の 2 つの例では、画像は返されません

[stillCamera capturePhotoAsImageProcessedUpToFilter:filter1 with...
[stillCamera capturePhotoAsImageProcessedUpToFilter:filter2 with...

私は何か間違ったことをしていますか?私が使用している修正として:

[filter1 imageFromCurrentlyProcessedOutput]

capturePhotoAsImageProcessedUpToFilter と imageFromCurrentlyProcessedOutput の呼び出しに違いはありますか?

4

1 に答える 1

1

これは、昨年実装しようとしたメモリ節約の最適化の副作用だと思います。写真のような非常に大きな画像の場合、私がやろうとしているのは、フィルター処理された画像がフィルター チェーンを通過するときに、各フィルターをサポートするフレーム バッファーを破棄することです。アイデアは、任意の時点で大きなイメージのコピーを 1 つまたは 2 つだけメモリに保持することで、メモリ スパイクを最小限に抑えることです。

残念ながら、それは多くの場合、意図したとおりには機能しないようです。また、画像が進行するにつれてフレームバッファーが削除されるため、チェーンの最後のフィルターのみが有効なフレームバッファーから読み取ることになります。内部フレームバッファとテクスチャ キャッシュを優先して、近い将来にこの最適化を削除する予定ですが、その間にこれらの中間フィルタからチェーンを読み取るために何ができるかわかりません。

于 2014-01-14T16:51:10.677 に答える