iOS: обрезка CMSampleBufferRef перед добавлением в AVAssetWriterInput - PullRequest
7 голосов
/ 27 октября 2011

В настоящее время я экспериментирую с CoreImage, изучая, как применять фильтры CIF к каналу камеры. В настоящее время мне удалось взять канал с камеры, применить фильтр и записать канал в AVAssetWriter в виде видео, но у меня возникла одна проблема, заключающаяся в том, что в процессе фильтрации я фактически обрезаю данные изображения так что он всегда имеет квадратные размеры (необходимые для других аспектов проекта)

Мой процесс выглядит следующим образом:

  1. Подача захвата с использованием AVCaptureSession
  2. Возьмите CMSampleBufferRef из выходных данных захвата и получите CVPixelBufferRef
  3. Получите базовый адрес CVPixelBufferRef и создайте CGBitmapContext, используя базовый адрес в качестве данных (чтобы мы могли его перезаписать)
  4. Преобразование CVPixelBufferRef в CIImage (используя один из конструкторов CIImage)
  5. Применение фильтров к CIImage
  6. Преобразование CIImage в CGImageRef
  7. Отрисовка CGImageRef в CGBitmapContext (что приводит к перезаписи содержимого примеров буфера)
  8. Добавьте CMSampleBufferRef к входу AVAssetWriterInput.

Не рисуя CGImageRef в контекст, вот что я получаю:

enter image description here

После отрисовки CGImageRef в контекст вот что я получаю:

enter image description here

В идеале я просто хочу иметь возможность сообщить CMSampleBufferRef, что у него есть новые измерения, поэтому дополнительная информация опущена. Но мне интересно, придется ли мне вообще создавать новый CMSampleBufferRef.

Любая помощь будет принята с благодарностью!

...