尝试将 CIImage 与从视频文件帧获得的纹理一起使用时,CIImage 为空白
Posted
技术标签:
【中文标题】尝试将 CIImage 与从视频文件帧获得的纹理一起使用时,CIImage 为空白【英文标题】:CIImage is blank when trying to use it with texture obtained from video file frame 【发布时间】:2016-02-01 18:15:10 【问题描述】:我正在尝试创建一个将过滤器应用于视频文件的应用。我想使用核心图像过滤器
imageBuffer obtained from AVAssetReaderInput
int height = (int)CVPixelBufferGetHeight(imageBuffer);
int width = (int)CVPixelBufferGetWidth(imageBuffer);
glActiveTexture(GL_TEXTURE0);
CVReturn error;
CVOpenGLESTextureRef _textureRef;
error = CVOpenGLESTextureCacheCreateTextureFromImage (kCFAllocatorDefault,
self.openGLContext.textureCache,
imageBuffer,
NULL, // texture attributes
GL_TEXTURE_2D,
GL_RGBA, // opengl format
width,
height,
GL_BGRA,
GL_UNSIGNED_BYTE, // native ios format
0,
&_textureRef);
if (error)
NSLog(@"Error while creating Texture");
glBindTexture(CVOpenGLESTextureGetTarget(_textureRef), CVOpenGLESTextureGetName(_textureRef));
GLint texture = CVOpenGLESTextureGetName(_textureRef);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
CIContext *context = [CIContext contextWithEAGLContext:self.openGLContext.context options:nil];
CIImage *my_image = [CIImage imageWithTexture:texture size:CGSizeMake(1280, 720) flipped:NO colorSpace:nil];
CIImage (my_image) 始终为空白(即显示为黑色)并且不包含视频纹理。 我正在 iPhone 6 设备上对其进行测试。 我哪里错了?
【问题讨论】:
你有没有想过这个问题? 【参考方案1】:你为什么不用它来创建你的 CIImage:
CIImage *inputImage = [CIImage imageWithCVPixelBuffer:imageBuffer options:nil];
您可以将过滤器应用于此图像。
【讨论】:
以上是关于尝试将 CIImage 与从视频文件帧获得的纹理一起使用时,CIImage 为空白的主要内容,如果未能解决你的问题,请参考以下文章
Windows Media Foundation 使用 IMFTransform 将 mp4 电影帧解码为 2D 纹理