module Media.Streaming.GStreamer.Core.Query (
Query,
QueryClass,
toQuery,
castToQuery,
gTypeQuery,
) where
import Media.Streaming.GStreamer.Core.Types
import System.Glib.FFI
import System.Glib.GObject
import System.Glib.UTFString
queryNone, queryPosition, queryDuration,
queryLatency, queryJitter,
queryRate, querySeeking,
querySegment, queryConvert,
queryFormats :: QueryType
queryNone = 0
queryPosition = 1
queryDuration = 2
queryLatency = 3
queryJitter = 4
queryRate = 5
querySeeking = 6
querySegment = 7
queryConvert = 8
queryFormats = 9
queryTypeGetName :: QueryType
-> IO String
queryTypeGetName queryType =
gst_query_type_get_name (fromIntegral queryType) >>=
peekUTFString
queryType :: Query
-> QueryType
queryType query =
unsafePerformIO $ withMiniObject query cQueryType
foreign import ccall unsafe "_hs_gst_query_type"
cQueryType :: Ptr Query
-> IO (CInt)
queryTypeName :: Query
-> IO String
queryTypeName =
queryTypeGetName . queryType
queryTypeToQuark :: QueryType
-> IO Quark
queryTypeToQuark = gst_query_type_to_quark
queryTypeRegister :: String
-> String
-> IO QueryType
queryTypeRegister nick description =
withUTFString nick $ \cNick ->
withUTFString description $
gst_query_type_register cNick
queryTypeGetByNick :: String
-> IO QueryType
queryTypeGetByNick nick =
withUTFString nick gst_query_type_get_by_nick
queryTypeGetDetails :: QueryType
-> IO (Maybe QueryTypeDefinition)
queryTypeGetDetails queryType =
gst_query_type_get_details queryType >>=
maybePeek (peek . castPtr)
queryTypeIterateDefinitions :: IO (Iterator QueryTypeDefinition)
queryTypeIterateDefinitions =
gst_query_type_iterate_definitions >>= takeIterator
queryNewConvert :: Format
-> Word64
-> Format
-> IO Query
queryNewConvert srcFormat value destFormat =
gst_query_new_convert (fromIntegral $ fromFormat srcFormat)
(fromIntegral value)
(fromIntegral $ fromFormat destFormat) >>=
takeMiniObject
foreign import ccall safe "gst_query_type_get_name"
gst_query_type_get_name :: (CInt -> (IO (Ptr CChar)))
foreign import ccall safe "gst_query_type_to_quark"
gst_query_type_to_quark :: (CInt -> (IO CUInt))
foreign import ccall safe "gst_query_type_register"
gst_query_type_register :: ((Ptr CChar) -> ((Ptr CChar) -> (IO CInt)))
foreign import ccall safe "gst_query_type_get_by_nick"
gst_query_type_get_by_nick :: ((Ptr CChar) -> (IO CInt))
foreign import ccall safe "gst_query_type_get_details"
gst_query_type_get_details :: (CInt -> (IO (Ptr ())))
foreign import ccall safe "gst_query_type_iterate_definitions"
gst_query_type_iterate_definitions :: (IO (Ptr PtrIterator))
foreign import ccall safe "gst_query_new_convert"
gst_query_new_convert :: (CInt -> (CLLong -> (CInt -> (IO (Ptr Query)))))