Snow Leopard: 64-битная замена для QuickTime API - PullRequest
2 голосов
/ 17 сентября 2011

Я перевожу мой видеоплеер на 64-битную версию.

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

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

Теперь я хочу сделать мое приложение 64-битным, и поэтому больше не могу использовать API QuickTime, потому что эти функции не являются 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*

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

1 Ответ

1 голос
/ 19 сентября 2011

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

...