CMBufferQueueCreate需要哪些必要的参数?

3

阅读有关iOS SDK CMBufferQueueCreate的文档,可以看到说getDuration和版本是必需的,而其他所有回调函数都可以为NULL。

但是运行以下代码:

CFAllocatorRef allocator;
CMBufferCallbacks *callbacks;
callbacks = malloc(sizeof(CMBufferCallbacks));
callbacks->version = 0;
callbacks->getDuration = timeCallback;
callbacks->refcon = NULL;
callbacks->getDecodeTimeStamp = NULL;
callbacks->getPresentationTimeStamp = NULL;
callbacks->isDataReady = NULL;
callbacks->compare = NULL;
callbacks->dataBecameReadyNotification = NULL;

CMItemCount capacity = 4;

OSStatus s = CMBufferQueueCreate(allocator, capacity, callbacks, queue);

NSLog(@"QUEUE: %x", queue);
NSLog(@"STATUS: %i", s);

使用 timeCallback:

CMTime timeCallback(CMBufferRef buf, void *refcon){
    return CMTimeMake(1, 1);
}

队列为:

CMBufferQueueRef* queue;

队列创建失败(queue = 0),并返回以下状态:
kCMBufferQueueError_RequiredParameterMissing = -12761,

callbacks变量已正确初始化,至少调试器是这么说的。

有人使用过CMBufferQueue吗?

1个回答

1

假设参数没有问题。至少在CMBufferQueue.h中关于所需参数的说明与您编写的相同。但是看起来您正在将空指针作为CMBufferQueueRef*参数传递。我已经根据以下方式更新了您的示例,它似乎可以正常创建消息循环。

CMBufferQueueRef queue;
CFAllocatorRef allocator = kCFAllocatorDefault;
CMBufferCallbacks *callbacks;
callbacks = malloc(sizeof(CMBufferCallbacks));
callbacks->version = 0;
callbacks->getDuration = timeCallback;
callbacks->refcon = NULL;
callbacks->getDecodeTimeStamp = NULL;
callbacks->getPresentationTimeStamp = NULL;
callbacks->isDataReady = NULL;
callbacks->compare = NULL;
callbacks->dataBecameReadyNotification = NULL;

CMItemCount capacity = 4;

OSStatus s = CMBufferQueueCreate(allocator, capacity, callbacks, &queue);

NSLog(@"QUEUE: %x", queue);
NSLog(@"STATUS: %i", s);

时间回调仍然是相同的。

看起来它并没有帮助主题发起者,但我希望它能帮助其他人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接