aboutsummaryrefslogtreecommitdiff
path: root/hsm-stream/Hsm/Stream/FFI.hsc
diff options
context:
space:
mode:
Diffstat (limited to 'hsm-stream/Hsm/Stream/FFI.hsc')
-rw-r--r--hsm-stream/Hsm/Stream/FFI.hsc48
1 files changed, 48 insertions, 0 deletions
diff --git a/hsm-stream/Hsm/Stream/FFI.hsc b/hsm-stream/Hsm/Stream/FFI.hsc
new file mode 100644
index 0000000..3ef4f98
--- /dev/null
+++ b/hsm-stream/Hsm/Stream/FFI.hsc
@@ -0,0 +1,48 @@
+{-# LANGUAGE CApiFFI #-}
+
+module Hsm.Stream.FFI
+ ( GstElement
+ , gstInit
+ , gstDeinit
+ , gstParseLaunch
+ , gstStatePlaying
+ , gstStateNull
+ , gstElementSetState
+ , gstObjectUnref
+ )
+where
+
+import Foreign.C.String (CString)
+import Foreign.C.Types (CChar, CInt)
+import Foreign.Ptr (Ptr)
+
+data GstElement
+
+data GError
+
+newtype GStateChangeReturn
+ = GStateChangeReturn Int
+
+newtype GState
+ = GState Int
+
+foreign import capi safe "gst/gst.h gst_init"
+ gstInit :: Ptr CInt -> Ptr (Ptr (Ptr CChar)) -> IO ()
+
+foreign import capi safe "gst/gst.h gst_deinit"
+ gstDeinit :: IO ()
+
+foreign import capi safe "gst/gst.h gst_parse_launch"
+ gstParseLaunch :: CString -> Ptr GError -> IO (Ptr GstElement)
+
+foreign import capi safe "gst/gst.h value GST_STATE_PLAYING"
+ gstStatePlaying :: GState
+
+foreign import capi safe "gst/gst.h value GST_STATE_NULL"
+ gstStateNull :: GState
+
+foreign import capi safe "gst/gst.h gst_element_set_state"
+ gstElementSetState :: Ptr GstElement -> GState -> IO GStateChangeReturn
+
+foreign import capi safe "gst/gst.h gst_object_unref"
+ gstObjectUnref :: Ptr GstElement -> IO ()