- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
所以我从网络回调(voip 应用程序)中获取 3 个单独数组中的原始 YUV 数据。根据我的理解,您不能根据 here 使用 CVPixelBufferCreateWithPlanarBytes
创建 IOSurface 支持的像素缓冲区
Important: You cannot use CVPixelBufferCreateWithBytes() or CVPixelBufferCreateWithPlanarBytes() with kCVPixelBufferIOSurfacePropertiesKey. Calling CVPixelBufferCreateWithBytes() or CVPixelBufferCreateWithPlanarBytes() will result in CVPixelBuffers that are not IOSurface-backed
因此您必须使用 CVPixelBufferCreate
创建它,但是如何将数据从调用传回您创建的 CVPixelBufferRef
?
- (void)videoCallBack(uint8_t *yPlane, uint8_t *uPlane, uint8_t *vPlane, size_t width, size_t height, size_t stride yStride,
size_t uStride, size_t vStride)
NSDictionary *pixelAttributes = @{(id)kCVPixelBufferIOSurfacePropertiesKey : @{}};
CVPixelBufferRef pixelBuffer = NULL;
CVReturn result = CVPixelBufferCreate(kCFAllocatorDefault,
width,
height,
kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange,
(__bridge CFDictionaryRef)(pixelAttributes),
&pixelBuffer);
我不确定之后要做什么?最后我想把它变成一个 CIImage 然后我可以使用我的 GLKView 来渲染视频。当您创建数据时,人们如何将数据“放入”缓冲区?
最佳答案
我想通了,这很微不足道。下面是完整的代码。唯一的问题是我收到 BSXPCMessage received error for message: Connection interrupted
视频显示需要一段时间。
NSDictionary *pixelAttributes = @{(id)kCVPixelBufferIOSurfacePropertiesKey : @{}};
CVPixelBufferRef pixelBuffer = NULL;
CVReturn result = CVPixelBufferCreate(kCFAllocatorDefault,
width,
height,
kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange,
(__bridge CFDictionaryRef)(pixelAttributes),
&pixelBuffer);
CVPixelBufferLockBaseAddress(pixelBuffer, 0);
uint8_t *yDestPlane = CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 0);
memcpy(yDestPlane, yPlane, width * height);
uint8_t *uvDestPlane = CVPixelBufferGetBaseAddressOfPlane(pixelBuffer, 1);
memcpy(uvDestPlane, uvPlane, numberOfElementsForChroma);
CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
if (result != kCVReturnSuccess) {
DDLogWarn(@"Unable to create cvpixelbuffer %d", result);
}
CIImage *coreImage = [CIImage imageWithCVPixelBuffer:pixelBuffer]; //success!
CVPixelBufferRelease(pixelBuffer);
我忘了添加交错两个 U 和 V 平面的代码,但这应该不会太糟糕。
关于ios - 从支持 IOSurface 的 YUV 创建 CVPixelBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31823673/
如何将一系列 IOSurfaces 绘制到另一个然后将其绘制到屏幕上?我在 MultiGPU 示例项目中尝试过一些来自苹果的源代码,但我设法做的最好的事情就是绘制一个白屏或获得大量的工件并使应用程序崩
这个问题是对: 的扩展链接-1:Creating an image out of the ios surface and saving it Link-2:Taking Screenshots fro
当我尝试编译我的调整时出现此错误。 'IOSurface/IOSurfaceAPI.h' file not found #include 我试过了 this answer ,但我在计算机上找不到 /
要使用快速屏幕截图,我需要执行一些 IOSurfaceRef 操作——使用 CARenderServerRenderDisplay(0, CFSTR("LCD"), iosurfaceref, 0,
如果我使用 IOSurface 框架为我的应用制作视频,苹果会拒绝我的应用吗 最佳答案 是的,如果您链接 IOSurface Apple 将拒绝您的应用程序。 商店中的一些项目正在使用它,但他们可
这是一个由两部分组成的问题。我有以下代码可以抓取当前显示表面并从表面创建视频(一切都在后台发生)。 for(int i=0;i<100;i++){ IOMobileFramebuf
对于我当前的项目,我正在读取 iPhone 的主摄像头输出。然后,我通过以下方法将像素缓冲区转换为缓存的 OpenGL 纹理:CVOpenGLESTextureCacheCreateTextureFr
写入IOSurface时需要使用哪些API,以及需要采取哪些预防措施在 XPC 进程中,该进程也被用作 MTLTexture 的后备存储。在主应用程序中? 在我的 XPC 服务中,我有以下内容: IO
我想使用 mipmapping 渲染 IOSurface 纹理。 我正在从 IOSurface 生成 OpenGL 纹理,如下所示: let error = CGLTexImageIOSurface2
我正在尝试修改 Apple MultiGPUIOSurface 示例(特别是文件 http://developer.apple.com/library/mac/#samplecode/MultiGPU
我正在尝试在 Swift 中创建一个 IOSurface,然后从中创建一个 CIImage。 IOSurfaceRef 看起来不错,但 CIImage 返回 nil: textureImage
我在 iOS 12 及更高版本的应用程序中遇到内存问题。 IOSurface 在 iOS 12.1.1 中同时逐渐增加,在 iOS 11 版本中运行良好。我在下面附上了问题截图, 为什么iOS 12版
我有一个 IOSurface 支持的 CVPixelBuffer,它以 30fps 从外部源更新。我想在 NSView 中呈现图像数据的预览——对我来说最好的方法是什么? 我可以直接在 View 上设
我正在尝试使用 CVPixelBufferCreateWithIOSurface 和从 IOSurfaceGetBaseAddressOfPlane 读取像素来捕获 IOSurface。 但是,在较新
我想从后台服务截屏。私有(private) API 很好,因为我不需要提交到应用商店。我已经尝试过 UIGetScreenImage,它在后台应用程序中不起作用。 我正在使用从 SO 获得的以下代码。
这个错误很奇怪。昨天一切都很好。我安装了Xcode 9 beta,然后我使用Xcode 8在iPhone 6p,iOS 9.3.2上运行我的应用程序(我昨天可以这样做,我可以仍然在模拟器上运行应用程序
当我运行我的项目时,你能帮我解决这个问题吗: Could not load IOSurface for time string. Rendering locally instead 我不知道我的编码是
在使用我的 ipad 应用程序时,我收到了一系列警告(Mar 18 11:18:06 kernel[0] : IOSurface warning: buffer allocation failed.
所以我从网络回调(voip 应用程序)中获取 3 个单独数组中的原始 YUV 数据。根据我的理解,您不能根据 here 使用 CVPixelBufferCreateWithPlanarBytes 创建
我收到 YUV 帧 (kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange),当从 CVPixelBufferRef 创建 CIImage 时,我得到: in
我是一名优秀的程序员,十分优秀!