 by lanceabson1 » Jan 10, 2011 @ 9:35pm
by lanceabson1 » Jan 10, 2011 @ 9:35pm 
			
			We also are ok if we make a texture surface from a file.
But we need to make a texture surface from a UIImage which is created from the raw data feed of the iphone camera.
// Create a UIImage from sample buffer data from the camera
- (UIImage *) imageFromSampleBuffer:(CMSampleBufferRef) sampleBuffer 
{
    // Get a CMSampleBuffer's Core Video image buffer for the media data
    CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 
    // Lock the base address of the pixel buffer
    CVPixelBufferLockBaseAddress(imageBuffer, 0); 
	
    // Get the number of bytes per row for the pixel buffer
    void *baseAddress = CVPixelBufferGetBaseAddress(imageBuffer); 
	
    // Get the number of bytes per row for the pixel buffer
    size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer); 
    // Get the pixel buffer width and height
    size_t width = CVPixelBufferGetWidth(imageBuffer); 
    size_t height = CVPixelBufferGetHeight(imageBuffer); 
	
    // Create a device-dependent RGB color space
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
	
    // Create a bitmap graphics context with the sample buffer data
    CGContextRef context = CGBitmapContextCreate(baseAddress, 256, 256, 8,
    bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst); 
    // Create a Quartz image from the pixel data in the bitmap graphics context
    CGImageRef quartzImage = CGBitmapContextCreateImage(context); 
    // Unlock the pixel buffer
    CVPixelBufferUnlockBaseAddress(imageBuffer,0);
	
    // Free up the context and color space
    CGContextRelease(context); 
    CGColorSpaceRelease(colorSpace);
	
    // Create an image object from the Quartz image
    UIImage *image = [UIImage imageWithCGImage:quartzImage];
	
    // Release the Quartz image
    CGImageRelease(quartzImage);
    pngImageForTexture = UIImagePNGRepresentation(image);
}
// Try to create the Edgelib texture from the UIImage .png above
   int camBufSize = [appDel.rootViewController.arViewController.pngImageForTexture length];
   unsigned long lcamBufSize = camBufSize;
   const void* texBytes = [appDel.rootViewController.arViewController.pngImageForTexture bytes];
   ERESULT res;
   res = display->CreateSurface(&camTex, &texBytes, lcamBufSize);	
EST_READONLYPATH);
			
   if (res != E_OK) NSLog(@"ERR: CreateSurface %d %d",camBufSize, res);
   else NSLog(@"OK: CreateSurface %d", camBufSize);
			
   display->UploadTexture( &camTex );