{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (garetxe@gmail.com) A video frame obtained from gst_video_frame_map() -} module GI.GstVideo.Structs.VideoFrame ( -- * Exported types VideoFrame(..) , newZeroVideoFrame , noVideoFrame , -- * Methods -- ** videoFrameCopy VideoFrameCopyMethodInfo , videoFrameCopy , -- ** videoFrameCopyPlane VideoFrameCopyPlaneMethodInfo , videoFrameCopyPlane , -- ** videoFrameMap VideoFrameMapMethodInfo , videoFrameMap , -- ** videoFrameMapId VideoFrameMapIdMethodInfo , videoFrameMapId , -- ** videoFrameUnmap VideoFrameUnmapMethodInfo , videoFrameUnmap , -- * Properties -- ** Buffer videoFrameReadBuffer , -- ** Flags videoFrameReadFlags , -- ** Id videoFrameReadId , -- ** Info videoFrameReadInfo , -- ** Meta videoFrameReadMeta , ) where import Prelude () import Data.GI.Base.ShortPrelude import qualified Data.Text as T import qualified Data.ByteString.Char8 as B import qualified Data.Map as Map import GI.GstVideo.Types import GI.GstVideo.Callbacks import qualified GI.Gst as Gst newtype VideoFrame = VideoFrame (ForeignPtr VideoFrame) -- | Construct a `VideoFrame` struct initialized to zero. newZeroVideoFrame :: MonadIO m => m VideoFrame newZeroVideoFrame = liftIO $ callocBytes 632 >>= wrapPtr VideoFrame noVideoFrame :: Maybe VideoFrame noVideoFrame = Nothing videoFrameReadInfo :: VideoFrame -> IO VideoInfo videoFrameReadInfo s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 0) :: IO (Ptr VideoInfo) val' <- (newBoxed VideoInfo) val return val' videoFrameReadFlags :: VideoFrame -> IO [VideoFrameFlags] videoFrameReadFlags s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 120) :: IO CUInt let val' = wordToGFlags val return val' videoFrameReadBuffer :: VideoFrame -> IO Gst.Buffer videoFrameReadBuffer s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 128) :: IO (Ptr Gst.Buffer) val' <- (newBoxed Gst.Buffer) val return val' videoFrameReadMeta :: VideoFrame -> IO (Ptr ()) videoFrameReadMeta s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 136) :: IO (Ptr ()) return val videoFrameReadId :: VideoFrame -> IO Int32 videoFrameReadId s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 144) :: IO Int32 return val -- XXX Skipped getter for "VideoFrame:data" :: Not implemented: "Don't know how to unpack C array of type TCArray False 4 (-1) (TBasicType TVoid)" -- XXX Skipped getter for "VideoFrame:map" :: Not implemented: "Don't know how to unpack C array of type TCArray False 4 (-1) (TInterface \"Gst\" \"MapInfo\")" -- method VideoFrame::copy -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoFrame", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src", argType = TInterface "GstVideo" "VideoFrame", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TBoolean -- throws : False -- Skip return : False foreign import ccall "gst_video_frame_copy" gst_video_frame_copy :: Ptr VideoFrame -> -- _obj : TInterface "GstVideo" "VideoFrame" Ptr VideoFrame -> -- src : TInterface "GstVideo" "VideoFrame" IO CInt videoFrameCopy :: (MonadIO m) => VideoFrame -- _obj -> VideoFrame -- src -> m Bool -- result videoFrameCopy _obj src = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj let src' = unsafeManagedPtrGetPtr src result <- gst_video_frame_copy _obj' src' let result' = (/= 0) result touchManagedPtr _obj touchManagedPtr src return result' data VideoFrameCopyMethodInfo instance (signature ~ (VideoFrame -> m Bool), MonadIO m) => MethodInfo VideoFrameCopyMethodInfo VideoFrame signature where overloadedMethod _ = videoFrameCopy -- method VideoFrame::copy_plane -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoFrame", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "src", argType = TInterface "GstVideo" "VideoFrame", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "plane", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TBoolean -- throws : False -- Skip return : False foreign import ccall "gst_video_frame_copy_plane" gst_video_frame_copy_plane :: Ptr VideoFrame -> -- _obj : TInterface "GstVideo" "VideoFrame" Ptr VideoFrame -> -- src : TInterface "GstVideo" "VideoFrame" Word32 -> -- plane : TBasicType TUInt32 IO CInt videoFrameCopyPlane :: (MonadIO m) => VideoFrame -- _obj -> VideoFrame -- src -> Word32 -- plane -> m Bool -- result videoFrameCopyPlane _obj src plane = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj let src' = unsafeManagedPtrGetPtr src result <- gst_video_frame_copy_plane _obj' src' plane let result' = (/= 0) result touchManagedPtr _obj touchManagedPtr src return result' data VideoFrameCopyPlaneMethodInfo instance (signature ~ (VideoFrame -> Word32 -> m Bool), MonadIO m) => MethodInfo VideoFrameCopyPlaneMethodInfo VideoFrame signature where overloadedMethod _ = videoFrameCopyPlane -- method VideoFrame::map -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoFrame", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "info", argType = TInterface "GstVideo" "VideoInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "buffer", argType = TInterface "Gst" "Buffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface "Gst" "MapFlags", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TBoolean -- throws : False -- Skip return : False foreign import ccall "gst_video_frame_map" gst_video_frame_map :: Ptr VideoFrame -> -- _obj : TInterface "GstVideo" "VideoFrame" Ptr VideoInfo -> -- info : TInterface "GstVideo" "VideoInfo" Ptr Gst.Buffer -> -- buffer : TInterface "Gst" "Buffer" CUInt -> -- flags : TInterface "Gst" "MapFlags" IO CInt videoFrameMap :: (MonadIO m) => VideoFrame -- _obj -> VideoInfo -- info -> Gst.Buffer -- buffer -> [Gst.MapFlags] -- flags -> m Bool -- result videoFrameMap _obj info buffer flags = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj let info' = unsafeManagedPtrGetPtr info let buffer' = unsafeManagedPtrGetPtr buffer let flags' = gflagsToWord flags result <- gst_video_frame_map _obj' info' buffer' flags' let result' = (/= 0) result touchManagedPtr _obj touchManagedPtr info touchManagedPtr buffer return result' data VideoFrameMapMethodInfo instance (signature ~ (VideoInfo -> Gst.Buffer -> [Gst.MapFlags] -> m Bool), MonadIO m) => MethodInfo VideoFrameMapMethodInfo VideoFrame signature where overloadedMethod _ = videoFrameMap -- method VideoFrame::map_id -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoFrame", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "info", argType = TInterface "GstVideo" "VideoInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "buffer", argType = TInterface "Gst" "Buffer", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "id", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface "Gst" "MapFlags", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TBoolean -- throws : False -- Skip return : False foreign import ccall "gst_video_frame_map_id" gst_video_frame_map_id :: Ptr VideoFrame -> -- _obj : TInterface "GstVideo" "VideoFrame" Ptr VideoInfo -> -- info : TInterface "GstVideo" "VideoInfo" Ptr Gst.Buffer -> -- buffer : TInterface "Gst" "Buffer" Int32 -> -- id : TBasicType TInt32 CUInt -> -- flags : TInterface "Gst" "MapFlags" IO CInt videoFrameMapId :: (MonadIO m) => VideoFrame -- _obj -> VideoInfo -- info -> Gst.Buffer -- buffer -> Int32 -- id -> [Gst.MapFlags] -- flags -> m Bool -- result videoFrameMapId _obj info buffer id flags = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj let info' = unsafeManagedPtrGetPtr info let buffer' = unsafeManagedPtrGetPtr buffer let flags' = gflagsToWord flags result <- gst_video_frame_map_id _obj' info' buffer' id flags' let result' = (/= 0) result touchManagedPtr _obj touchManagedPtr info touchManagedPtr buffer return result' data VideoFrameMapIdMethodInfo instance (signature ~ (VideoInfo -> Gst.Buffer -> Int32 -> [Gst.MapFlags] -> m Bool), MonadIO m) => MethodInfo VideoFrameMapIdMethodInfo VideoFrame signature where overloadedMethod _ = videoFrameMapId -- method VideoFrame::unmap -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoFrame", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : TBasicType TVoid -- throws : False -- Skip return : False foreign import ccall "gst_video_frame_unmap" gst_video_frame_unmap :: Ptr VideoFrame -> -- _obj : TInterface "GstVideo" "VideoFrame" IO () videoFrameUnmap :: (MonadIO m) => VideoFrame -- _obj -> m () -- result videoFrameUnmap _obj = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj gst_video_frame_unmap _obj' touchManagedPtr _obj return () data VideoFrameUnmapMethodInfo instance (signature ~ (m ()), MonadIO m) => MethodInfo VideoFrameUnmapMethodInfo VideoFrame signature where overloadedMethod _ = videoFrameUnmap type family ResolveVideoFrameMethod (t :: Symbol) (o :: *) :: * where ResolveVideoFrameMethod "copy" o = VideoFrameCopyMethodInfo ResolveVideoFrameMethod "copyPlane" o = VideoFrameCopyPlaneMethodInfo ResolveVideoFrameMethod "map" o = VideoFrameMapMethodInfo ResolveVideoFrameMethod "mapId" o = VideoFrameMapIdMethodInfo ResolveVideoFrameMethod "unmap" o = VideoFrameUnmapMethodInfo ResolveVideoFrameMethod l o = MethodResolutionFailed l o instance (info ~ ResolveVideoFrameMethod t VideoFrame, MethodInfo info VideoFrame p) => IsLabelProxy t (VideoFrame -> p) where fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info) #if MIN_VERSION_base(4,9,0) instance (info ~ ResolveVideoFrameMethod t VideoFrame, MethodInfo info VideoFrame p) => IsLabel t (VideoFrame -> p) where fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info) #endif