Tag: 核心媒体

如何绘制到平面/ ycbcr / 420f / yuv / NV12 /不是rgb的CVPixelBufferRef?

我从包含不是RGBA (线性像素)的CVPixelBufferRef的系统API收到CMSampleBufferRef 。 缓冲区包含平面像素(如420f又名kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange又名yCbCr又称YUV )。 我想修改一些操作这个video数据,然后把它发送到VideoToolkit编码为h264 (绘制一些文本,覆盖一个标志,旋转图像等),但我希望它是有效的即时的。 Buuuut的平面图像数据看起来很肮脏的工作 – 有色度平面和亮度平面,他们是不同的大小和…在这个字节级工作似乎很多工作。 我可能可以使用CGContextRef ,只是在像素上绘制,但从我可以收集它只支持RGBA像素。 任何关于如何尽可能less地复制数据的build议,尽可能less的代码行?

在Swift 2.0中创build一个CMSampleBuffer的副本

这已经被问过了,但是自从被问到以后,Swift肯定会发生一些变化。 我试图存储从AVCaptureSession返回的CMSampleBuffer对象稍后处理。 经过一番实验,我发现AVCaptureSession必须重用其CMSampleBuffer引用。 当我试图保持超过15个会话挂起。 所以我想我会制作样本缓冲区的副本。 但我似乎无法得到它的工作。 这是我写的: var allocator: Unmanaged<CFAllocator>! = CFAllocatorGetDefault() var bufferCopy: UnsafeMutablePointer<CMSampleBuffer?> let err = CMSampleBufferCreateCopy(allocator.takeRetainedValue(), sampleBuffer, bufferCopy) if err == noErr { bufferArray.append(bufferCopy.memory!) } else { NSLog("Failed to copy buffer. Error: \(err)") } 这将不会被编译,因为它说Variable 'bufferCopy' used before being initialized了Variable 'bufferCopy' used before being initialized 。 我看了很多例子,他们会编译或不工作,否则他们不会编译。 有人看到我在这里做错了吗?

如何将CGImage转换为CMSampleBufferRef?

我想将一个CGImage转换为CMSampleBufferRef并使用appendSampleBuffer:方法将其附加到AVAssetWriterInput 。 我设法使用下面的代码来获取CMSampleBufferRef ,但appendSampleBuffer:当我提供产生的CMSampleBufferRef时,只是返回NO 。 我究竟做错了什么? – (void) appendCGImage: (CGImageRef) frame { const int width = CGImageGetWidth(frame); const int height = CGImageGetHeight(frame); // Create a dummy pixel buffer to try the encoding // on something simple. CVPixelBufferRef pixelBuffer = NULL; CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault, width, height, kCVPixelFormatType_32BGRA, NULL, &pixelBuffer); NSParameterAssert(status == kCVReturnSuccess && pixelBuffer != […]