summaryrefslogtreecommitdiff
path: root/sys/applemedia/mioapi.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/applemedia/mioapi.h')
-rw-r--r--sys/applemedia/mioapi.h248
1 files changed, 248 insertions, 0 deletions
diff --git a/sys/applemedia/mioapi.h b/sys/applemedia/mioapi.h
new file mode 100644
index 000000000..02b0588b6
--- /dev/null
+++ b/sys/applemedia/mioapi.h
@@ -0,0 +1,248 @@
+/*
+ * Copyright (C) 2010 Ole André Vadla Ravnås <oravnas@cisco.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __GST_MIO_API_H__
+#define __GST_MIO_API_H__
+
+#include "cmapi.h"
+
+#include <CoreFoundation/CoreFoundation.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GstMIOApi GstMIOApi;
+typedef struct _GstMIOApiClass GstMIOApiClass;
+
+#define TUNDRA_SYSTEM_OBJECT_ID 1
+
+typedef int TundraObjectID;
+typedef int TundraDeviceID;
+typedef int TundraUnitID;
+
+typedef enum _TundraStatus TundraStatus;
+typedef enum _TundraVendor TundraVendor;
+typedef enum _TundraScope TundraScope;
+typedef enum _TundraUnit TundraUnit;
+typedef enum _TundraProperty TundraProperty;
+
+typedef enum _TundraDeviceTransportType TundraDeviceTransportType;
+
+typedef struct _TundraTargetSpec TundraTargetSpec;
+typedef struct _TundraFramerate TundraFramerate;
+
+typedef struct _TundraGraph TundraGraph;
+typedef struct _TundraNode TundraNode;
+
+typedef struct _TundraOutputDelegate TundraOutputDelegate;
+
+enum _TundraStatus
+{
+ kTundraSuccess = 0,
+ kTundraNotSupported = -67456
+};
+
+enum _TundraVendor
+{
+ kTundraVendorApple = 'appl'
+};
+
+enum _TundraScope
+{
+ kTundraScopeGlobal = 'glob',
+ kTundraScopeDAL = 'dal ',
+ kTundraScope2PRC = '2prc', /* TODO: Investigate this one */
+ kTundraScopeInput = 'inpt',
+ kTundraScopeVSyn = 'vsyn'
+};
+
+enum _TundraUnit
+{
+ kTundraUnitInput = 'tinp',
+ kTundraUnitOutput = 'tout',
+ kTundraUnitSync = 'tefc'
+};
+
+enum _TundraProperty
+{
+ kTundraSystemPropertyDevices = 'dev#',
+
+ kTundraObjectPropertyClass = 'clas',
+ kTundraObjectPropertyCreator = 'oplg',
+ kTundraObjectPropertyName = 'lnam',
+ kTundraObjectPropertyUID = 'uid ',
+ kTundraObjectPropertyVendor = 'lmak',
+
+ kTundraDevicePropertyConfigApp = 'capp', /* CFString: com.apple.mediaio.TundraDeviceSetup */
+ kTundraDevicePropertyExclusiveMode = 'ixna',
+ kTundraDevicePropertyHogMode = 'oink',
+ kTundraDevicePropertyModelUID = 'muid',
+ kTundraDevicePropertyStreams = 'stm#',
+ kTundraDevicePropertySuspendedByUser = 'sbyu',
+ kTundraDevicePropertyTransportType = 'tran',
+
+ kTundraStreamPropertyFormatDescriptions = 'pfta',
+ kTundraStreamPropertyFormatDescription = 'pft ',
+ kTundraStreamPropertyFrameRates = 'nfr#',
+ kTundraStreamPropertyFrameRate = 'nfrt'
+};
+
+struct _TundraTargetSpec
+{
+ FourCharCode name;
+ FourCharCode scope;
+ FourCharCode vendor;
+ FourCharCode unk1;
+ FourCharCode unk2;
+};
+
+struct _TundraFramerate
+{
+ gdouble value;
+};
+
+enum _TundraUnitProperty
+{
+ kTundraInputPropertyDeviceID = 302,
+
+ kTundraOutputPropertyDelegate = 5903,
+
+ kTundraInputUnitProperty_SourcePath = 6780,
+
+ kTundraSyncPropertyClockProvider = 7100,
+ kTundraSyncPropertyMasterSynchronizer = 7102,
+ kTundraSyncPropertySynchronizationDirection = 7104
+};
+
+enum _TundraDeviceTransportType
+{
+ kTundraDeviceTransportInvalid = 0,
+ kTundraDeviceTransportBuiltin = 'bltn',
+ kTundraDeviceTransportScreen = 'scrn',
+ kTundraDeviceTransportUSB = 'usb ',
+};
+
+typedef TundraStatus (* TundraOutputRenderFunc) (gpointer instance,
+ gpointer unk1, gpointer unk2, gpointer unk3, FigSampleBuffer * sampleBuf);
+typedef TundraStatus (* TundraOutputInitializeFunc) (gpointer instance);
+typedef TundraStatus (* TundraOutputUninitializeFunc) (gpointer instance);
+typedef TundraStatus (* TundraOutputStartFunc) (gpointer instance);
+typedef TundraStatus (* TundraOutputStopFunc) (gpointer instance);
+typedef TundraStatus (* TundraOutputResetFunc) (gpointer instance);
+typedef TundraStatus (* TundraOutputDeallocateFunc) (gpointer instance);
+typedef gboolean (* TundraOutputCanRenderNowFunc) (gpointer instance,
+ guint * unk);
+typedef CFArrayRef (* TundraOutputAvailableFormatsFunc) (gpointer instance,
+ gboolean ensureOnly);
+typedef TundraStatus (* TundraOutputCopyClockFunc) (gpointer instance);
+typedef TundraStatus (* TundraOutputGetPropertyInfoFunc) (gpointer instance,
+ guint propId);
+typedef TundraStatus (* TundraOutputGetPropertyFunc) (gpointer instance,
+ guint propId);
+typedef TundraStatus (* TundraOutputSetPropertyFunc) (gpointer instance,
+ guint propId);
+
+#pragma pack(push, 1)
+
+struct _TundraOutputDelegate
+{
+ int unk1;
+ gpointer instance;
+ TundraOutputRenderFunc Render;
+ TundraOutputInitializeFunc Initialize;
+ TundraOutputUninitializeFunc Uninitialize;
+ TundraOutputStartFunc Start;
+ TundraOutputStopFunc Stop;
+ TundraOutputResetFunc Reset;
+ TundraOutputDeallocateFunc Deallocate;
+ TundraOutputCanRenderNowFunc CanRenderNow;
+ TundraOutputAvailableFormatsFunc AvailableFormats;
+ TundraOutputCopyClockFunc CopyClock;
+ TundraOutputGetPropertyInfoFunc GetPropertyInfo;
+ TundraOutputGetPropertyFunc GetProperty;
+ TundraOutputSetPropertyFunc SetProperty;
+};
+
+#pragma pack(pop)
+
+struct _GstMIOApi
+{
+ GstDynApi parent;
+
+ TundraStatus (* TundraGraphCreate) (CFAllocatorRef allocator,
+ TundraGraph ** graph);
+ void (* TundraGraphRelease) (TundraGraph * graph);
+ TundraStatus (* TundraGraphCreateNode) (TundraGraph * graph,
+ gint nodeId, UInt32 unk1, UInt32 unk2, TundraTargetSpec * spec,
+ UInt32 unk3, TundraUnitID * node);
+ TundraStatus (* TundraGraphGetNodeInfo) (TundraGraph * graph,
+ gint nodeId, UInt32 unk1, UInt32 unk2, UInt32 unk3, UInt32 unk4,
+ gpointer * info);
+ TundraStatus (* TundraGraphSetProperty) (TundraGraph * graph,
+ gint nodeId, UInt32 unk1, guint propId, UInt32 unk2, UInt32 unk3,
+ gpointer data, guint size);
+ TundraStatus (* TundraGraphConnectNodeInput) (TundraGraph * graph,
+ TundraUnitID from_node, guint from_bus,
+ TundraUnitID to_node, guint to_bus);
+ TundraStatus (* TundraGraphInitialize) (TundraGraph * graph);
+ TundraStatus (* TundraGraphUninitialize) (TundraGraph * graph);
+ TundraStatus (* TundraGraphStart) (TundraGraph * graph);
+ TundraStatus (* TundraGraphStop) (TundraGraph * graph);
+
+ TundraStatus (* TundraObjectGetPropertyDataSize) (TundraObjectID obj,
+ TundraTargetSpec * spec, UInt32 contextSize, void * context, guint * size);
+ TundraStatus (* TundraObjectGetPropertyData) (TundraObjectID obj,
+ TundraTargetSpec * spec, UInt32 contextSize, void * context, guint * size,
+ gpointer data);
+ TundraStatus (* TundraObjectIsPropertySettable) (TundraObjectID obj,
+ TundraTargetSpec * spec, Boolean *isSettable);
+ TundraStatus (* TundraObjectSetPropertyData) (TundraObjectID obj,
+ TundraTargetSpec * spec, gpointer unk1, gpointer unk2, guint size,
+ gpointer data);
+
+ CFStringRef * kTundraSampleBufferAttachmentKey_SequenceNumber;
+ CFStringRef * kTundraSampleBufferAttachmentKey_HostTime;
+};
+
+struct _GstMIOApiClass
+{
+ GstDynApiClass parent_class;
+};
+
+GstMIOApi * gst_mio_api_obtain (GError ** error);
+
+gpointer gst_mio_object_get_pointer (gint obj, TundraTargetSpec * pspec,
+ GstMIOApi * mio);
+gchar * gst_mio_object_get_string (gint obj, TundraTargetSpec * pspec,
+ GstMIOApi * mio);
+guint32 gst_mio_object_get_uint32 (gint obj, TundraTargetSpec * pspec,
+ GstMIOApi * mio);
+gchar * gst_mio_object_get_fourcc (gint obj, TundraTargetSpec * pspec,
+ GstMIOApi * mio);
+GArray * gst_mio_object_get_array (gint obj, TundraTargetSpec * pspec,
+ guint element_size, GstMIOApi * mio);
+GArray * gst_mio_object_get_array_full (gint obj, TundraTargetSpec * pspec,
+ guint ctx_size, gpointer ctx, guint element_size, GstMIOApi * mio);
+gpointer gst_mio_object_get_raw (gint obj, TundraTargetSpec * pspec,
+ guint * size, GstMIOApi * mio);
+
+gchar * gst_mio_fourcc_to_string (guint32 fcc);
+
+G_END_DECLS
+
+#endif