cmapi: cover CMBufferQueue's trigger API
authorOle André Vadla Ravnås <oravnas@cisco.com>
Thu, 11 Nov 2010 22:41:44 +0000 (23:41 +0100)
committerOle André Vadla Ravnås <oravnas@cisco.com>
Thu, 11 Nov 2010 23:44:42 +0000 (00:44 +0100)
sys/applemedia/cmapi.c
sys/applemedia/cmapi.h

index 3afe485..36f575b 100644 (file)
@@ -83,8 +83,10 @@ gst_cm_api_obtain (GError ** error)
 
     SYM_SPEC (CMBufferQueueDequeueAndRetain),
     SYM_SPEC (CMBufferQueueGetBufferCount),
+    SYM_SPEC (CMBufferQueueInstallTrigger),
     SYM_SPEC (CMBufferQueueIsEmpty),
     SYM_SPEC (FigBufferQueueRelease),
+    SYM_SPEC (CMBufferQueueRemoveTrigger),
     SYM_SPEC (CMBufferQueueSetValidationCallback),
 
     SYM_SPEC (kCMFormatDescriptionExtension_SampleDescriptionExtensionAtoms),
index 50153b2..a75352a 100644 (file)
@@ -39,11 +39,14 @@ typedef struct _CMVideoDimensions CMVideoDimensions;
 typedef struct _CMTime CMTime;
 
 typedef CFTypeRef CMBufferQueueRef;
-
+typedef SInt32 CMBufferQueueTriggerCondition;
+typedef struct _CMBufferQueueTriggerToken *CMBufferQueueTriggerToken;
 typedef CFTypeRef CMSampleBufferRef;
 typedef CFTypeRef CMBlockBufferRef;
 
-typedef Boolean (* CMBufferQueueValidateFunc) (CMBufferQueueRef queue,
+typedef void (* CMBufferQueueTriggerCallback) (void *triggerRefcon,
+    CMBufferQueueTriggerToken triggerToken);
+typedef Boolean (* CMBufferQueueValidationCallback) (CMBufferQueueRef queue,
     CMSampleBufferRef buf, void *refCon);
 
 enum _FigMediaType
@@ -58,6 +61,21 @@ enum _FigCodecType
   kYUV420vCodecType                 = '420v'
 };
 
+enum _CMBufferQueueTriggerCondition
+{
+  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
+};
+
 struct _FigBaseVTable
 {
   gsize unk;
@@ -159,10 +177,16 @@ struct _GstCMApi
   CMSampleBufferRef (* CMBufferQueueDequeueAndRetain)
       (CMBufferQueueRef queue);
   CFIndex (* CMBufferQueueGetBufferCount) (CMBufferQueueRef queue);
+  OSStatus (* CMBufferQueueInstallTrigger) (CMBufferQueueRef queue,
+      CMBufferQueueTriggerCallback triggerCallback, void * triggerRefCon,
+      CMBufferQueueTriggerCondition triggerCondition, CMTime triggerTime,
+      CMBufferQueueTriggerToken * triggerTokenOut);
   Boolean (* CMBufferQueueIsEmpty) (CMBufferQueueRef queue);
   void (* FigBufferQueueRelease) (CMBufferQueueRef queue);
-  OSStatus (* CMBufferQueueSetValidationCallback)
-      (CMBufferQueueRef queue, CMBufferQueueValidateFunc func, void *refCon);
+  OSStatus (* CMBufferQueueRemoveTrigger) (CMBufferQueueRef queue,
+      CMBufferQueueTriggerToken triggerToken);
+  OSStatus (* CMBufferQueueSetValidationCallback) (CMBufferQueueRef queue,
+      CMBufferQueueValidationCallback func, void *refCon);
 
   CFStringRef * kCMFormatDescriptionExtension_SampleDescriptionExtensionAtoms;
   CFStringRef * kCMSampleAttachmentKey_DependsOnOthers;