module Media.Streaming.GStreamer.Core.Segment (
Segment(..),
segmentClip,
segmentSetDuration,
segmentSetLastStop,
segmentSetNewsegment,
segmentSetSeek,
segmentToRunningTime,
segmentToStreamTime
) where
import Control.Monad (liftM)
import System.Glib.FFI
import System.Glib.Flags
import Media.Streaming.GStreamer.Core.Types
segmentClip :: Segment
-> Format
-> Int64
-> Int64
-> (Segment, Bool, Int64, Int64)
segmentClip segment format start stop =
unsafePerformIO $ alloca $ \clipStartPtr ->
alloca $ \clipStopPtr ->
with segment $ \segmentPtr ->
do result <- liftM toBool $
gst_segment_clip (castPtr segmentPtr)
(fromIntegral $ fromFormat format)
(fromIntegral start)
(fromIntegral stop)
clipStartPtr
clipStopPtr
segment' <- peek segmentPtr
clipStart <- liftM fromIntegral $ peek clipStartPtr
clipStop <- liftM fromIntegral $ peek clipStopPtr
return (segment', result, clipStart, clipStop)
segmentSetDuration :: Segment
-> Format
-> Int64
-> Segment
segmentSetDuration segment format duration =
unsafePerformIO $ with segment $ \segmentPtr ->
do gst_segment_set_duration (castPtr segmentPtr)
(fromIntegral $ fromFormat format)
(fromIntegral duration)
peek segmentPtr
segmentSetLastStop :: Segment
-> Format
-> Int64
-> Segment
segmentSetLastStop segment format position =
unsafePerformIO $ with segment $ \segmentPtr ->
do gst_segment_set_last_stop (castPtr segmentPtr)
(fromIntegral $ fromFormat format)
(fromIntegral position)
peek segmentPtr
segmentSetNewsegment :: Segment
-> Bool
-> Double
-> Format
-> Int64
-> Int64
-> Int64
-> Segment
segmentSetNewsegment segment update rate format start stop time =
unsafePerformIO $ with segment $ \segmentPtr ->
do gst_segment_set_newsegment (castPtr segmentPtr)
(fromBool update)
(realToFrac rate)
(fromIntegral $ fromFormat format)
(fromIntegral start)
(fromIntegral stop)
(fromIntegral time)
peek segmentPtr
segmentSetSeek :: Segment
-> Double
-> Format
-> [SeekFlags]
-> SeekType
-> Int64
-> SeekType
-> Int64
-> (Segment, Bool)
segmentSetSeek segment rate format flags startType start stopType stop =
unsafePerformIO $ with segment $ \segmentPtr ->
alloca $ \updatePtr ->
do gst_segment_set_seek (castPtr segmentPtr)
(realToFrac rate)
(fromIntegral $ fromFormat format)
(fromIntegral $ fromFlags flags)
(cFromEnum startType)
(fromIntegral start)
(cFromEnum stopType)
(fromIntegral stop)
updatePtr
update <- liftM toBool $ peek updatePtr
segment' <- peek segmentPtr
return (segment', update)
segmentToRunningTime :: Segment
-> Format
-> Int64
-> Int64
segmentToRunningTime segment format position =
fromIntegral $ unsafePerformIO $ with segment $ \segmentPtr ->
gst_segment_to_running_time (castPtr segmentPtr)
(fromIntegral $ fromFormat format)
(fromIntegral position)
segmentToStreamTime :: Segment
-> Format
-> Int64
-> Int64
segmentToStreamTime segment format position =
fromIntegral $ unsafePerformIO $ with segment $ \segmentPtr ->
gst_segment_to_stream_time (castPtr segmentPtr)
(fromIntegral $ fromFormat format)
(fromIntegral position)
foreign import ccall safe "gst_segment_clip"
gst_segment_clip :: ((Ptr ()) -> (CInt -> (CLLong -> (CLLong -> ((Ptr CLLong) -> ((Ptr CLLong) -> (IO CInt)))))))
foreign import ccall safe "gst_segment_set_duration"
gst_segment_set_duration :: ((Ptr ()) -> (CInt -> (CLLong -> (IO ()))))
foreign import ccall safe "gst_segment_set_last_stop"
gst_segment_set_last_stop :: ((Ptr ()) -> (CInt -> (CLLong -> (IO ()))))
foreign import ccall safe "gst_segment_set_newsegment"
gst_segment_set_newsegment :: ((Ptr ()) -> (CInt -> (CDouble -> (CInt -> (CLLong -> (CLLong -> (CLLong -> (IO ()))))))))
foreign import ccall safe "gst_segment_set_seek"
gst_segment_set_seek :: ((Ptr ()) -> (CDouble -> (CInt -> (CInt -> (CInt -> (CLLong -> (CInt -> (CLLong -> ((Ptr CInt) -> (IO ()))))))))))
foreign import ccall safe "gst_segment_to_running_time"
gst_segment_to_running_time :: ((Ptr ()) -> (CInt -> (CLLong -> (IO CLLong))))
foreign import ccall safe "gst_segment_to_stream_time"
gst_segment_to_stream_time :: ((Ptr ()) -> (CInt -> (CLLong -> (IO CLLong))))