実際にはiPad ProのiOS10で画像処理を行っています。 私は画像処理のスピードをテストするために小さなSwift3画像処理アプリケーションを書いています。 私のデコーダは、〜33ms(約30FPS)の新しいフレームを送信します。追加のバッファリングを行わずにiOSのCoreImageフィルタで処理する必要があります。すべての〜33msには、次の関数が呼び出されます。iOSのUnsafeMutableRawPointerのGPUフィルタ
func newFrame(_ player: MediaPlayer!, buffer: UnsafeMutableRawPointer!,
size: Int32, format_fourcc: UnsafeMutablePointer<Int8>!,
width: Int32, height: Int32, bytes_per_row: Int32,
pts: Int, will_show: Int32) -> Int32 {
if String(cString: format_fourcc) == "BGRA" && will_show == 1 {
// START
var pixelBuffer: CVPixelBuffer? = nil
let ret = CVPixelBufferCreateWithBytes(kCFAllocatorSystemDefault,
Int(width),
Int(height),
kCVPixelFormatType_32BGRA,
buffer,
Int(bytes_per_row),
{ (releaseContext:
UnsafeMutableRawPointer?,
baseAddr:
UnsafeRawPointer?) ->() in
// Do not need to be used
// since created CVPixelBuffer
// will be destroyed
// in scope of this function
// automatically
},
buffer,
nil,
&pixelBuffer)
// END_1
if ret != kCVReturnSuccess {
NSLog("New Frame: Can't create the buffer")
return -1
}
if let pBuff = pixelBuffer {
let img = CIImage(cvPixelBuffer: pBuff)
.applyingFilter("CIColorInvert", withInputParameters: [:])
}
// END_2
}
return 0
}
私は、次のいずれかの問題を解決する必要があります。バックUnsafeMutableRawPointerバッファメモリへCIImageのIMG生のメモリデータをコピーする
- 。
- が何らかの形で直接
//間のコードブロックは、と// END_2必要性を開始CVPixelBuffer pixelBuffer又はUnsafeMutableRawPointerバッファにGPU画像フィルタを適用する5ミリ秒未満で実行します。
は、私が知っている://間のコードが1.3ms未満でと// END_1の実行を開始
- 。
ご意見をお寄せください。
敬具、 アレックス