Обрезка CVPixelBuffer и расширение переполнения с нулевым заполнением

В настоящее время я использую следующий код для обрезки моего CVPixelBuffer, и он работает в большинстве случаев.

let srcData = CVPixelBufferGetBaseAddress(srcPixelBuffer)
let srcBytesPerRow = CVPixelBufferGetBytesPerRow(srcPixelBuffer)

let offset = cropY*srcBytesPerRow + cropX*4
var srcBuffer = vImage_Buffer(data: srcData.advanced(by: offset),
                              height: vImagePixelCount(cropHeight),
                              width: vImagePixelCount(cropWidth),
                              rowBytes: srcBytesPerRow)

Тем не менее, я думаю, что это приведет к EXEC_BAD_ACCESS ошибка, когда cropHeight или же cropWidth простирается за высоту и ширину srcPixelbuffer, Я полагаю, что это так, потому что следующий фрагмент кода будет время от времени падать.

let destBytesPerRow = scaleWidth*4
guard let destData = malloc(scaleHeight*destBytesPerRow) else {
    print("Error: out of memory")
    return nil
}
var destBuffer = vImage_Buffer(data: destData,
                               height: vImagePixelCount(scaleHeight),
                               width: vImagePixelCount(scaleWidth),
                               rowBytes: destBytesPerRow)

// crashes on the next line.
let error = vImageScale_ARGB8888(&srcBuffer, &destBuffer, nil, vImage_Flags(0))

Любые идеи о том, как расширить и изображение с отступом, чтобы он не вылетал?

0 ответов

Другие вопросы по тегам