Каковы обязательные параметры для CMBufferQueueCreate? - PullRequest
3 голосов
/ 14 января 2011

Читая документацию о 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 голос
/ 18 октября 2011

Предположительно, с параметрами все в порядке.По крайней мере, то, что вы написали, указано в 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);

Обратный вызов времени остается прежним.

Не похоже, что это помогает началу темы,но я надеюсь, что это поможет кому-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...