Snow Leopard: 64-битная замена QuickTime API

Я перехожу на 64-битный проигрыватель фильмов.

В настоящее время он может декодировать фильмы как с помощью QuickTime API, так и с помощью FFmpeg.

Для декодирования с помощью QuickTime API я создаю QTOpenGLTextureContext, предоставляя QTVisualContextRef, а затем получаю декодированный кадр типа CVOpenGLTextureRef с помощью QTVisualContextCopyImageForTime.

Теперь я хочу сделать свое приложение 64-битным, и поэтому я больше не могу использовать QuickTime API, потому что эти функции не 64-битные.

Итак, я перешел на QTKit и начал декодировать кадры, используя метод frameImageAtTime:withAttributes:error:, который дает декодированный кадр в различных форматах изображения. В настоящее время я сделал это, чтобы вернуть CVOpenGLTextureRef, чтобы использовать всю фактическую структуру моей процедуры отображения. Метод действительно работает, и я могу избавиться от 32-битного QTVisualContextRef.

Проблема в том, что этот метод Чрезвычайно МЕДЛЕННЫЙ !! Невозможно воспроизвести трейлер фильма Apple h264 в реальном времени. Для вывода CVOpenGLTextureRef! Требуется в 4 раза больше времени, чем требуется старым методом.

Я пробовал все другие типы изображений, которые frameImageAtTime:withAttributes:error: может обрабатывать на выходе, но безуспешно ... иногда они даже медленнее ...

Данные атрибуты:

[_imageAttr setObject:QTMovieFrameImageTypeCVOpenGLTextureRef forKey:QTMovieFrameImageType];
[_imageAttr setObject:[NSValue valueWithPointer:[openGLContext CGLContextObj]] forKey:QTMovieFrameImageOpenGLContext];
[_imageAttr setObject:[NSValue valueWithPointer:[openGLPixelFormat CGLPixelFormatObj]] forKey:QTMovieFrameImagePixelFormat];
[_imageAttr setObject:[NSNumber numberWithBool:YES] forKey:QTMovieFrameImageSessionMode];
[_imageAttr setObject:[NSNumber numberWithBool:YES] forKey:QTMovieFrameImageHighQuality];
[_imageAttr setObject:[NSNumber numberWithBool:YES] forKey:QTMovieFrameImageDeinterlaceFields];

Какая реальная замена QuickTime API 64-битной? Есть ли?

Я не могу изменить основную структуру медиаплеера, поэтому мне нужно получить CVOpenGLTextureRef, CVPixelBufferRef или CIImage*

Я надеюсь, что вы можете помочь мне!


person Andrea3000    schedule 17.09.2011    source источник
comment
Я знаю, что могу использовать AVFoundation, но эта структура доступна только в Lion, и я хочу, чтобы мое приложение было совместимо даже со Snow Leopard.   -  person Andrea3000    schedule 17.09.2011


Ответы (1)


Замена QuickTime - это AVFoundation. Возможно, он не содержит всего, что вам нужно на данный момент, но это будущее.

person Davyd Geyl    schedule 19.09.2011
comment
Я этого боялся .. Тогда перееду на Lion .. Большое спасибо ;-) - person Andrea3000; 19.09.2011