Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // variables
- AVPlayer *videoPlayer;
- AVPlayerLayer *videoLayer;
- AVAssetReader *videoReader;
- AVAssetReaderTrackOutput*videoOutput;
- // init
- videoPlayer = [[AVPlayer alloc] initWithURL:[NSURL fileURLWithPath:[NSString stringWithUTF8String:videoPath.c_str()]]];
- if(videoPlayer == nil) {
- NSLog(@"videoPlayer == nil ERROR LOADING %s\n", videoPath.c_str());
- } else {
- NSLog(@"videoPlayer: %@", videoPlayer);
- videoLayer = [[AVPlayerLayer playerLayerWithPlayer:videoPlayer] retain];
- videoLayer.frame = [ThreeDView instance].bounds;
- // [[ThreeDView instance].layer addSublayer:videoLayer]; // test to see if it's loading and running
- AVAsset *asset = videoPlayer.currentItem.asset;
- NSArray *tracks = [asset tracksWithMediaType:AVMediaTypeVideo];
- NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA], (NSString*)kCVPixelBufferPixelFormatTypeKey, nil];
- videoReader = [[AVAssetReader alloc] initWithAsset:asset error:nil];
- videoOutput = [[AVAssetReaderTrackOutput alloc] initWithTrack:[tracks objectAtIndex:0] outputSettings:settings];
- [videoReader addOutput:videoOutput];
- [videoReader startReading];
- }
- // draw loop
- if(videoPlayer == 0) {
- ofLog(OF_LOG_WARNING, "Shot::drawVideo: videoPlayer == 0");
- return;
- }
- if(videoOutput == 0) {
- ofLog(OF_LOG_WARNING, "Shot::drawVideo: videoOutput == 0");
- return;
- }
- CMSampleBufferRef sampleBuffer = [videoOutput copyNextSampleBuffer];
- if(sampleBuffer == 0) {
- ofLog(OF_LOG_WARNING, "Shot::drawVideo: sampleBuffer == 0");
- return;
- }
- CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
- CFRelease(sampleBuffer);
- CVPixelBufferLockBaseAddress(imageBuffer,0);
- unsigned char *pixels = ( unsigned char *)CVPixelBufferGetBaseAddress(imageBuffer);
- int width = CVPixelBufferGetWidth(imageBuffer);
- int height = CVPixelBufferGetHeight(imageBuffer);
- if(videoTexture.bAllocated() == false || videoTexture.getWidth() != width || videoTexture.getHeight() != height) {
- NSLog(@"Shot::drawVideo() allocating texture %i, %i\n", width, height);
- videoTexture.allocate(width, height, GL_RGBA, true);
- }
- videoTexture.loadData(pixels, width, height, GL_BGRA);
- CVPixelBufferUnlockBaseAddress(imageBuffer,0);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement