Рендеринг фильма в текстуру OpenGL в iOS - PullRequest
1 голос
/ 08 августа 2011

Можно ли рендерить фильм в текстуру OpenGL в режиме реального времени с использованием фреймворков Apple iOS? Я видел это в старом учебнике NeHe с использованием glTexSubImage2D, но мне интересно, как я могу получить доступ к данным RGB с помощью фреймворков Apple?

INIT

NSString *mPath = [[NSBundle mainBundle] pathForResource:@"movie" ofType:@"m4v"];
NSURL *url = [NSURL fileURLWithPath:mPath];
NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:AVURLAssetPreferPreciseDurationAndTimingKey];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:url options:options];

imgGen = [AVAssetImageGenerator assetImageGeneratorWithAsset:asset];
imgGen.requestedTimeToleranceBefore = kCMTimeZero;
imgGen.requestedTimeToleranceAfter = kCMTimeZero;

каждый кадр

double time = 0.xyz * asset.duration;

CMTime reqTime = CMTimeMakeWithSeconds (time, preferredTimeScale), actTime;
NSError *err = nil;
CGImageRef ref = [imgGen actualTime:&actTime error:&err];

//... GL calls to make an image from the CGImageRef

Этот метод невероятно медленный для рендеринга в реальном времени, и я могу генерировать только ~ 15 кадров. Одним из способов может быть генерация кадров на лету асинхронно, но наверняка это можно сделать в реальном времени? Самая трудоемкая часть - это вызов copyCGImageAtTime.

...