как освободить буферы vImage после завершения операции в IOS - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь выполнить некоторые вычисления гистограммы с использованием буферов vImage в среде Accelerate и предоставляю изображение камеры как UIimage, преобразованное из CVpixelbuffer. Алгоритм работает без ошибок, однако данные изображения с камеры обрабатываются на экране очень медленно. Я прочитал некоторую информацию в документации Apple об освобождении буферов после завершения задачи. Я написал две строки кода после захвата данных из буфера. Однако ничего не меняется. См. Прикрепленный снимок экрана с данными буферов после их освобождения. SourceBuffer и histogramSourceBuffer кажутся не освобожденными. Я не знаю, как в отладчике должен отображаться свободный буфер, но мой показан с информацией о высоте, ширине и данных. Любые рекомендации, как освободить буфер и как я могу его освободить. Большое спасибо

  if let finalImage =  try? sourceBuffer.createCGImage(format: format) {
            sourceBuffer.free()
            histogramSourceBuffer.free()
            return UIImage(cgImage: finalImage)

введите описание изображения здесь

1 Ответ

1 голос
/ 16 июля 2020

Вам нужно вызвать free () для указателя vImage_Buffer.data, чтобы освободить память. Сама структура - это другое распределение.

Сама гистограмма представляет собой массив указателей на массивы vImagePixelCounts. Это должно быть освобождено в соответствии с тем, как вы распределили массивы vImagePixelCounts. vImage не участвует в этой части, поэтому он находится между вами и вами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...