Извлечение данных из CMSampleBuffer для создания глубокой копии.IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Извлечение данных из CMSampleBuffer для создания глубокой копии.

Сообщение Anonymous »

Я пытаюсь создать копию CMSampleBuffer, возвращенную captureOutput, в AVCaptureVideoDataOutputSampleBufferDelegate.
Поскольку CMSampleBuffer поступают из предварительно выделенного пула из (15) буферов, если я прикреплю ссылки на них они не могут быть припомнены. Это приводит к удалению всех оставшихся кадров.

Для поддержания оптимальной производительности некоторые буферы выборки напрямую ссылаются на пулы памяти, которые, возможно, потребуется повторно использовать системе устройства. и другие входы захвата. Это часто относится к несжатому собственному захвату устройства, когда блоки памяти копируются как можно меньше. Если несколько буферов семплов слишком долго ссылаются на такие пулы памяти, входы больше не смогут копировать новые сэмплы в память, и эти сэмплы будут удалены.
Если ваше приложение вызывает сэмплы быть отброшен из-за слишком долгого хранения предоставленных объектов CMSampleBufferRef, но ему необходим доступ к данным выборки в течение длительного периода времени, рассмотрите возможность копирования данных в новый буфер, а затем освобождения буфера выборки (если он был ранее сохранен), чтобы память, на которую он ссылается, может быть использована повторно.

Очевидно, что мне нужно скопировать CMSampleBuffer, но CMSampleBufferCreateCopy() создаст только неполную копию. Таким образом, я прихожу к выводу, что мне необходимо использовать CMSampleBufferCreate(). Я заполнил 12! параметры, которые нужны конструктору, но столкнулся с проблемой, заключающейся в том, что мои CMSampleBuffers не содержат blockBuffer (не совсем уверен, что это такое, но это кажется важным).
Этот вопрос задавался несколько раз, но не ответил.
Глубокое копирование CMImageBuffer или CVImageBuffer и создание копии CMSampleBuffer в Swift 2.0.
Один из возможных ответов: «Я наконец понял, как использовать это для создания глубокого клона. Все методы копирования повторно использовали сохраненные данные в куче, поэтому мне пришлось извлечь данные в объект NSMutableData, а затем создать новый буфер образца. Благодарим Роба за SO. Однако я не знаю, как это сделать правильно.
Если вам интересно, это вывод print(sampleBuffer). Нет упоминания о блок-буфере, он же CMSampleBufferGetDataBuffer возвращает ноль. Существует imageBuffer, но создание «копии» с использованием CMSampleBufferCreateForImageBuffer, похоже, также не освобождает CMSampleBuffer.

EDIT: Поскольку этот вопрос был опубликован, я пробовал еще больше способов копирования памяти.
Я сделал то же самое, что пробовал пользователь Kametrixom. Это моя попытка реализовать ту же идею: сначала скопировать CVPixelBuffer, а затем использовать CMSampleBufferCreateForImageBuffer для создания окончательного буфера выборки. Однако это приводит к одной из двух ошибок:
  • EXC_BAD_ACCESS в инструкции memcpy. АКА ошибка из-за попытки доступа за пределы памяти приложения.
  • Или память будет скопирована успешно, но CMSampleBufferCreateReadyWithImageBuffer() завершится с ошибкой с кодом результата -12743, который «указывает что формат данного носителя не соответствует данному описанию формата. Например, описание формата в сочетании с CVImageBuffer не соответствует CMVideoFormatDescriptionMatchesImageBuffer."
Вы Видно, что и Kametrixom, и я использовали CMSampleBufferGetFormatDescription(sampleBuffer), чтобы попытаться скопировать описание формата исходного буфера. Таким образом, я не уверен, почему формат данного носителя не соответствует данному описанию формата.

Подробнее здесь: https://stackoverflow.com/questions/383 ... -deep-copy
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»