我有一个用C编写的视频解码器的源代码,我现在正在移植到iPhone上。
我的问题如下:
我有一个缓冲区中帧的RGBA数据(unsigned char类型)。我将缓冲区以及宽度和高度作为参数从一个函数传递到另一个名为drawBufferWidth的函数,该函数将在屏幕上呈现该函数。 (注意:两个函数都在不同的文件中。)
我按如下方式调用drawBufferWidth:
//In calling function
unsigned char *buffer1=(unsigned char*)malloc(sizeof(unsigned char)*(4*mem1));
GLV *glv = [[GLV alloc] init];
[glv drawBufferWidth:w height:h pixels:buffer1];
我的drawBufferWidth函数如下:
//In GLV.m file
- (void)drawBufferWidth:(int)width height:(int)height pixels:(unsigned char*)pixels
{
printf("Inside draw func\n");
const int area = width *height;
const int componentsPerPixel = 4;
unsigned char pixelData[area * componentsPerPixel];
for(int i = 0; i<area; i++)
{
const int offset = i * componentsPerPixel;
pixelData[offset] = pixels[0];
pixelData[offset+1] = pixels[1];
pixelData[offset+2] = pixels[2];
pixelData[offset+3] = pixels[3];
}
const size_t BitsPerComponent = 8;
const size_t BytesPerRow=((BitsPerComponent * width) / 8) * componentsPerPixel;
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef gtx = CGBitmapContextCreate(pixelData, width, height, BitsPerComponent, BytesPerRow, colorSpace, kCGImageAlphaPremultipliedLast);
CGImageRef toCGImage = CGBitmapContextCreateImage(gtx);
UIImage *uiimage = [[UIImage alloc] initWithCGImage: toCGImage];
CGContextRelease(gtx);
CGImageRelease(toCGImage);
NSData *png = UIImagePNGRepresentation(uiimage);
imageView.image = [UIImage imageWithData:png];
}
我用一些样本像素测试了drawBufferWidth函数,它似乎工作正常。我还通过将缓冲区数据转储到文件(.yuv文件)中来检查我的缓冲区数据,并使用显示原始数据的软件对其进行检查。当我执行此代码时,屏幕上没有显示任何内容。
我正确地传递了缓冲区吗?我还需要做什么?
请帮忙!提前谢谢。