- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 objective-c 中,您可以轻松地将 CVImageBufferRef 转换为 CVPixelBufferRef:
CMSampleBufferRef sampleBuffer = some value
CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
我怎样才能快速做到这一点?
var pixelBuffer : CVPixelBufferRef = CMSampleBufferGetImageBuffer(sampleBuffer)
给出错误:“Unmanaged
var pixelBuffer : CVPixelBufferRef = CMSampleBufferGetImageBuffer(sampleBuffer).takeRetainedValue()
给出错误:“CVImageBuffer”不可转换为“CVPixelBufferRef”
var pixelBuffer : CVPixelBufferRef = CMSampleBufferGetImageBuffer(sampleBuffer).takeRetainedValue() as CVPixelBufferRef
给出错误:无法将表达式的类型“CVPixelBufferRef”转换为类型“CVPixelBufferRef”
最佳答案
编辑
这个答案是在 Swift beta 测试期间给出的。看起来现在解决方案更简单了,正如 klinger 所建议的那样
var pixelBuffer : CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
但是由于历史原因我会保留之前的答案:-)
上一个答案
查看预发布文档:
特别是这个声明
Remapped Types
When Swift imports Core Foundation types, the compiler remaps the names of these types. The compiler removes Ref from the end of each type name because all Swift classes are reference types, therefore the suffix is redundant.
The Core Foundation CFTypeRef type completely remaps to the AnyObject type. Wherever you would use CFTypeRef, you should now use AnyObject in your code.
您要做的第一件事是从每种类型中删除“ref”。然而,这不是必需的,因为“refs”被类型化为“non-ref”类型。
那么,这个语句应该有效。在我从未使用过 CMSampleBufferGetImageBuffer
之前,它可能需要一些调整,因此我不确定第一行(初始化缓冲区)
var buf : CMSampleBuffer = // initialize the buffer
var anUnmanaged : Unmanaged<CVImageBuffer> = CMSampleBufferGetImageBuffer(buf)
var returnValue = anUnmanaged.takeUnretainedValue()
或者,不久
var buf : CMSampleBuffer = // initialize the buffer
var anUnmanaged : CVImageBuffer = CMSampleBufferGetImageBuffer(buf).takeRetainedValue()
但是,您要求使用 CVPixelBuffer。如果这两种类型完全兼容(我不知道底层 API,所以我假设 objc 中的 CVPixelBuffer 和 CVImageBuffer 之间的转换总是安全的),没有“自动”去做,你必须通过一个不安全的指针.
完整的代码是这样的:
var buf : CMSampleBuffer = // initialize the buffer
var anUnmanaged : Unmanaged<CVImageBuffer> = CMSampleBufferGetImageBuffer(buf)
var returnValue = anUnmanaged.takeUnretainedValue()
var anOpaque = anUnmanaged.toOpaque()
var pixelBuffer : CVPixelBuffer = Unmanaged<CVPixelBuffer>.fromOpaque(anOpaque).takeUnretainedValue()
我使用了不消耗保留计数的 takeUnretainedValue(),因为 CMSampleBufferGetImageBuffer() 返回一个未保留的对象
关于Swift - 如何将 CVImageBufferRef 转换为 CVPixelBufferRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24390190/
我想从图像创建视频。 所以,我是引用链接的来源。 链接:CVPixelBufferPool Error ( kCVReturnInvalidArgument/-6661) func writeAnim
如何将 CVPixelBufferRef 转换为 NSImage 或 CGImageRef?我需要能够在核心动画层中显示像素缓冲区的内容。 最佳答案 要将缓冲区转换为图像,您需要首先将缓冲区转换为 C
我正在使用 GPUImage 库函数来操作 CVPixelbuffer 的高度和宽度。我正在录制纵向视频,当用户旋转设备时,我的屏幕会自动调整为横向模式。我希望横向框架适合屏幕。 例如:- 我以 32
我使用的 API 只提供纹理对象的整数 ID,我需要将该纹理的数据传递给 AVAssetWriter 以创建视频。 我知道如何从像素缓冲区 (CVPixelBufferRef) 创建 CVOpenGL
我正在做一个项目,在这个项目中我从 UIImage 生成一个视频,代码是我在这里找到的,我现在正在努力优化它几天(对于大约 300 张图像,它需要大约 5 分钟模拟器,并且由于内存而在设备上崩溃)。
我正在使用 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 录制视频和音频,并在 captureOutput:didOutputSampleBu
我正在使用 AVComposition 编写一些视频处理代码。仅提供必要的背景详细信息,我从我无法控制的苹果 API 收到一个 CVPixelBuffer。这个 CVPixel 缓冲区包含一个先前渲染
我正在尝试根据用户的输入裁剪和缩放 CMSampleBufferRef,在 ratio 上,下面的代码采用 CMSampleBufferRef,将其转换为 CVImageBufferRef 并使用 C
我正在使用 glReadPixels 将数据读入 CVPixelBufferRef。我使用 CVPixelBufferRef 作为 AVAssetWriter 的输入。不幸的是,像素格式似乎不匹配。
我是 iOS 编程和多媒体的新手,我正在研究一个名为 RosyWriter 的示例项目,该项目由 apple 在 this link 提供。 .在这里,我看到在代码中有一个名为 captureOutp
我正在我的 iOS 应用程序中录制实时视频。在另一个 Stack Overflow page ,我发现您可以使用 vImage_Buffer 处理我的帧。 问题是我不知道如何从输出的 vImage_b
我们曾经像下面这样初始化 CVPixelBufferRef。 CVPixelBufferRef pxbuffer = NULL; 但是在 Swift 中我们不能使用 NULL,所以我们尝试了下面的
在 objective-c 中,您可以轻松地将 CVImageBufferRef 转换为 CVPixelBufferRef: CMSampleBufferRef sampleBuffer = some
我想将 UIImage 对象转换为 CVPixelBufferRef 对象,但我完全不知道。而且我找不到执行此类操作的任何示例代码。 有人可以帮帮我吗?提前致谢! 你好 最佳答案 有不同的方法可以做到
我正在使用 BlackMagic DeckLink SDK 尝试从 BM 设备捕获帧。 我正在尝试从 DeckLinkController::VideoInputFrameArrived 回调中的 I
尝试在 SCNRender 对象的每次调用渲染上从 MTLTexture 创建 CVPixelBufferRef: CVPixelBufferLockBaseAddress(pixelBuffer
我需要创建一个 CVPixelBufferRef 的副本,以便能够使用副本中的值以按位方式操作原始像素缓冲区。我似乎无法使用 CVPixelBufferCreate 或 CVPixelBufferCr
如何从 CVPixelBufferRef 获取 RGB(或任何其他格式)像素值?我尝试了很多方法,但都没有成功。 func captureOutput(captureOutput: AVCapture
我正在使用 AVCaptureSession 和 AVCapturePhotoOutput 以 kCVPixelFormatType_14Bayer_RGGB 格式从设备相机捕获 RAW 照片数据。
我正在编写自定义电影录制应用程序,并实现了 AVAssetWriter 和 AVAssetWriterInputPixelBufferAdaptor 以将帧写入文件。在 DataOutputDeleg
我是一名优秀的程序员,十分优秀!