gpt4 book ai didi

ios - 如何从 NSData 创建 CMBlockBufferRef

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:59:43 25 4
gpt4 key购买 nike

我正在努力(出现内存错误,或者显然没有正确释放内存)尝试创建一个 CMBlockBufferRef,其中填充了来自现有 NSData(或 NSMutableData)的数据。我会很高兴有一个复制数据的解决方案,但理想情况下,我会寻找一个使用底层 NSData 字节并在 CMBlockBuffer 被释放之前保持对 NSData 对象的强引用的解决方案。

最佳答案

仅针对引用 NSData 的只读缓冲区(当然,没有复制),我刚刚找到了实现它的方法。

static void releaseNSData(void *o, void *block, size_t size)
{
NSData *data = (__bridge_transfer NSData*) o;
data = nil; // Assuming ARC is enabled
}

OSStatus createReadonlyBlockBuffer(CMBlockBufferRef *result, NSData *data)
{
CMBlockBufferCustomBlockSource blockSource =
{
.version = kCMBlockBufferCustomBlockSourceVersion,
.AllocateBlock = NULL,
.FreeBlock = &releaseNSData,
.refCon = (__bridge_retained void*) data,
};
return CMBlockBufferCreateWithMemoryBlock(NULL, (uint8_t*) data.bytes, data.length, NULL, &blockSource, 0, data.length, 0, result);
}

关于ios - 如何从 NSData 创建 CMBlockBufferRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26158253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com