2011-01-14 102 views
3

Reading the documentation關於iOS SDK CMBufferQueueCreate,它說getDuration和版本都是必需的,所有其他回調都可以是NULL。CMBufferQueueCreate需要什麼參數?

但運行下面的代碼:

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; 

隊列創作失敗(隊列= 0),並返回一個狀態作者:

kCMBufferQueueError_RequiredParameterMissing = -12761, 

callbacks變量被正確初始化,至少調試器是這樣說的。

有沒有人使用過CMBufferQueue

回答

1

推測參數沒有問題。至少和你在CMBufferQueue.h中寫的關於所需參數的內容相同。但它看起來像是傳遞一個空指針作爲CMBufferQueueRef *參數。我已經更新了你的示例,如下所示,它似乎創建了消息循環OK。

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); 

時間回調仍然是一樣的。

它看起來不像它有助於主題啓動,但我希望它可以幫助其他人。