2011-01-14 6 views
3

Reading the documentation à propos de iOS SDK CMBufferQueueCreate, il est dit que getDuration et la version sont requis, tous les autres rappels peuvent être NULL.Quels sont les paramètres requis pour CMBufferQueueCreate?

Mais exécutant le code suivant:

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

avec timeCallback:

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

et file d'attente est:

CMBufferQueueRef* queue; 

créations de file d'attente ne parvient pas (file d'attente = 0), et renvoie un statut de:

kCMBufferQueueError_RequiredParameterMissing = -12761, 

La variable callbacks est correctement initialisée, au moins le débogueur l'indique.

Est-ce que quelqu'un a utilisé le CMBufferQueue?

Répondre

1

Vraisemblablement, il n'y a rien de mal avec les paramètres. Au moins la même chose que ce que vous avez écrit est indiqué dans CMBufferQueue.h à propos des paramètres requis. Mais il semble que vous transmettiez un pointeur nul en tant que paramètre CMBufferQueueRef *. J'ai mis à jour votre échantillon comme suit et il semble créer la boucle de message 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); 

Le rappel de temps est toujours le même.

Il ne semble pas que cela facilite le démarrage du sujet, mais j'espère que cela aidera quelqu'un d'autre.

Questions connexes