Использование QTVisualContextCopyImageForTime для распаковки Quicktime-фильмов в YUV - PullRequest
2 голосов
/ 27 февраля 2010

Я создаю пиксельный буфер, используя QTPixelBufferContextCreate с собственным размером для текущего фильма. Затем откройте фильм в контексте и проследите за требуемым кадром, проверив, используя QTVisualContextIsNewImageAvailable. Затем вызывается QTVisualContextCopyImageForTime для повторного считывания кадра для дальнейшей обработки изображения на основе процессора.

Все это прекрасно работает для всех разрешений фильмов, используя k32ARGBPixelFormat или k422YpCbCr8CodecType в качестве kCVPixelBufferPixelFormatTypeKey.

Теперь я переключаю kCVPixelBufferPixelFormatTypeKey на k422YpCbCr10CodecType или k64ARGBPixelFormat, а QTVisualContextCopyImageForTime не работает для определенных больших разрешений фильма. QTPixelBufferContextCreate работает, а QTVisualContextIsNewImageAvailable сообщает, что есть доступный кадр.

Все в порядке с декодированием фильмов шириной менее 1280 (720, 960, 1216 и т. Д.).

При декодировании более широких фильмов, таких как 1280 или 1920, QTVisualContextCopyImageForTime возвращает -6683 или kCVReturnPixelBufferNotOpenGLCompatible Файл заголовка гласит: «Пиксельный буфер не совместим с OpenGL из-за неподдерживаемого размера буфера, формата пикселя или атрибута». Я использую пиксельные буферы Core Image вместо текстур OpenGL, поэтому OpenGL не должен быть задействован.

Возвращаемся к k32ARGBPixelFormat и все снова работает. При вызове QTPixelBufferContextCreate я могу включить или исключить kCVPixelBufferWidthKey и kCVPixelBufferHeightKey, и это не имеет значения. Я хочу, чтобы был возвращен собственный немасштабированный размер, а исходные фильмы - 10-битные без сжатия или ProRes, и опять же это не меняет результат.

Похоже, что это сочетание более широких фильмов и более глубоких форматов пикселей, вызывающее сбой.

Любые идеи будут высоко цениться, так как все работают с SD-фильмами, именно при тестировании с HD-фильмами я обнаружил проблему.

Спасибо

Адам

...