【发布时间】:2011-08-14 05:40:26
【问题描述】:
我确定我的缓冲区属性有问题,但我不清楚是什么——它没有很好地记录应该去那里的东西,所以我根据CVPixelBufferPoolCreate 猜测——核心基础很漂亮对我来说是一本合上的书。
// "width" and "height" are const ints
CFNumberRef cfWidth = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &width);
CFNumberRef cfHeight = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &height);
CFStringRef keys[] = {
kCVPixelBufferWidthKey,
kCVPixelBufferHeightKey,
kCVPixelBufferCGImageCompatibilityKey
};
CFTypeRef values[] = {
cfWidth,
cfHeight,
kCFBooleanTrue
};
int numValues = sizeof(keys) / sizeof(keys[0]);
CFDictionaryRef bufferAttributes = CFDictionaryCreate(kCFAllocatorDefault,
(const void **)&keys,
(const void **)&values,
numValues,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks
);
AVAssetWriterInputPixelBufferAdaptor *adaptor = [[AVAssetWriterInputPixelBufferAdaptor
assetWriterInputPixelBufferAdaptorWithAssetWriterInput:writerInput
sourcePixelBufferAttributes:(NSDictionary*)bufferAttributes] retain];
CVPixelBufferPoolRef bufferPool = adaptor.pixelBufferPool;
NSParameterAssert(bufferPool != NULL); // fails
【问题讨论】:
-
你好,我也有同样的问题,你找到解决办法了吗?
-
并非如此。我只是为每一帧创建一个像素缓冲区,而不是使用池。 :(
-
好的,我们找到了相同的解决方案。谢谢!
-
嗨@DavidMoles,您找到解决方案了吗,或者您是否有“为每一帧创建像素缓冲区”的工作代码?
-
@IraniyaNaynesh 抱歉,我已经好几年没看过这个了。但是docs for pixelBufferPool 现在说“在第一次调用 startSessionAtTime: 关联的 AVAssetWriter 对象之前,此属性为 NULL。”那么也许这就是问题所在?
标签: ios core-foundation avassetwriter core-video