{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (garetxe@gmail.com) Extra buffer metadata describing image properties -} module GI.GstVideo.Structs.VideoMeta ( -- * Exported types VideoMeta(..) , newZeroVideoMeta , noVideoMeta , -- * Methods -- ** videoMetaGetInfo videoMetaGetInfo , -- ** videoMetaMap VideoMetaMapMethodInfo , videoMetaMap , -- ** videoMetaUnmap VideoMetaUnmapMethodInfo , videoMetaUnmap , -- * Properties -- ** Buffer videoMetaReadBuffer , -- ** Flags videoMetaReadFlags , -- ** Format videoMetaReadFormat , -- ** Height videoMetaReadHeight , -- ** Id videoMetaReadId , -- ** Meta videoMetaReadMeta , -- ** NPlanes videoMetaReadNPlanes , -- ** Width videoMetaReadWidth , ) 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 VideoMeta = VideoMeta (ForeignPtr VideoMeta) -- | Construct a `VideoMeta` struct initialized to zero. newZeroVideoMeta :: MonadIO m => m VideoMeta newZeroVideoMeta = liftIO $ callocBytes 112 >>= wrapPtr VideoMeta noVideoMeta :: Maybe VideoMeta noVideoMeta = Nothing videoMetaReadMeta :: VideoMeta -> IO Gst.Meta videoMetaReadMeta s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 0) :: IO (Ptr Gst.Meta) val' <- (newPtr 16 Gst.Meta) val return val' videoMetaReadBuffer :: VideoMeta -> IO Gst.Buffer videoMetaReadBuffer s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 16) :: IO (Ptr Gst.Buffer) val' <- (newBoxed Gst.Buffer) val return val' videoMetaReadFlags :: VideoMeta -> IO [VideoFrameFlags] videoMetaReadFlags s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 24) :: IO CUInt let val' = wordToGFlags val return val' videoMetaReadFormat :: VideoMeta -> IO VideoFormat videoMetaReadFormat s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 28) :: IO CUInt let val' = (toEnum . fromIntegral) val return val' videoMetaReadId :: VideoMeta -> IO Int32 videoMetaReadId s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 32) :: IO Int32 return val videoMetaReadWidth :: VideoMeta -> IO Word32 videoMetaReadWidth s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 36) :: IO Word32 return val videoMetaReadHeight :: VideoMeta -> IO Word32 videoMetaReadHeight s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 40) :: IO Word32 return val videoMetaReadNPlanes :: VideoMeta -> IO Word32 videoMetaReadNPlanes s = withManagedPtr s $ \ptr -> do val <- peek (ptr `plusPtr` 44) :: IO Word32 return val -- XXX Skipped getter for "VideoMeta:offset" :: Not implemented: "Don't know how to unpack C array of type TCArray False 4 (-1) (TBasicType TUInt64)" -- XXX Skipped getter for "VideoMeta:stride" :: Not implemented: "Don't know how to unpack C array of type TCArray False 4 (-1) (TBasicType TInt32)" -- XXX Skipped getter for "VideoMeta:map" :: Not implemented: "Wrapping foreign callbacks is not supported yet" -- XXX Skipped getter for "VideoMeta:unmap" :: Not implemented: "Wrapping foreign callbacks is not supported yet" -- method VideoMeta::map -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoMeta", 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},Arg {argCName = "info", argType = TInterface "Gst" "MapInfo", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "data", argType = TBasicType TVoid, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "stride", 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_meta_map" gst_video_meta_map :: Ptr VideoMeta -> -- _obj : TInterface "GstVideo" "VideoMeta" Word32 -> -- plane : TBasicType TUInt32 Ptr Gst.MapInfo -> -- info : TInterface "Gst" "MapInfo" Ptr () -> -- data : TBasicType TVoid Int32 -> -- stride : TBasicType TInt32 CUInt -> -- flags : TInterface "Gst" "MapFlags" IO CInt videoMetaMap :: (MonadIO m) => VideoMeta -- _obj -> Word32 -- plane -> Gst.MapInfo -- info -> Ptr () -- data_ -> Int32 -- stride -> [Gst.MapFlags] -- flags -> m Bool -- result videoMetaMap _obj plane info data_ stride flags = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj let info' = unsafeManagedPtrGetPtr info let flags' = gflagsToWord flags result <- gst_video_meta_map _obj' plane info' data_ stride flags' let result' = (/= 0) result touchManagedPtr _obj touchManagedPtr info return result' data VideoMetaMapMethodInfo instance (signature ~ (Word32 -> Gst.MapInfo -> Ptr () -> Int32 -> [Gst.MapFlags] -> m Bool), MonadIO m) => MethodInfo VideoMetaMapMethodInfo VideoMeta signature where overloadedMethod _ = videoMetaMap -- method VideoMeta::unmap -- method type : OrdinaryMethod -- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoMeta", 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},Arg {argCName = "info", argType = TInterface "Gst" "MapInfo", 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_meta_unmap" gst_video_meta_unmap :: Ptr VideoMeta -> -- _obj : TInterface "GstVideo" "VideoMeta" Word32 -> -- plane : TBasicType TUInt32 Ptr Gst.MapInfo -> -- info : TInterface "Gst" "MapInfo" IO CInt videoMetaUnmap :: (MonadIO m) => VideoMeta -- _obj -> Word32 -- plane -> Gst.MapInfo -- info -> m Bool -- result videoMetaUnmap _obj plane info = liftIO $ do let _obj' = unsafeManagedPtrGetPtr _obj let info' = unsafeManagedPtrGetPtr info result <- gst_video_meta_unmap _obj' plane info' let result' = (/= 0) result touchManagedPtr _obj touchManagedPtr info return result' data VideoMetaUnmapMethodInfo instance (signature ~ (Word32 -> Gst.MapInfo -> m Bool), MonadIO m) => MethodInfo VideoMetaUnmapMethodInfo VideoMeta signature where overloadedMethod _ = videoMetaUnmap -- method VideoMeta::get_info -- method type : MemberFunction -- Args : [] -- Lengths : [] -- returnType : TInterface "Gst" "MetaInfo" -- throws : False -- Skip return : False foreign import ccall "gst_video_meta_get_info" gst_video_meta_get_info :: IO (Ptr Gst.MetaInfo) videoMetaGetInfo :: (MonadIO m) => m Gst.MetaInfo -- result videoMetaGetInfo = liftIO $ do result <- gst_video_meta_get_info checkUnexpectedReturnNULL "gst_video_meta_get_info" result result' <- (newPtr 80 Gst.MetaInfo) result return result' type family ResolveVideoMetaMethod (t :: Symbol) (o :: *) :: * where ResolveVideoMetaMethod "map" o = VideoMetaMapMethodInfo ResolveVideoMetaMethod "unmap" o = VideoMetaUnmapMethodInfo ResolveVideoMetaMethod l o = MethodResolutionFailed l o instance (info ~ ResolveVideoMetaMethod t VideoMeta, MethodInfo info VideoMeta p) => IsLabelProxy t (VideoMeta -> p) where fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info) #if MIN_VERSION_base(4,9,0) instance (info ~ ResolveVideoMetaMethod t VideoMeta, MethodInfo info VideoMeta p) => IsLabel t (VideoMeta -> p) where fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info) #endif