packages feed

gi-gstvideo-0.1.6.13: GI/GstVideo/Structs/VideoGLTextureUploadMeta.hs


{- |
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 for uploading a buffer to an OpenGL texture
ID. The caller of gst_video_gl_texture_upload_meta_upload() must
have OpenGL set up and call this from a thread where it is valid
to upload something to an OpenGL texture.
-}

module GI.GstVideo.Structs.VideoGLTextureUploadMeta
    ( 

-- * Exported types
    VideoGLTextureUploadMeta(..)            ,
    newZeroVideoGLTextureUploadMeta         ,
    noVideoGLTextureUploadMeta              ,


 -- * Methods
-- ** videoGLTextureUploadMetaGetInfo
    videoGLTextureUploadMetaGetInfo         ,


-- ** videoGLTextureUploadMetaUpload
    VideoGLTextureUploadMetaUploadMethodInfo,
    videoGLTextureUploadMetaUpload          ,




 -- * Properties
-- ** Meta
    videoGLTextureUploadMetaReadMeta        ,


-- ** NTextures
    videoGLTextureUploadMetaReadNTextures   ,


-- ** TextureOrientation
    videoGLTextureUploadMetaReadTextureOrientation,




    ) 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 VideoGLTextureUploadMeta = VideoGLTextureUploadMeta (ForeignPtr VideoGLTextureUploadMeta)
-- | Construct a `VideoGLTextureUploadMeta` struct initialized to zero.
newZeroVideoGLTextureUploadMeta :: MonadIO m => m VideoGLTextureUploadMeta
newZeroVideoGLTextureUploadMeta = liftIO $ callocBytes 80 >>= wrapPtr VideoGLTextureUploadMeta

noVideoGLTextureUploadMeta :: Maybe VideoGLTextureUploadMeta
noVideoGLTextureUploadMeta = Nothing

videoGLTextureUploadMetaReadMeta :: VideoGLTextureUploadMeta -> IO Gst.Meta
videoGLTextureUploadMetaReadMeta s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr Gst.Meta)
    val' <- (newPtr 16 Gst.Meta) val
    return val'

videoGLTextureUploadMetaReadTextureOrientation :: VideoGLTextureUploadMeta -> IO VideoGLTextureOrientation
videoGLTextureUploadMetaReadTextureOrientation s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 16) :: IO CUInt
    let val' = (toEnum . fromIntegral) val
    return val'

videoGLTextureUploadMetaReadNTextures :: VideoGLTextureUploadMeta -> IO Word32
videoGLTextureUploadMetaReadNTextures s = withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 20) :: IO Word32
    return val

-- XXX Skipped getter for "VideoGLTextureUploadMeta:texture_type" :: Not implemented: "Don't know how to unpack C array of type TCArray False 4 (-1) (TInterface \"GstVideo\" \"VideoGLTextureType\")"

-- method VideoGLTextureUploadMeta::upload
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "_obj", argType = TInterface "GstVideo" "VideoGLTextureUploadMeta", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "texture_id", 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_gl_texture_upload_meta_upload" gst_video_gl_texture_upload_meta_upload :: 
    Ptr VideoGLTextureUploadMeta ->         -- _obj : TInterface "GstVideo" "VideoGLTextureUploadMeta"
    Word32 ->                               -- texture_id : TBasicType TUInt32
    IO CInt


videoGLTextureUploadMetaUpload ::
    (MonadIO m) =>
    VideoGLTextureUploadMeta                -- _obj
    -> Word32                               -- textureId
    -> m Bool                               -- result
videoGLTextureUploadMetaUpload _obj textureId = liftIO $ do
    let _obj' = unsafeManagedPtrGetPtr _obj
    result <- gst_video_gl_texture_upload_meta_upload _obj' textureId
    let result' = (/= 0) result
    touchManagedPtr _obj
    return result'

data VideoGLTextureUploadMetaUploadMethodInfo
instance (signature ~ (Word32 -> m Bool), MonadIO m) => MethodInfo VideoGLTextureUploadMetaUploadMethodInfo VideoGLTextureUploadMeta signature where
    overloadedMethod _ = videoGLTextureUploadMetaUpload

-- method VideoGLTextureUploadMeta::get_info
-- method type : MemberFunction
-- Args : []
-- Lengths : []
-- returnType : TInterface "Gst" "MetaInfo"
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_gl_texture_upload_meta_get_info" gst_video_gl_texture_upload_meta_get_info :: 
    IO (Ptr Gst.MetaInfo)


videoGLTextureUploadMetaGetInfo ::
    (MonadIO m) =>
    m Gst.MetaInfo                          -- result
videoGLTextureUploadMetaGetInfo  = liftIO $ do
    result <- gst_video_gl_texture_upload_meta_get_info
    checkUnexpectedReturnNULL "gst_video_gl_texture_upload_meta_get_info" result
    result' <- (newPtr 80 Gst.MetaInfo) result
    return result'

type family ResolveVideoGLTextureUploadMetaMethod (t :: Symbol) (o :: *) :: * where
    ResolveVideoGLTextureUploadMetaMethod "upload" o = VideoGLTextureUploadMetaUploadMethodInfo
    ResolveVideoGLTextureUploadMetaMethod l o = MethodResolutionFailed l o

instance (info ~ ResolveVideoGLTextureUploadMetaMethod t VideoGLTextureUploadMeta, MethodInfo info VideoGLTextureUploadMeta p) => IsLabelProxy t (VideoGLTextureUploadMeta -> p) where
    fromLabelProxy _ = overloadedMethod (MethodProxy :: MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveVideoGLTextureUploadMetaMethod t VideoGLTextureUploadMeta, MethodInfo info VideoGLTextureUploadMeta p) => IsLabel t (VideoGLTextureUploadMeta -> p) where
    fromLabel _ = overloadedMethod (MethodProxy :: MethodProxy info)
#endif