小编zhz*_*zhy的帖子

在iOS上如何快速将RGB24转换为BGR24?

我使用vImageConvert_RGB888toPlanar8vImageConvert_Planar8toRGB888来自Accelerate.framework将RGB24转换为BGR24,但是当需要转换的数据非常大时,例如3M或4M,需要花费的时间大约是10ms.所以有人知道一些足够快的想法吗?.我的代码如下:

- (void)transformRGBToBGR:(const UInt8 *)pict{
rgb.data = (void *)pict;

vImage_Error error = vImageConvert_RGB888toPlanar8(&rgb,&red,&green,&blue,kvImageNoFlags);
if (error != kvImageNoError) {
    NSLog(@"vImageConvert_RGB888toARGB8888 error");
}

error = vImageConvert_Planar8toRGB888(&blue,&green,&red,&bgr,kvImageNoFlags);
if (error != kvImageNoError) {
    NSLog(@"vImagePermuteChannels_ARGB8888 error");
}

free((void *)pict);
}
Run Code Online (Sandbox Code Playgroud)

rgb assembly neon ios accelerate-framework

7
推荐指数
1
解决办法
1425
查看次数

如何在iOS中以编程方式捕获__cxa_throw

AudioToolBox中的某些函数总是抛出__cxa_throw,同时ExtAudioFileDispose等函数运行良好,返回值为零,这是正常的.当我想使用try {} catch(...){}块捕获此异常时,但这不起作用.在Xcode的所有例外情况下,可以捕获此异常.在这里,只想了解__cxa_throw是什么,以及如何以编程方式捕获它?

xcode try-catch throw audiotoolbox ios

5
推荐指数
1
解决办法
974
查看次数

iPad2上的CVOpenGLESTextureCacheCreateTextureFromImage太慢了,它需要差不多30毫秒,太疯了

我使用opengl es在iPad上显示bgr24数据,我是关于opengl es的新手,所以在显示视频部分我使用来自RosyWriter的代码一个APPLE样本.它可以工作,但CVOpenGLESTextureCacheCreateTextureFromImage函数的成本超过30毫秒,而在RosyWriter中它的成本可以忽略不计.我所做的是先将BGR24转换为BGRA像素格式,然后使用CVPixelBufferCreateWithBytes函数创建一个CVPixelBufferRef,然后通过CVOpenGLESTextureCacheCreateTextureFromImage获取CVOpenGLESTextureRef.我的代码如下,

- (void)transformBGRToBGRA:(const UInt8 *)pict width:(int)width height:(int)height
{
rgb.data = (void *)pict;

vImage_Error error = vImageConvert_RGB888toARGB8888(&rgb,NULL,0,&argb,NO,kvImageNoFlags);
if (error != kvImageNoError) {
    NSLog(@"vImageConvert_RGB888toARGB8888 error");
}

const uint8_t permuteMap[4] = {1,2,3,0};

error = vImagePermuteChannels_ARGB8888(&argb,&bgra,permuteMap,kvImageNoFlags);
if (error != kvImageNoError) {
    NSLog(@"vImagePermuteChannels_ARGB8888 error");
}

free((void *)pict);
}
Run Code Online (Sandbox Code Playgroud)

并且在变换之后,将生成CVPixelBufferRef,代码如下,

[self transformBGRToBGRA:pict width:width height:height];

CVPixelBufferRef pixelBuffer;
CVReturn err = CVPixelBufferCreateWithBytes(NULL,
                             width,
                             height,
                             kCVPixelFormatType_32BGRA, 
                             (void*)bgraData, 
                             bytesByRow, 
                             NULL, 
                             0,
                             NULL, 
                             &pixelBuffer);

if(!pixelBuffer || err)
{
    NSLog(@"CVPixelBufferCreateWithBytes failed (error: %d)", err);  
    return;
}

CVOpenGLESTextureRef texture = NULL; …
Run Code Online (Sandbox Code Playgroud)

video opengl-es ios

4
推荐指数
1
解决办法
5343
查看次数