module Media.Streaming.GStreamer.Core.Index (
Index,
IndexClass,
castToIndex,
gTypeIndex,
indexNew,
indexCommit,
indexGetGroup,
indexNewGroup,
indexSetGroup,
indexSetCertainty,
indexSetFilter,
indexGetWriterId,
indexAddFormat,
indexAddAssociations,
indexAddId,
indexGetAssocEntry,
indexEntryAssocMap,
onIndexEntryAdded,
afterIndexEntryAdded,
) where
import Control.Monad (liftM)
import Media.Streaming.GStreamer.Core.Types
import Media.Streaming.GStreamer.Core.Signals
import System.Glib.Flags
import System.Glib.FFI
import System.Glib.UTFString
import System.Glib.Signals
import System.Glib.GObject (destroyFunPtr)
indexGetFlags :: IndexClass indexT
=> indexT
-> IO [IndexFlags]
indexGetFlags = mkObjectGetFlags
indexSetFlags :: IndexClass indexT
=> indexT
-> [IndexFlags]
-> IO ()
indexSetFlags = mkObjectSetFlags
indexUnsetFlags :: IndexClass indexT
=> indexT
-> [IndexFlags]
-> IO ()
indexUnsetFlags = mkObjectUnsetFlags
indexNew :: IO Index
indexNew =
gst_index_new >>= takeObject
indexCommit :: IndexClass index
=> index
-> Int
-> IO ()
indexCommit index id =
(\(Index arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gst_index_commit argPtr1 arg2) (toIndex index) $ fromIntegral id
indexGetGroup :: IndexClass index
=> index
-> IO Int
indexGetGroup index =
liftM fromIntegral $ (\(Index arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_index_get_group argPtr1) $ toIndex index
indexNewGroup :: IndexClass index
=> index
-> IO Int
indexNewGroup index =
liftM fromIntegral $ (\(Index arg1) -> withForeignPtr arg1 $ \argPtr1 ->gst_index_new_group argPtr1) $ toIndex index
indexSetGroup :: IndexClass index
=> index
-> Int
-> IO Bool
indexSetGroup index groupnum =
liftM toBool $ (\(Index arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gst_index_set_group argPtr1 arg2) (toIndex index) $ fromIntegral groupnum
indexSetCertainty :: IndexClass index
=> index
-> IndexCertainty
-> IO ()
indexSetCertainty index certainty =
(\(Index arg1) arg2 -> withForeignPtr arg1 $ \argPtr1 ->gst_index_set_certainty argPtr1 arg2) (toIndex index) $ cFromEnum certainty
type CIndexFilter = Ptr Index
-> Ptr IndexEntry
-> ((Ptr ()))
-> IO (CInt)
marshalIndexFilter :: IndexFilter
-> IO ((FunPtr ((Ptr Index) -> ((Ptr IndexEntry) -> ((Ptr ()) -> (IO CInt))))))
marshalIndexFilter indexFilter =
makeIndexFilter cIndexFilter
where cIndexFilter :: CIndexFilter
cIndexFilter cIndex cIndexEntry _ =
do index <- peekObject cIndex
indexEntry <- peekIndexEntry cIndexEntry
liftM fromBool $ indexFilter index indexEntry
foreign import ccall "wrapper"
makeIndexFilter :: CIndexFilter
-> IO ((FunPtr ((Ptr Index) -> ((Ptr IndexEntry) -> ((Ptr ()) -> (IO CInt))))))
indexSetFilter :: IndexClass index
=> index
-> IndexFilter
-> IO ()
indexSetFilter index filter =
do cFilter <- marshalIndexFilter filter
(\(Index arg1) arg2 arg3 arg4 -> withForeignPtr arg1 $ \argPtr1 ->gst_index_set_filter_full argPtr1 arg2 arg3 arg4) (toIndex index) cFilter
(castFunPtrToPtr cFilter) destroyFunPtr
indexGetWriterId :: IndexClass index
=> index
-> Object
-> IO (Maybe Int)
indexGetWriterId index writer =
alloca $ \idPtr ->
do result <- (\(Index arg1) (Object arg2) arg3 -> withForeignPtr arg1 $ \argPtr1 ->withForeignPtr arg2 $ \argPtr2 ->gst_index_get_writer_id argPtr1 argPtr2 arg3) (toIndex index) (toObject writer) idPtr
if toBool result
then liftM (Just . fromIntegral) $ peek idPtr
else return Nothing
indexAddFormat :: IndexClass index
=> index
-> Int
-> Format
-> IO IndexEntry
indexAddFormat index id format =
(\(Index arg1) arg2 arg3 -> withForeignPtr arg1 $ \argPtr1 ->gst_index_add_format argPtr1 arg2 arg3) (toIndex index)
(fromIntegral id)
(fromIntegral $ fromFormat format) >>=
peekIndexEntry
indexAddAssociations :: IndexClass index
=> index
-> Int
-> [AssocFlags]
-> [IndexAssociation]
-> IO IndexEntry
indexAddAssociations index id flags associations =
withArrayLen associations $ \numAssociations cAssociations ->
(\(Index arg1) arg2 arg3 arg4 arg5 -> withForeignPtr arg1 $ \argPtr1 ->gst_index_add_associationv argPtr1 arg2 arg3 arg4 arg5) (toIndex index)
(fromIntegral id)
(fromIntegral $ fromFlags flags)
(fromIntegral numAssociations)
(castPtr cAssociations) >>=
peekIndexEntry
indexAddId :: IndexClass index
=> index
-> Int
-> String
-> IO IndexEntry
indexAddId index id description =
withUTFString description
((\(Index arg1) arg2 arg3 -> withForeignPtr arg1 $ \argPtr1 ->gst_index_add_id argPtr1 arg2 arg3) (toIndex index) $ fromIntegral id) >>=
peekIndexEntry
indexGetAssocEntry :: IndexClass index
=> index
-> Int
-> IndexLookupMethod
-> [AssocFlags]
-> Format
-> Int64
-> IO (Maybe IndexEntry)
indexGetAssocEntry index id method flags format value =
(\(Index arg1) arg2 arg3 arg4 arg5 arg6 -> withForeignPtr arg1 $ \argPtr1 ->gst_index_get_assoc_entry argPtr1 arg2 arg3 arg4 arg5 arg6) (toIndex index)
(fromIntegral id)
(cFromEnum method)
(fromIntegral $ fromFlags flags)
(fromIntegral $ fromFormat format)
(fromIntegral value) >>=
maybePeek peekIndexEntry
indexEntryAssocMap :: IndexEntry
-> Format
-> Maybe Int64
indexEntryAssocMap entry format =
unsafePerformIO $ alloca $ \valuePtr ->
do result <- (\(IndexEntry arg1) arg2 arg3 -> withForeignPtr arg1 $ \argPtr1 ->gst_index_entry_assoc_map argPtr1 arg2 arg3) entry
(fromIntegral $ fromFormat format)
valuePtr
if toBool result
then liftM (Just . fromIntegral) $ peek valuePtr
else return Nothing
onIndexEntryAdded, afterIndexEntryAdded :: IndexClass index
=> index
-> (IndexEntry -> IO ())
-> IO (ConnectId index)
onIndexEntryAdded =
connect_BOXED__NONE "entry-added" peekIndexEntry False
afterIndexEntryAdded =
connect_BOXED__NONE "entry-added" peekIndexEntry True
foreign import ccall safe "gst_index_new"
gst_index_new :: (IO (Ptr Index))
foreign import ccall safe "gst_index_commit"
gst_index_commit :: ((Ptr Index) -> (CInt -> (IO ())))
foreign import ccall safe "gst_index_get_group"
gst_index_get_group :: ((Ptr Index) -> (IO CInt))
foreign import ccall safe "gst_index_new_group"
gst_index_new_group :: ((Ptr Index) -> (IO CInt))
foreign import ccall safe "gst_index_set_group"
gst_index_set_group :: ((Ptr Index) -> (CInt -> (IO CInt)))
foreign import ccall safe "gst_index_set_certainty"
gst_index_set_certainty :: ((Ptr Index) -> (CInt -> (IO ())))
foreign import ccall safe "gst_index_set_filter_full"
gst_index_set_filter_full :: ((Ptr Index) -> ((FunPtr ((Ptr Index) -> ((Ptr IndexEntry) -> ((Ptr ()) -> (IO CInt))))) -> ((Ptr ()) -> ((FunPtr ((Ptr ()) -> (IO ()))) -> (IO ())))))
foreign import ccall safe "gst_index_get_writer_id"
gst_index_get_writer_id :: ((Ptr Index) -> ((Ptr Object) -> ((Ptr CInt) -> (IO CInt))))
foreign import ccall safe "gst_index_add_format"
gst_index_add_format :: ((Ptr Index) -> (CInt -> (CInt -> (IO (Ptr IndexEntry)))))
foreign import ccall safe "gst_index_add_associationv"
gst_index_add_associationv :: ((Ptr Index) -> (CInt -> (CInt -> (CInt -> ((Ptr ()) -> (IO (Ptr IndexEntry)))))))
foreign import ccall safe "gst_index_add_id"
gst_index_add_id :: ((Ptr Index) -> (CInt -> ((Ptr CChar) -> (IO (Ptr IndexEntry)))))
foreign import ccall safe "gst_index_get_assoc_entry"
gst_index_get_assoc_entry :: ((Ptr Index) -> (CInt -> (CInt -> (CInt -> (CInt -> (CLLong -> (IO (Ptr IndexEntry))))))))
foreign import ccall safe "gst_index_entry_assoc_map"
gst_index_entry_assoc_map :: ((Ptr IndexEntry) -> (CInt -> ((Ptr CLLong) -> (IO CInt))))