module Media.Streaming.GStreamer.Core.Caps (
Caps,
capsNone,
capsAny,
capsSize,
capsGetStructure,
capsIsEmpty,
capsIsFixed,
capsIsEqual,
capsIsEqualFixed,
capsIsAlwaysCompatible,
capsIsSubset,
capsIntersect,
capsUnion,
capsSubtract,
capsNormalize,
capsFromString,
capsToString,
CapsM,
capsCreate,
capsModify,
capsAppendStructure,
capsMergeStructure,
capsRemoveStructure,
capsTruncate
) where
import Control.Monad (liftM)
import Control.Monad.Reader
import System.Glib.FFI
import System.Glib.UTFString
import Media.Streaming.GStreamer.Core.Types
capsNone :: Caps
capsNone =
unsafePerformIO $ gst_caps_new_empty >>= takeCaps
capsAny :: Caps
capsAny =
unsafePerformIO $ gst_caps_new_any >>= takeCaps
capsSize :: Caps
-> Word
capsSize caps =
fromIntegral $ unsafePerformIO $ (\(Caps arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_caps_get_size argPtr1) caps
capsGetStructure :: Caps
-> Word
-> Maybe Structure
capsGetStructure caps index =
unsafePerformIO $
(\(Caps arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gst_caps_get_structure argPtr1 arg2) caps (fromIntegral index) >>=
maybePeek peekStructure
capsCopyNth :: Caps
-> Word
-> Maybe Caps
capsCopyNth caps index =
unsafePerformIO $
(\(Caps arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gst_caps_copy_nth argPtr1 arg2) caps (fromIntegral index) >>=
maybePeek takeCaps
capsIsEmpty :: Caps
-> Bool
capsIsEmpty caps =
toBool $ unsafePerformIO $
(\(Caps arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_caps_is_empty argPtr1) caps
capsIsFixed :: Caps
-> Bool
capsIsFixed caps =
toBool $ unsafePerformIO $
(\(Caps arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_caps_is_fixed argPtr1) caps
capsIsEqual :: Caps
-> Caps
-> Bool
capsIsEqual caps1 caps2 =
toBool $ unsafePerformIO $
(\(Caps arg1) (Caps arg2) -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg2 $ \argPtr2 ->gst_caps_is_equal argPtr1 argPtr2) caps1 caps2
instance Eq Caps where
(==) = capsIsEqual
capsIsEqualFixed :: Caps
-> Caps
-> Bool
capsIsEqualFixed caps1 caps2 =
toBool $ unsafePerformIO $
(\(Caps arg1) (Caps arg2) -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg2 $ \argPtr2 ->gst_caps_is_equal_fixed argPtr1 argPtr2) caps1 caps2
capsIsAlwaysCompatible :: Caps
-> Caps
-> Bool
capsIsAlwaysCompatible caps1 caps2 =
toBool $ unsafePerformIO $
(\(Caps arg1) (Caps arg2) -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg2 $ \argPtr2 ->gst_caps_is_always_compatible argPtr1 argPtr2) caps1 caps2
capsIsSubset :: Caps
-> Caps
-> Bool
capsIsSubset caps1 caps2 =
toBool $ unsafePerformIO $
(\(Caps arg1) (Caps arg2) -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg2 $ \argPtr2 ->gst_caps_is_subset argPtr1 argPtr2) caps1 caps2
capsIntersect :: Caps
-> Caps
-> Caps
capsIntersect caps1 caps2 =
unsafePerformIO $
(\(Caps arg1) (Caps arg2) -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg2 $ \argPtr2 ->gst_caps_intersect argPtr1 argPtr2) caps1 caps2 >>=
takeCaps
capsUnion :: Caps
-> Caps
-> Caps
capsUnion caps1 caps2 =
unsafePerformIO $
(\(Caps arg1) (Caps arg2) -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg2 $ \argPtr2 ->gst_caps_union argPtr1 argPtr2) caps1 caps2 >>=
takeCaps
capsSubtract :: Caps
-> Caps
-> Caps
capsSubtract caps1 caps2 =
unsafePerformIO $
(\(Caps arg1) (Caps arg2) -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg2 $ \argPtr2 ->gst_caps_subtract argPtr1 argPtr2) caps1 caps2 >>=
takeCaps
capsNormalize :: Caps
-> Caps
capsNormalize caps =
unsafePerformIO $
(\(Caps arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_caps_normalize argPtr1) caps >>= takeCaps
capsToString :: Caps
-> String
capsToString caps =
unsafePerformIO $
(\(Caps arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_caps_to_string argPtr1) caps >>= readUTFString
capsFromString :: String
-> Maybe Caps
capsFromString string =
unsafePerformIO $
withUTFString string gst_caps_from_string >>=
maybePeek takeCaps
newtype CapsM a =
CapsM (ReaderT (Ptr Caps) IO a)
deriving (Functor, Monad)
askCapsPtr :: CapsM (Ptr Caps)
askCapsPtr = CapsM $ ask
marshalCapsModify :: IO (Ptr Caps)
-> CapsM a
-> (Caps, a)
marshalCapsModify mkCaps (CapsM action) =
unsafePerformIO $
do ptr <- mkCaps
result <- runReaderT action ptr
caps <- takeCaps ptr
return (caps, result)
capsCreate :: CapsM a
-> (Caps, a)
capsCreate mutate =
marshalCapsModify
gst_caps_new_empty
mutate
capsModify :: Caps
-> CapsM a
-> (Caps, a)
capsModify caps mutate =
marshalCapsModify ((\(Caps arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_caps_copy argPtr1) caps) mutate
capsAppendStructure :: Structure
-> CapsM ()
capsAppendStructure structure = do
capsPtr <- askCapsPtr
CapsM $ liftIO $ withStructure structure $ \structurePtr ->
do structurePtr' <- gst_structure_copy structurePtr
gst_caps_append_structure capsPtr structurePtr
where _ = (\(Caps arg1) (Structure arg2) -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg2 $ \argPtr2 ->gst_caps_append_structure argPtr1 argPtr2)
_ = (\(Structure arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_structure_copy argPtr1)
capsMergeStructure :: Structure
-> CapsM ()
capsMergeStructure structure = do
capsPtr <- askCapsPtr
CapsM $ liftIO $ withStructure structure $ \structurePtr ->
do structurePtr' <- gst_structure_copy structurePtr
gst_caps_merge_structure capsPtr structurePtr
where _ = (\(Caps arg1) (Structure arg2) -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg2 $ \argPtr2 ->gst_caps_merge_structure argPtr1 argPtr2)
_ = (\(Structure arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_structure_copy argPtr1)
capsRemoveStructure :: Word
-> CapsM ()
capsRemoveStructure idx = do
capsPtr <- askCapsPtr
CapsM $ liftIO $ gst_caps_remove_structure capsPtr $ fromIntegral idx
where _ = (\(Caps arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gst_caps_remove_structure argPtr1 arg2)
capsTruncate :: CapsM ()
capsTruncate = do
capsPtr <- askCapsPtr
CapsM $ liftIO $ gst_caps_truncate capsPtr
where _ = (\(Caps arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_caps_truncate argPtr1)
foreign import ccall safe "gst_caps_new_empty"
gst_caps_new_empty :: (IO (Ptr Caps))
foreign import ccall safe "gst_caps_new_any"
gst_caps_new_any :: (IO (Ptr Caps))
foreign import ccall safe "gst_caps_get_size"
gst_caps_get_size :: ((Ptr Caps) -> (IO CUInt))
foreign import ccall safe "gst_caps_get_structure"
gst_caps_get_structure :: ((Ptr Caps) -> (CUInt -> (IO (Ptr Structure))))
foreign import ccall safe "gst_caps_copy_nth"
gst_caps_copy_nth :: ((Ptr Caps) -> (CUInt -> (IO (Ptr Caps))))
foreign import ccall safe "gst_caps_is_empty"
gst_caps_is_empty :: ((Ptr Caps) -> (IO CInt))
foreign import ccall safe "gst_caps_is_fixed"
gst_caps_is_fixed :: ((Ptr Caps) -> (IO CInt))
foreign import ccall safe "gst_caps_is_equal"
gst_caps_is_equal :: ((Ptr Caps) -> ((Ptr Caps) -> (IO CInt)))
foreign import ccall safe "gst_caps_is_equal_fixed"
gst_caps_is_equal_fixed :: ((Ptr Caps) -> ((Ptr Caps) -> (IO CInt)))
foreign import ccall safe "gst_caps_is_always_compatible"
gst_caps_is_always_compatible :: ((Ptr Caps) -> ((Ptr Caps) -> (IO CInt)))
foreign import ccall safe "gst_caps_is_subset"
gst_caps_is_subset :: ((Ptr Caps) -> ((Ptr Caps) -> (IO CInt)))
foreign import ccall safe "gst_caps_intersect"
gst_caps_intersect :: ((Ptr Caps) -> ((Ptr Caps) -> (IO (Ptr Caps))))
foreign import ccall safe "gst_caps_union"
gst_caps_union :: ((Ptr Caps) -> ((Ptr Caps) -> (IO (Ptr Caps))))
foreign import ccall safe "gst_caps_subtract"
gst_caps_subtract :: ((Ptr Caps) -> ((Ptr Caps) -> (IO (Ptr Caps))))
foreign import ccall safe "gst_caps_normalize"
gst_caps_normalize :: ((Ptr Caps) -> (IO (Ptr Caps)))
foreign import ccall safe "gst_caps_to_string"
gst_caps_to_string :: ((Ptr Caps) -> (IO (Ptr CChar)))
foreign import ccall safe "gst_caps_from_string"
gst_caps_from_string :: ((Ptr CChar) -> (IO (Ptr Caps)))
foreign import ccall safe "gst_caps_copy"
gst_caps_copy :: ((Ptr Caps) -> (IO (Ptr Caps)))
foreign import ccall safe "gst_caps_append_structure"
gst_caps_append_structure :: ((Ptr Caps) -> ((Ptr Structure) -> (IO ())))
foreign import ccall safe "gst_structure_copy"
gst_structure_copy :: ((Ptr Structure) -> (IO (Ptr Structure)))
foreign import ccall safe "gst_caps_merge_structure"
gst_caps_merge_structure :: ((Ptr Caps) -> ((Ptr Structure) -> (IO ())))
foreign import ccall safe "gst_caps_remove_structure"
gst_caps_remove_structure :: ((Ptr Caps) -> (CUInt -> (IO ())))
foreign import ccall safe "gst_caps_truncate"
gst_caps_truncate :: ((Ptr Caps) -> (IO ()))