Objective C - 将缓冲区作为函数参数传递

时间:2013-03-19 05:07:32

标签: objective-c parameters buffer

我有一个用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文件)中来检查我的缓冲区数据,并使用显示原始数据的软件对其进行检查。当我执行此代码时,屏幕上没有显示任何内容。

我正确地传递了缓冲区吗?我还需要做什么?

请帮忙!提前谢谢。

0 个答案:

没有答案