HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – CVOpenGLESTexture方法类型的官方文档在哪里?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试过谷歌和stackoverflow但我似乎无法找到以CVOpenGLESTexture开头的函数的官方文档.我可以看到它们来自核心视频,我知道它们是在iOS 5上添加的,但搜索文档并没有给我任何东西.

我正在寻找有关参数的信息,他们做什么,如何使用它们等,就像在其他苹果框架中一样.

到目前为止我所能做的就是命令点击它来查看信息,但这感觉非常奇怪.或者有没有办法添加它,以便它可以显示xcode右侧的快速帮助?

如果这是一个愚蠢的问题,谢谢,对不起.

PD:核心视频参指南似乎也没有解释这些.

@H_874_10@

解决方法

不幸的是,确实没有关于这些新功能的任何文档.您现在要找到的最好的是CVOpenGLESTextureCache.h头文件,您将在其中看到函数参数的基本描述:
/*!
    @function   CVOpenGLESTextureCachecreate
    @abstract   Creates a new Texture Cache.
    @param      allocator The CfallocatorRef to use for allocating the cache.  May be NULl.
    @param      cacheAttributes A CFDictionaryRef containing the attributes of the cache itself.   May be NULl.
    @param      eaglContext The OpenGLES 2.0 context into which the texture objects will be created.  OpenGLES 1.x contexts are not supported.
    @param      textureAttributes A CFDictionaryRef containing the attributes to be used for creaTing the CVOpenGLESTexture objects.  May be NULl.
    @param      cacheOut   The newly created texture cache will be placed here
    @result     Returns kCVReturnsuccess on success
*/
CV_EXPORT CVReturn CVOpenGLESTextureCachecreate(
                    CfallocatorRef allocator,CFDictionaryRef cacheAttributes,void *eaglContext,CFDictionaryRef textureAttributes,CVOpenGLESTextureCacheRef *cacheOut) __OSX_AVAILABLE_STARTinG(__MAC_NA,__IPHONE_5_0);

更难的元素是属性字典,遗憾的是,您需要找到示例才能正确使用这些函数. Apple有GLCameraRippleRosyWriter示例,展示了如何使用BGRA和YUV输入颜色格式的快速纹理上传路径. Apple还在WWDC上提供了ChromaKey示例(可能仍然可以与视频一起访问),演示了如何使用这些纹理缓存从OpenGL ES纹理中提取信息.

我刚刚在我的GPUImage框架中获得了这种快速纹理上传(源代码可以在该链接中获得),所以我将列出我能够解析的内容.首先,我使用以下代码创建纹理缓存:

CVReturn err = CVOpenGLESTextureCachecreate(kcfAllocatorDefault,NULL,(__bridge void *)[[GPUImageOpenGLESContext sharedImageProcessingOpenGLESContext] context],&coreVideoTextureCachE);
if (err) 
{
    NSAssert(NO,@"Error at CVOpenGLESTextureCachecreate %d");
}

所引用的上下文是为OpenGL ES 2.0配置的EAGLContext.

我使用它来保存视频内存中iOS设备相机的视频帧,我使用以下代码执行此操作:

CVPixelBufferLockBaseAddress(cameraFrame,0);

CVOpenGLESTextureRef texture = NULL;
CVReturn err = CVOpenGLESTextureCachecreateTextureFromImage(kcfAllocatorDefault,coreVideoTextureCache,cameraFrame,GL_TEXTURE_2D,GL_RGBA,bufferWidth,bufferHeight,GL_BGRA,GL_UNSIGNED_BYTE,&texturE);

if (!texture || err) {
    NSLog(@"CVOpenGLESTextureCachecreateTextureFromImage Failed (error: %d)",err);  
    return;
}

outputTexture = CVOpenGLESTextureGetName(texturE);
glBindTexture(GL_TEXTURE_2D,outputTexturE);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);

// Do processing work on the texture data here

CVPixelBufferUnlockBaseAddress(cameraFrame,0);

CVOpenGLESTextureCacheFlush(coreVideoTextureCache,0);
CFRelease(texturE);
outputTexture = 0;

这将从纹理缓存创建一个新的CVOpenGLESTextureRef,表示OpenGL ES纹理.此纹理基于摄像头传入的CVImageBufferRef.然后从CVOpenGLESTextureRef中检索该纹理并为其设置适当的参数(这在我的处理中似乎是必要的).最后,我完成了纹理的工作,并在完成后进行清理.

这种快速上传过程对iOS设备产生了真正的影响.在iPhone 4S上上传和处理单个640×480视频帧的时间从9.0毫秒到1.8毫秒.

我也是heard that this works in reverse,这可能允许在某些情况下替换glReadPixels(),但我还没试过.

@H_874_10@ @H_874_10@

大佬总结

以上是大佬教程为你收集整理的ios – CVOpenGLESTexture方法类型的官方文档在哪里?全部内容,希望文章能够帮你解决ios – CVOpenGLESTexture方法类型的官方文档在哪里?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。