Ссылка CMBufferQueue
Этот документ описывает API для создания и управления CMBufferQueue
структуры.
CMBufferQueues
Базовые объекты Основы, реализующие очередь синхронизированных буферов. Эти буферы могут иметь любой Базовый Основанный на основе тип (CFTypeRef
), но должен иметь понятие продолжительности. Во время CMBufferQueue
создание, ряд обратных вызовов предоставлен, один из которых является требуемым обратным вызовом, возвращающим продолжительность Базового Основанного на основе буферного объекта. Стандартная структура обратного вызова для CMSampleBuffers
предоставлен как удобство. Эти обратные вызовы вызывают синхронно из различного CMBufferQueue
APIs, на потоке, который названный API.
CMBufferQueues
разработаны, чтобы быть считанным и записанным из различных потоков в модели производителя/потребителя. В то время как это обычно - два потока (один producer/enqueuer, один dequeuer/consumer), CMBufferQueues
может обслужить любое число буферов постановки в очередь и/или исключения из очереди потоков. В CMBufferQueue
APIs, все операции (не просто CMBufferQueueEnqueue
и CMBufferQueueDequeueAndRetain
, но Comparing CMBufferQueue
, CMBufferQueueInstallTrigger
и т.д.), сделаны атомарными при помощи единственного взаимного исключения (одно взаимное исключение на создаваемый объект очереди).
По умолчанию, a CMBufferQueue
если обратный вызов сравнения предоставлен, получающееся, очередь FIFO, но CMBufferQueue
будет сортирован на основе того обратного вызова. Например, можно было бы создать a CMBufferQueue
где буферы ставятся в очередь в порядке декодирования и исключаются из очереди в порядке представления путем обеспечения обратного вызова сравнения, к которому добавляют метку времени виды представлением.
CMBufferQueues
сохраните ставивший в очередь буфер во время, Ставят в очередь, таким образом, клиент может выпустить буфер, если это не имеет никакой дальнейшей потребности ссылки. Во время CMBufferQueueDequeueAndRetain
, буфер сохранен от имени клиента и выпущен очередью. Результат состоит в том, что сохранить количество остается тем же, и владение буфера передается от очереди клиенту.
Если предоставленный обратным вызовом буферной готовности, CMBufferQueues
может проверить на буферную готовность во время CMBufferQueueDequeueIfDataReadyAndRetain
. Если тот обратный вызов не предоставлен, все буферы, как предполагается, готовы, и нет никакого различия между CMBufferQueueDequeueAndRetain
, и CMBufferQueueDequeueIfDataReadyAndRetain
.
CMBufferQueues
также реализация CMBufferQueueIsEmpty
и CMBufferQueueTestTrigger
, с помощью добирающихся дополнительных обратных вызовов декодируют и метки времени представления от буфера. Если или или оба из этих обратных вызовов не предоставлен, kCMTimeInvalid
будет возвращен для недостающей метки (ок) времени.
CMBufferQueues
может быть отмечен с концом данных (CMBufferQueueMarkEndOfData
). Один раз так отмечено, далее ставит в очередь, перестанет работать, и как только все буферы были исключены из очереди, очередь постоянно пуста («в конце данных»), пока не вызывают Сброс. Сброс освобождает очередь и отменяет маркировку конца данных.
Текущий статус a CMBufferQueue
может быть опрошен. Можно протестировать на пустоту (CMBufferQueueCreate
), текущая продолжительность очереди (“Comparing CMBufferQueue”
), и состояние конца данных (CMBufferQueueContainsEndOfData
и CMBufferQueueIsAtEndOfData
).
Можно установить триггерные обратные вызовы (использование CMBufferQueueInstallTrigger
) получить уведомления о различных изменениях состояния очереди, такие как “продолжительность становится меньше чем 1 секундой”. Очередь не может быть изменена во время триггерного обратного вызова, но она может быть опрошена. Триггерные условия могут быть протестированы явно также (CMBufferQueueTestTrigger
). Триггеры с NULL
обратные вызовы могут быть добавлены к очереди для этого типа использования, но триггерам с обратными вызовами можно было также протестировать их условия явно.
Триггерные обратные вызовы можно вызвать от любого CMBufferQueue
API, изменяющий общую продолжительность очереди (те, которые Ставят в очередь/Исключают из очереди/Сбрасывают). Триггерные обратные вызовы вызывают синхронно на потоке который названные API.
Изменение состояния очереди всегда из триггерного обратного вызова запрещается и перестанет работать, возвращаясь kCMBufferQueueError_CannotModifyQueueFromTriggerCallback
.
Попытка Ставить в очередь на полную очередь или Исключить из очереди от пустой очереди не блокирует, но сразу возвратится с ошибкой (или с a NULL
буфер). Триггеры должны быть установлены клиентом для управления знанием клиента обилия очереди. Использованию повторных повторений (опрос) обескураживают как неэффективное использование ресурсов.
-
Создает a
CMBufferQueue
объект.Объявление
Swift
func CMBufferQueueCreate(_
allocator
: CFAllocator!, _capacity
: CMItemCount, _callbacks
: UnsafePointer<CMBufferCallbacks>, _queueOut
: UnsafeMutablePointer<Unmanaged<CMBufferQueue>?>) -> OSStatusObjective C
OSStatus CMBufferQueueCreate ( CFAllocatorRef allocator, CMItemCount capacity, const CMBufferCallbacks *callbacks, CMBufferQueueRef *queueOut );
Параметры
allocator
Средство выделения для использования для выделения
CMBufferQueue
объект. ПередачаkCFAllocatorDefault
использовать средство выделения по умолчанию.capacity
Максимальное количество буферов в очереди. Передайте 0 для создания очереди, которая будет расти по мере необходимости.
callbacks
Обратные вызовы очередь должны использовать для опроса буферных объектов. Эта структура копируется внутренне, таким образом, клиент может передать указатель на временную структуру на штабеле.
queueOut
На Выводе, недавно создаваемый
CMBufferQueue
.Возвращаемое значение
Код результата. Посмотрите Коды Результата.
Обсуждение
По возврату вызывающей стороне принадлежит возвращенный
CMBufferQueue
, и должен выпустить его, когда сделано с ним.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Вызывает функцию для каждого буфера в очереди.
Объявление
Swift
func CMBufferQueueCallForEachBuffer(_
queue
: CMBufferQueue!, _refcon
: CFunctionPointer<((CMBuffer!, UnsafeMutablePointer<Void>) -> OSStatus)>, _callback
: UnsafeMutablePointer<Void>) -> OSStatusObjective C
OSStatus CMBufferQueueCallForEachBuffer ( CMBufferQueueRef queue, OSStatus (*callback)( CMBufferRef buffer, void *refcon), void *refcon );
Параметры
queue
CMBufferQueue
это может содержать многократные буферы.refcon
Ссылочная константа, предоставленная функции обратного вызова.
callback
Функция, которую вызовут для каждого буфера. Обратный вызов может изменить буферные присоединения, но не должен изменять влияющие на вид свойства (например, метки времени). Обратный вызов не должен выполнять другие вызовы буферной очереди.
Возвращаемое значение
Код результата. Посмотрите Коды Результата.
Обсуждение
Если функция обратного вызова возвратит ошибку, то итерация сразу остановится, и ошибка будет возвращена.
Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Исключает буфер из очереди от a
CMBufferQueue
.Объявление
Objective C
CMBufferRef CMBufferQueueDequeueAndRetain ( CMBufferQueueRef queue );
Параметры
queue
CMBufferQueue
от которого можно исключить буфер из очереди.Возвращаемое значение
Исключенный из очереди буфер. Будет
NULL
если очередь пуста.Обсуждение
Буфер выпущен очередью, но это также сохраняется для клиента. Буферное владение, таким образом, передается от очереди клиенту. Клиент не должен сохранять буфер, но ответственен для выпуска его, когда сделано с ним.
Оператор импорта
Objective C
@import CoreMedia;
Доступность
Доступный в OS X v10.7 и позже.
-
Исключает буфер из очереди от a
CMBufferQueue
если это готово.Объявление
Objective C
CMBufferRef CMBufferQueueDequeueIfDataReadyAndRetain ( CMBufferQueueRef queue );
Параметры
queue
CMBufferQueue
от которого можно исключить буфер из очереди (если буфер готов).Возвращаемое значение
Исключенный из очереди буфер. Будет
NULL
если очередь пуста, или если буфер, который будет исключен из очереди, еще не готов.Обсуждение
Буфер выпущен очередью, но это также сохраняется для клиента. Буферное владение, таким образом, передается от очереди клиенту. Клиент не должен сохранять буфер, но ответственен для выпуска его, когда сделано с ним.
Оператор импорта
Objective C
@import CoreMedia;
Доступность
Доступный в OS X v10.7 и позже.
-
Ставит в очередь буфер на a
CMBufferQueue
.Объявление
Swift
func CMBufferQueueEnqueue(_
queue
: CMBufferQueue!, _buf
: CMBuffer!) -> OSStatusObjective C
OSStatus CMBufferQueueEnqueue ( CMBufferQueueRef queue, CMBufferRef buf );
Параметры
queue
CMBufferQueue
на котором можно ставить в очередь буфер.buf
Буфер для постановки в очередь.
Возвращаемое значение
Код результата. Посмотрите Коды Результата.
Обсуждение
Буфер сохраняется очередью, таким образом, клиент может безопасно выпустить буфер, если это не имеет никакого дальнейшего использования для него. Если сравнить обратным вызовом является не-NULL, этот API выполняет вид вставки с помощью то, которые сравнивают работу. Если обратным вызовом проверки является не-NULL, это вызовы API это; если это возвратит ненулевой OSStatus, то буфер не будет ставиться в очередь, и этот API возвратит ту же ошибку OSStatus.
Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Устанавливает триггер на a
CMBufferQueue
.Объявление
Swift
func CMBufferQueueInstallTrigger(_
queue
: CMBufferQueue!, _triggerCallback
: CMBufferQueueTriggerCallback, _triggerRefcon
: UnsafeMutablePointer<Void>, _triggerCondition
: CMBufferQueueTriggerCondition, _triggerTime
: CMTime, _triggerTokenOut
: UnsafeMutablePointer<CMBufferQueueTriggerToken>) -> OSStatusObjective C
OSStatus CMBufferQueueInstallTrigger ( CMBufferQueueRef queue, CMBufferQueueTriggerCallback triggerCallback, void *triggerRefcon, CMBufferQueueTriggerCondition triggerCondition, CMTime triggerTime, CMBufferQueueTriggerToken *triggerTokenOut );
Параметры
queue
CMBufferQueue
на котором устанавливается триггер.triggerCallback
Обратный вызов, который вызовут, когда триггерное условие становится истиной. Может быть
NULL
, если клиент намеревается только явно протестировать условие. еслиtriggerTokenOut
NULL
этот параметр не может бытьNULL
иначе триггер был бы бессмыслен.triggerRefcon
Refcon, который будет передан triggerCallback. Может быть
NULL
если обратный вызов не нужен в нем или самостоятельноNULL
.triggerCondition
Условие, которое будет протестировано при оценке триггера.
triggerTime
Временная стоимость для сравнения с при оценке триггера. Должно быть числовым (т.е. весьма допустимым, неопределенным, или бесконечным), за исключением определенных триггерных условий, который игнорирует его (например, kCMBufferQueueTrigger_WhenMinPresentationTimeStampChanges).
triggerTokenOut
Адрес, где будет записан создаваемый триггерный маркер. Может быть
NULL
, если у клиента нет потребности явно протестировать или удалить триггер. Не может бытьNULL
когда triggerCallbackNULL
, так как триггер был бы бессмыслен тогда.Возвращаемое значение
Код результата. Посмотрите Коды Результата
Обсуждение
Возвращенный триггерный маркер может быть передан
CMBufferQueueTestTrigger
иCMBufferQueueRemoveTrigger
.triggerTokenOut
параметр может бытьNULL
(клиент не должен протестировать или удалить триггер), иtriggerCallback
параметр может бытьNULL
(клиент не нуждается в обратных вызовах, а скорее явно протестирует триггер). Одним из этих двух параметров должен быть не-NULL, однако, так как непригодный для тестирования триггер, не выполняющий обратный вызов, бессмыслен. Если триггерное условие уже является истиной,CMBufferQueueInstallTrigger
вызовет triggerCallback и сначала запишет триггерный маркер в *triggerTokenOut.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
CMBufferQueueInstallTriggerWithIntegerThreshold (_: _: _: _: _: _:) CMBufferQueueInstallTriggerWithIntegerThreshold
Устанавливает триггер на a
CMBufferQueue
.Объявление
Swift
func CMBufferQueueInstallTriggerWithIntegerThreshold(_
queue
: CMBufferQueue!, _triggerCallback
: CMBufferQueueTriggerCallback, _triggerRefcon
: UnsafeMutablePointer<Void>, _triggerCondition
: CMBufferQueueTriggerCondition, _triggerThreshold
: CMItemCount, _triggerTokenOut
: UnsafeMutablePointer<CMBufferQueueTriggerToken>) -> OSStatusObjective C
OSStatus CMBufferQueueInstallTriggerWithIntegerThreshold ( CMBufferQueueRef queue, CMBufferQueueTriggerCallback triggerCallback, void *triggerRefcon, CMBufferQueueTriggerCondition triggerCondition, CMItemCount triggerThreshold, CMBufferQueueTriggerToken *triggerTokenOut );
Параметры
queue
CMBufferQueue
на котором устанавливается триггер.triggerCallback
Обратный вызов, который вызовут, когда триггерное условие становится истиной. Может быть
NULL
, если клиент намеревается только явно протестировать условие. Не может бытьNULL
если бы triggerTokenOut является NULL, иначе триггер был бы бессмыслен.triggerRefcon
Refcon, который будет передан triggerCallback. Может быть
NULL
если обратный вызов не нужен в нем или самостоятельноNULL
triggerCondition
Условие, которое будет протестировано при оценке триггера. Должно быть допустимое условие для целочисленного порога.
triggerThreshold
Целочисленное значение для сравнения с при оценке триггера.
triggerTokenOut
Адрес, где будет записан создаваемый триггерный маркер. Может быть
NULL
, если у клиента нет потребности явно протестировать или удалить триггер. Не может бытьNULL
если бы triggerCallback является NULL, так как триггер был бы бессмыслен тогда.Возвращаемое значение
Код результата. Посмотрите Коды Результата
Обсуждение
Эта функция ведет себя тот же путь как
CMBufferQueueInstallTrigger
кроме триггера оценен против целочисленного значения, а не временной стоимости.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Знаки a
CMBufferQueue
с EndOfData.Объявление
Swift
func CMBufferQueueMarkEndOfData(_
queue
: CMBufferQueue!) -> OSStatusObjective C
OSStatus CMBufferQueueMarkEndOfData ( CMBufferQueueRef queue );
Параметры
queue
CMBufferQueue
быть отмеченным.Возвращаемое значение
Код результата. Посмотрите Коды Результата
Обсуждение
Все последующие Ставят в очередь, будет отклонен до
CMBufferQueueReset
вызывается. Последующие Двухсторонние очереди успешно выполнятся, пока очередь не пуста.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Удаляет ранее установленный триггер из a
CMBufferQueue
.Объявление
Swift
func CMBufferQueueRemoveTrigger(_
queue
: CMBufferQueue!, _triggerToken
: CMBufferQueueTriggerToken) -> OSStatusObjective C
OSStatus CMBufferQueueRemoveTrigger ( CMBufferQueueRef queue, CMBufferQueueTriggerToken triggerToken );
Параметры
queue
CMBufferQueue
из которого должен быть удален триггер.triggerToken
Триггер для удаления из очереди.
Возвращаемое значение
Код результата. Посмотрите Коды Результата
Обсуждение
Когда очередь будет завершена, триггеры будут автоматически удалены. Однако, если больше чем один модуль имеет доступ к очереди, может быть трудно для отдельного модуля знать, когда очередь завершена, так как другие модули могут сохранить его. Для обращения этого беспокойства модули должны удалить свои триггеры, прежде чем они сами будут завершены.
Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Сброс a
CMBufferQueue
. Освобождает очередь и очищает любую метку EndOfData.Объявление
Swift
func CMBufferQueueReset(_
queue
: CMBufferQueue!) -> OSStatusObjective C
OSStatus CMBufferQueueReset ( CMBufferQueueRef queue );
Параметры
queue
CMBufferQueue
быть сброшенным.Возвращаемое значение
Код результата. Посмотрите Коды Результата.
Обсуждение
Все буферы в очереди выпущены. Триггеры не удаляют, однако, и вызовут соответственно, когда продолжительность очереди переходит к нулю.
Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Функциональный обратный вызов, вызывающий функцию для каждого буфера в очереди и затем сбрасывающий очередь.
Объявление
Swift
func CMBufferQueueResetWithCallback(_
queue
: CMBufferQueue!, _callback
: CFunctionPointer<((CMBuffer!, UnsafeMutablePointer<Void>) -> Void)>, _refcon
: UnsafeMutablePointer<Void>) -> OSStatusObjective C
OSStatus CMBufferQueueResetWithCallback ( CMBufferQueueRef queue, void (*callback)( CMBufferRef buffer, void *refcon), void *refcon );
Параметры
queue
CMBufferQueue
быть сброшенным, которое может содержать многократные буферы.callback
Функция, которую вызовут для каждого буфера. Обратный вызов не должен выполнять другие вызовы буферной очереди.
refcon
Ссылочная константа, которая будет передана функции обратного вызова.
Возвращаемое значение
Код результата. Посмотрите Коды Результата.
Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Функциональный обратный вызов, устанавливающий функцию это
CMBufferQueueEnqueue
вызовет для проверки буферов прежде, чем добавить их к очереди.Объявление
Swift
func CMBufferQueueSetValidationCallback(_
queue
: CMBufferQueue!, _validationCallback
: CMBufferValidationCallback, _validationRefCon
: UnsafeMutablePointer<Void>) -> OSStatusObjective C
OSStatus CMBufferQueueSetValidationCallback ( CMBufferQueueRef queue, CMBufferValidationCallback validationCallback, void *validationRefCon );
Параметры
queue
CMBufferQueue
это будет использовать обратный вызов проверки.validationCallback
Обратный вызов, который проверит каждый ставивший в очередь буфер.
validationRefCon
Контекст refcon для обратного вызова проверки.
Возвращаемое значение
Код результата. Посмотрите Коды Результата.
Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Возвраты, действительно ли a
CMBufferQueue
был отмечен сEndOfData
.Объявление
Swift
func CMBufferQueueContainsEndOfData(_
queue
: CMBufferQueue!) -> BooleanObjective C
Boolean CMBufferQueueContainsEndOfData ( CMBufferQueueRef queue );
Параметры
queue
Опрашиваемый CMBufferQueue..
Возвращаемое значение
Булевская переменная, указывающая, ли
CMBufferQueue
был отмечен сEndOfData
.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Возвраты, действительно ли a
CMBufferQueue
был отмечен с EndOfData и теперь пуст.Объявление
Swift
func CMBufferQueueIsAtEndOfData(_
queue
: CMBufferQueue!) -> BooleanObjective C
Boolean CMBufferQueueIsAtEndOfData ( CMBufferQueueRef queue );
Параметры
queue
CMBufferQueue
быть опрошенным.Возвращаемое значение
Булевская переменная, указывающая, ли
CMBufferQueue
был отмечен с EndOfData и теперь пуст. Если очередьNULL
, true возвращается (очередь NULL считается пустой, и постоянно в EndOfData).Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Возвраты, действительно ли a
CMBufferQueue
пусто.Объявление
Swift
func CMBufferQueueIsEmpty(_
queue
: CMBufferQueue!) -> BooleanObjective C
Boolean CMBufferQueueIsEmpty ( CMBufferQueueRef queue );
Параметры
queue
CMBufferQueue
быть опрошенным.Возвращаемое значение
Булевская переменная, указывающая, ли
CMBufferQueue
пусто. Если очередьNULL
, true возвращается.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Тесты, является ли триггерное условие истиной fot данный
CMBufferQueue
.Объявление
Swift
func CMBufferQueueTestTrigger(_
queue
: CMBufferQueue!, _triggerToken
: CMBufferQueueTriggerToken) -> BooleanObjective C
Boolean CMBufferQueueTestTrigger ( CMBufferQueueRef queue, CMBufferQueueTriggerToken triggerToken );
Параметры
queue
CMBufferQueue
на котором тестируется триггер.triggerToken
Триггер для тестирования.
Возвращаемое значение
Булевская переменная, указывающая, является ли триггерное условие Истиной.
Обсуждение
CMBufferQueueTestTrigger
всегда возвращает текущий статус условия. Когда условие пойдет от лжи до истины, триггерный обратный вызов только вызовут.triggerToken
должен быть тот, установленный на этой очереди.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Получает число буферов в очереди.
Объявление
Swift
func CMBufferQueueGetBufferCount(_
queue
: CMBufferQueue!) -> CMItemCountObjective C
CMItemCount CMBufferQueueGetBufferCount ( CMBufferQueueRef queue );
Параметры
queue
CMBufferQueue
быть опрошенным.Возвращаемое значение
Возвращает число буферов в
CMBufferQueue
.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Получает самую большую метку времени представления a
CMBufferQueue
.Объявление
Swift
func CMBufferQueueGetMaxPresentationTimeStamp(_
queue
: CMBufferQueue!) -> CMTimeObjective C
CMTime CMBufferQueueGetMaxPresentationTimeStamp ( CMBufferQueueRef queue );
Параметры
queue
CMBufferQueue
быть опрошенным.Возвращаемое значение
Самая большая метка времени представления опрошенного
CMBufferQueue
.Обсуждение
Если
getPresentationTimeStamp
обратный вызовNULL
,kCMTimeInvalid
будет возвращен.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
CMBufferQueueGetCallbacksForUnsortedSampleBuffers () CMBufferQueueGetCallbacksForUnsortedSampleBuffers
Возвращает указатель на структуру обратного вызова для несортированного
CMSampleBuffers
, если как удобство.Объявление
Swift
func CMBufferQueueGetCallbacksForUnsortedSampleBuffers() -> UnsafePointer<CMBufferCallbacks>
Objective C
const CMBufferCallbacks * CMBufferQueueGetCallbacksForUnsortedSampleBuffers ( void );
Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Получает продолжительность a
CMBufferQueue
.Объявление
Swift
func CMBufferQueueGetDuration(_
queue
: CMBufferQueue!) -> CMTimeObjective C
CMTime CMBufferQueueGetDuration ( CMBufferQueueRef queue );
Параметры
queue
CMBufferQueue
быть опрошенным.Возвращаемое значение
Сумма возвратов всех отдельных буферных продолжительностей в
CMBufferQueue
.Обсуждение
Продолжительность
CMBufferQueue
сумма всех отдельных буферных продолжительностей, как сообщаетсяgetDuration
обратный вызов (предоставленный дляCreating CMBufferQueue
). Если нет никаких буферов в очереди,kCMTimeZero
будет возвращен.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Получает самую большую метку времени представления конца a
CMBufferQueue
.Объявление
Swift
func CMBufferQueueGetEndPresentationTimeStamp(_
queue
: CMBufferQueue!) -> CMTimeObjective C
CMTime CMBufferQueueGetEndPresentationTimeStamp ( CMBufferQueueRef queue );
Параметры
queue
CMBufferQueue
быть опрошенным.Возвращаемое значение
Возвращает сумму
PresentationTimeStamp
и отдельные буферные продолжительности.Обсуждение
Это - максимальное время окончания (PTS + продолжительность) буферов в очереди. Если
getPresentationTimeStamp
обратный вызовNULL
,kCMTimeInvalid
будет возвращен.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Получает метку времени декодирования первого буфера в a
CMBufferQueue
.Объявление
Swift
func CMBufferQueueGetFirstDecodeTimeStamp(_
queue
: CMBufferQueue!) -> CMTimeObjective C
CMTime CMBufferQueueGetFirstDecodeTimeStamp ( CMBufferQueueRef queue );
Параметры
queue
CMBufferQueue
быть опрошенным.Возвращаемое значение
Метка времени декодирования первого буфера в опрошенном
CMBufferQueue
.Обсуждение
Этот API, более быстрая альтернатива
CMBufferQueueIsEmpty
, если Ваша очередь находится в порядке декодирования, но только дает тот же ответ. ЕслиgetDecodeTimeStamp
обратный вызовNULL
,kCMTimeInvalid
будет возвращен.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Получает самую раннюю метку времени декодирования a
CMBufferQueue
.Объявление
Swift
func CMBufferQueueGetMinDecodeTimeStamp(_
queue
: CMBufferQueue!) -> CMTimeObjective C
CMTime CMBufferQueueGetMinDecodeTimeStamp ( CMBufferQueueRef queue );
Параметры
queue
CMBufferQueue
быть опрошенным.Возвращаемое значение
Самая ранняя метка времени декодирования опрошенного
CMBufferQueue
.Обсуждение
Поиск самого раннего декодирования timstamp выполняется в этом API. Если Вы знаете, что Ваша очередь находится в порядке декодирования,
Accessing CMBufferQueue
более быстрая альтернатива. ЕслиgetDecodeTimeStamp
обратный вызовNULL
,kCMTimeInvalid
будет возвращен.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Получает метку времени представления первого буфера в a
CMBufferQueue
.Объявление
Swift
func CMBufferQueueGetFirstPresentationTimeStamp(_
queue
: CMBufferQueue!) -> CMTimeObjective C
CMTime CMBufferQueueGetFirstPresentationTimeStamp ( CMBufferQueueRef queue );
Параметры
queue
CMBufferQueue
быть опрошенным.Возвращаемое значение
Метка времени представления первого буфера в опрошенном
CMBufferQueue
.Обсуждение
Этот API, более быстрая альтернатива
CMBufferQueueTestTrigger
, но только работы, если Вы знаете свою очередь, сортируются меткой времени представления. ЕслиgetPresentationTimeStamp
обратный вызовNULL
,kCMTimeInvalid
будет возвращен.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Получает буфер рядом с двухсторонней очередью от a
CMBufferQueue
но листы это в очереди.Объявление
Swift
func CMBufferQueueGetHead(_
queue
: CMBufferQueue!) -> Unmanaged<CMBuffer>!Objective C
CMBufferRef CMBufferQueueGetHead ( CMBufferQueueRef queue );
Параметры
queue
CMBufferQueue, от которого можно получить буфер.
Возвращаемое значение
Буфер. Будет
NULL
если очередь пуста.Обсуждение
Это следует, Базовая Основа «Получают» семантику - это не сохраняет возвращенный буфер. Обратите внимание на то, что с очередями не-FIFO не гарантируется, что следующая двухсторонняя очередь возвратит этот определенный буфер (если вмешательство Будет Ставить в очередь, добавляет буфер, который исключит из очереди затем).
Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Получает самую раннюю метку времени представления a
CMBufferQueue
.Объявление
Swift
func CMBufferQueueGetMinPresentationTimeStamp(_
queue
: CMBufferQueue!) -> CMTimeObjective C
CMTime CMBufferQueueGetMinPresentationTimeStamp ( CMBufferQueueRef queue );
Параметры
queue
CMBufferQueue
быть опрошенным.Возвращаемое значение
Самая ранняя метка времени представления опрошенного
CMBufferQueue
.Обсуждение
Поиск самого раннего представления timstamp выполняется в этом API. Если Вы знаете, что Ваша очередь сортируется временем представления,
CMBufferQueueGetBufferCount
более быстрая альтернатива. ЕслиgetPresentationTimeStamp
обратный вызовNULL
, kCMTimeInvalid будет возвращен.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Возвраты
CFTypeID
из объектов CMBufferQueue.Объявление
Swift
func CMBufferQueueGetTypeID() -> CFTypeID
Objective C
CFTypeID CMBufferQueueGetTypeID ( void );
Возвращаемое значение
CFTypeID
CMBufferQueue
объекты.Обсуждение
Можно проверить если a
CFTypeRef
объект фактически aCMBufferQueue
путем сравненияCFGetTypeID
(объект) сCMBufferQueueGetTypeID
().Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Ссылка на a
CMBuffer
объект.Объявление
Swift
typealias CMBufferRef = CMBuffer
Objective C
typedef CFTypeRef CMBufferRef;
Обсуждение
A
CMBuffer
может быть экземпляр любого Базового типа Основы, целого agetDuration
обратный вызов может быть предоставлен. Обычно используемые типыCMSampleBuffer
иCVPixelBuffer
.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Ссылка на a
CMBufferQueueRef
объект.Объявление
Swift
typealias CMBufferQueueRef = CMBufferQueue
Objective C
typedef struct opaqueCMBufferQueue *CMBufferQueueRef;
Обсуждение
A
CMBufferQueue
Базовый объект Основы, реализующий очередь синхронизированных буферов.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Обратные вызовы обеспечили для
Creating CMBufferQueue
, для использования очередью в опросе буферов, которые это будет видеть.Объявление
Swift
struct CMBufferCallbacks { var version: UInt32 var refcon: UnsafeMutablePointer<Void> var getDecodeTimeStamp: CMBufferGetTimeCallback var getPresentationTimeStamp: CMBufferGetTimeCallback var getDuration: CMBufferGetTimeCallback var isDataReady: CMBufferGetBooleanCallback var compare: CMBufferCompareCallback var dataBecameReadyNotification: Unmanaged<CFString>! var getSize: CMBufferGetSizeCallback }
Objective C
typedef struct { uint32_t version; void *refcon; CMBufferGetTimeCallback getDecodeTimeStamp; CMBufferGetTimeCallback getPresentationTimeStamp; CMBufferGetTimeCallback getDuration; CMBufferGetBooleanCallback isDataReady; CMBufferCompareCallback compare; CFStringRef dataBecameReadyNotification; } CMBufferCallbacks;
Обсуждение
За исключением
isDataReady
, все эти обратные вызовы должны всегда возвращать тот же результат для тех же параметров.Продолжительность буфера, метки времени или позиция относительно других буферов, должно казаться, не изменяются, в то время как это находится в очереди. Один раз
isDataReady
возвратил true для данногоCMBuffer
, это должно всегда возвращать true для этогоCMBuffer
.Продолжительности должны всегда быть положительными.
Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Тесты, является ли буфер в допустимом состоянии, чтобы добавить к очереди.
Объявление
Swift
typealias CMBufferValidationCallback = CFunctionPointer<((CMBufferQueue!, CMBuffer!, UnsafeMutablePointer<Void>) -> OSStatus)>
Objective C
typedef OSStatus (*CMBufferValidationCallback)( CMBufferQueueRef queue, CMBufferRef buf, void *validationRefCon );
Обсуждение
CMBufferQueueEnqueue
вызовет эту функцию для проверки буферов.Возвратиться
noErr
если буфер находится в допустимом состоянии для добавления.Возвратите ненулевой код ошибки, если должен быть отклонен буфер;
CMBufferQueueEnqueue
возвратит эту ошибку вызывающей стороне. Если у Вас нет более дескриптивного кода ошибки, использоватьkCMBufferQueueError_InvalidBuffer
.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Обратный вызов, возвращающий a
CMTime
от aCMBuffer
.Объявление
Swift
typealias CMBufferGetTimeCallback = CFunctionPointer<((CMBuffer!, UnsafeMutablePointer<Void>) -> CMTime)>
Objective C
typedef CMTime (*CMBufferGetTimeCallback) ( CMBufferRef buf, void *refcon );
Обсуждение
Существует три обратных вызова этого типа, для которого можно быть предоставлены
Creating CMBufferQueue
: (требуемый) getDuration, getDecodeTimeStamp (дополнительный), и (дополнительный) getPresentationTimeStamp.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Обратный вызов, возвращающий булево значение из a
CMBuffer
.Объявление
Swift
typealias CMBufferGetBooleanCallback = CFunctionPointer<((CMBuffer!, UnsafeMutablePointer<Void>) -> Boolean)>
Objective C
typedef Boolean (*CMBufferGetBooleanCallback) ( CMBufferRef buf, void *refcon );
Обсуждение
Существует один обратный вызов этого типа, для которого можно быть предоставлены
Creating CMBufferQueue
:isDataReady
(дополнительный).Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Обратный вызов, сравнивающий тот
CMBuffer
с другим.Объявление
Swift
typealias CMBufferCompareCallback = CFunctionPointer<((CMBuffer!, CMBuffer!, UnsafeMutablePointer<Void>) -> CFComparisonResult)>
Objective C
typedef CFComparisonResult (*CMBufferCompareCallback) ( CMBufferRef buf1, CMBufferRef buf2, void *refcon );
Обсуждение
Можно использовать a
CFComparatorFunction
как обратный вызов.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
Триггер является функцией обратного вызова, которую очередь вызывает каждый раз, когда условие инициирования становится истиной. Триггерные условия включают вещи как продолжительность очереди, число буферов очереди, и т.д. Триггерные обратные вызовы вызывают из подпрограмм CMBufferQueue, изменяющих триггерное условие (например, Ставьте в очередь/Исключайте из очереди/Сбрасывайте).
Триггерные обратные вызовы не могут изменить очередь, вызвавшую их; они могут, однако, опросить его. Триггерные обратные вызовы должны выполнить как можно меньше обработки, предпочтительно принятия мер к обработке для появления, например, сигнализация семафора или перепланирование runloop таймера.
Можно установить столько триггеров, сколько Вам нравится. Порядок, в котором их вызывают, недетерминирован.
Триггеры с a NULL
обратный вызов допустим, с тех пор даже при том, что никакой триггерный обратный вызов не вызовут, триггерное условие может все еще быть явно протестировано.
-
Ссылка на a
CMBufferQueueTriggerToken
объект.Объявление
Swift
typealias CMBufferQueueTriggerToken = COpaquePointer
Objective C
typedef struct opaqueCMBufferQueueTriggerToken *CMBufferQueueTriggerToken;
Обсуждение
CMBufferQueueTriggerToken возвращается из
CMBufferQueueInstallTrigger
, таким образом, можно удалить его позже при необходимости. Когда очередь будет завершена, триггеры будут автоматически удалены. Обратите внимание на то, что, если больше чем один модуль имеет доступ к очереди, может быть трудно для отдельного модуля знать, когда очередь завершена, так как другие модули могут сохранить его. Для обращения этого беспокойства модули должны удалить свои триггеры, прежде чем они сами будут завершены.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Обратный вызов, который вызовут, когда a
CMBufferQueue
триггерное условие становится истиной.Объявление
Swift
typealias CMBufferQueueTriggerCallback = CFunctionPointer<((UnsafeMutablePointer<Void>, CMBufferQueueTriggerToken) -> Void)>
Objective C
typedef void (*CMBufferQueueTriggerCallback) ( void *triggerRefcon, CMBufferQueueTriggerToken triggerToken );
Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Тип для указания условий, которые будут связаны с a
CMBufferQueueTrigger
.Объявление
Swift
typealias CMBufferQueueTriggerCondition = Int32
Objective C
typedef int32_t CMBufferQueueTriggerCondition;
Обсуждение
Для возможных значений посмотрите Триггерные Условия.
Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.7 и позже.
-
Условия, которые будут связаны с a
CMBufferQueueTrigger
.Объявление
Swift
var kCMBufferQueueTrigger_WhenDurationBecomesLessThan: Int { get } var kCMBufferQueueTrigger_WhenDurationBecomesLessThanOrEqualTo: Int { get } var kCMBufferQueueTrigger_WhenDurationBecomesGreaterThan: Int { get } var kCMBufferQueueTrigger_WhenDurationBecomesGreaterThanOrEqualTo: Int { get } var kCMBufferQueueTrigger_WhenMinPresentationTimeStampChanges: Int { get } var kCMBufferQueueTrigger_WhenMaxPresentationTimeStampChanges: Int { get } var kCMBufferQueueTrigger_WhenDataBecomesReady: Int { get } var kCMBufferQueueTrigger_WhenEndOfDataReached: Int { get } var kCMBufferQueueTrigger_WhenReset: Int { get } var kCMBufferQueueTrigger_WhenBufferCountBecomesLessThan: Int { get } var kCMBufferQueueTrigger_WhenBufferCountBecomesGreaterThan: Int { get }
Objective C
enum { kCMBufferQueueTrigger_WhenDurationBecomesLessThan = 1, kCMBufferQueueTrigger_WhenDurationBecomesLessThanOrEqualTo = 2, kCMBufferQueueTrigger_WhenDurationBecomesGreaterThan = 3, kCMBufferQueueTrigger_WhenDurationBecomesGreaterThanOrEqualTo = 4, kCMBufferQueueTrigger_WhenMinPresentationTimeStampChanges = 5, kCMBufferQueueTrigger_WhenMaxPresentationTimeStampChanges = 6, kCMBufferQueueTrigger_WhenDataBecomesReady = 7, kCMBufferQueueTrigger_WhenEndOfDataReached = 8, kCMBufferQueueTrigger_WhenReset = 9, kCMBufferQueueTrigger_WhenBufferCountBecomesLessThan = 10, kCMBufferQueueTrigger_WhenBufferCountBecomesGreaterThan = 11, };
Константы
-
kCMBufferQueueTrigger_WhenDurationBecomesLessThan
kCMBufferQueueTrigger_WhenDurationBecomesLessThan
Когда продолжительность очереди становится меньше, чем указанная продолжительность, триггер стреляет.
Доступный в OS X v10.7 и позже.
-
kCMBufferQueueTrigger_WhenDurationBecomesLessThanOrEqualTo
kCMBufferQueueTrigger_WhenDurationBecomesLessThanOrEqualTo
Когда продолжительность очереди становится меньше чем или равной указанной продолжительности, триггер стреляет.
Доступный в OS X v10.7 и позже.
-
kCMBufferQueueTrigger_WhenDurationBecomesGreaterThan
kCMBufferQueueTrigger_WhenDurationBecomesGreaterThan
Когда продолжительность очереди становится больше, чем указанная продолжительность, триггер стреляет.
Доступный в OS X v10.7 и позже.
-
kCMBufferQueueTrigger_WhenDurationBecomesGreaterThanOrEqualTo
kCMBufferQueueTrigger_WhenDurationBecomesGreaterThanOrEqualTo
Когда продолжительность очереди становится больше, чем или равный указанной продолжительности, триггер стреляет.
Доступный в OS X v10.7 и позже.
-
kCMBufferQueueTrigger_WhenMinPresentationTimeStampChanges
kCMBufferQueueTrigger_WhenMinPresentationTimeStampChanges
Триггер стреляет, когда минимальная метка времени представления изменяется (triggerDuration, проигнорирован).
Доступный в OS X v10.7 и позже.
-
kCMBufferQueueTrigger_WhenMaxPresentationTimeStampChanges
kCMBufferQueueTrigger_WhenMaxPresentationTimeStampChanges
Триггер стреляет, когда максимальная метка времени представления изменяется (triggerDuration, проигнорирован).
Доступный в OS X v10.7 и позже.
-
kCMBufferQueueTrigger_WhenDataBecomesReady
kCMBufferQueueTrigger_WhenDataBecomesReady
Триггер стреляет, когда затем dequeueable буфер становится готовым (т.е.
CMBufferQueueDequeueIfDataReadyAndRetain
теперь успешно выполнится). (triggerDuration проигнорирован.)Доступный в OS X v10.7 и позже.
-
kCMBufferQueueTrigger_WhenEndOfDataReached
kCMBufferQueueTrigger_WhenEndOfDataReached
Когда условие CMBufferQueueIsAtEndOfData становится истиной, триггер стреляет. (triggerDuration проигнорирован.)
Доступный в OS X v10.7 и позже.
-
kCMBufferQueueTrigger_WhenReset
kCMBufferQueueTrigger_WhenReset
Триггер стреляет когда вызванный CMBufferQueueReset. (triggerDuration проигнорирован.)
Доступный в OS X v10.7 и позже.
-
kCMBufferQueueTrigger_WhenBufferCountBecomesLessThan
kCMBufferQueueTrigger_WhenBufferCountBecomesLessThan
Когда число буферов становится меньше, чем указанное пороговое число, триггер стреляет.
Доступный в OS X v10.7 и позже.
-
kCMBufferQueueTrigger_WhenBufferCountBecomesGreaterThan
kCMBufferQueueTrigger_WhenBufferCountBecomesGreaterThan
Когда число буферов становится> указанное пороговое число, триггер стреляет.
Доступный в OS X v10.7 и позже.
-
Эта таблица приводит коды результата, определенные для CMBufferQueue
API’s.
Код результата |
Значение |
Описание |
---|---|---|
kCMBufferQueueNoErr |
0 |
Никакая ошибка. |
kCMBufferQueueError_AllocationFailed |
- 12760 |
Указывает то отказавшее выделение. |
kCMBufferQueueError_RequiredParameterMissing |
- 12761 |
Указывает, что NULL или 0 был передан для обязательного параметра. |
kCMBufferQueueError_InvalidCMBufferCallbacksStruct |
- 12762 |
Указывает, что Версия не была 0, или getDuration был NULL. |
kCMBufferQueueError_EnqueueAfterEndOfData |
- 12763 |
Указывает, что CMBufferQueueEnqueue был опробован после того, как CMBufferQueueMarkEndOfData вызвали (без вызова к промежуточному CMBufferQueueReset). |
kCMBufferQueueError_QueueIsFull |
- 12764 |
Указывает, что CMBufferQueueEnqueue был опробован на полной очереди. |
kCMBufferQueueError_BadTriggerDuration |
- 12765 |
Указывает, что триггерная продолжительность была недопустима. Триггерная продолжительность должна быть числовой, и эпоха должна быть нулем (ненулевая эпоха только для меток времени, не продолжительностей). |
kCMBufferQueueError_CannotModifyQueueFromTriggerCallback |
- 12766 |
Указывает, что была предпринята попытка для изменения очереди от триггерного обратного вызова. |
kCMBufferQueueError_InvalidTriggerCondition |
- 12767 |
Указывает, что триггерное условие не является значением от перечисления CMBufferQueueTriggerCondition, или триггерное условие не поддерживается буферной очередью. |
kCMBufferQueueError_InvalidTriggerToken |
- 12768 |
Указывает, что триггерный маркер не является триггером, в настоящее время связывающимся с этой очередью. |
kCMBufferQueueError_InvalidBuffer |
- 12769 |
Указывает, что буфер был отклонен CMBufferValidationCallback. |