{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)

Extra buffer metadata describing an image region of interest
-}

#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
       && !defined(__HADDOCK_VERSION__))

module GI.GstVideo.Structs.VideoRegionOfInterestMeta
    (

-- * Exported types
    VideoRegionOfInterestMeta(..)           ,
    newZeroVideoRegionOfInterestMeta        ,
    noVideoRegionOfInterestMeta             ,


 -- * Methods
-- ** addParam #method:addParam#

#if ENABLE_OVERLOADING
    VideoRegionOfInterestMetaAddParamMethodInfo,
#endif
    videoRegionOfInterestMetaAddParam       ,


-- ** getInfo #method:getInfo#

    videoRegionOfInterestMetaGetInfo        ,


-- ** getParam #method:getParam#

#if ENABLE_OVERLOADING
    VideoRegionOfInterestMetaGetParamMethodInfo,
#endif
    videoRegionOfInterestMetaGetParam       ,




 -- * Properties
-- ** h #attr:h#
{- | bounding box height
-}
    getVideoRegionOfInterestMetaH           ,
    setVideoRegionOfInterestMetaH           ,
#if ENABLE_OVERLOADING
    videoRegionOfInterestMeta_h             ,
#endif


-- ** id #attr:id#
{- | identifier of this particular ROI
-}
    getVideoRegionOfInterestMetaId          ,
    setVideoRegionOfInterestMetaId          ,
#if ENABLE_OVERLOADING
    videoRegionOfInterestMeta_id            ,
#endif


-- ** meta #attr:meta#
{- | parent 'GI.Gst.Structs.Meta.Meta'
-}
    getVideoRegionOfInterestMetaMeta        ,
#if ENABLE_OVERLOADING
    videoRegionOfInterestMeta_meta          ,
#endif


-- ** params #attr:params#
{- | list of 'GI.Gst.Structs.Structure.Structure' containing element-specific params for downstream, see @/gst_video_region_of_interest_meta_add_params()/@. (Since: 1.14)
-}
    clearVideoRegionOfInterestMetaParams    ,
    getVideoRegionOfInterestMetaParams      ,
    setVideoRegionOfInterestMetaParams      ,
#if ENABLE_OVERLOADING
    videoRegionOfInterestMeta_params        ,
#endif


-- ** parentId #attr:parentId#
{- | identifier of its parent ROI, used f.i. for ROI hierarchisation.
-}
    getVideoRegionOfInterestMetaParentId    ,
    setVideoRegionOfInterestMetaParentId    ,
#if ENABLE_OVERLOADING
    videoRegionOfInterestMeta_parentId      ,
#endif


-- ** roiType #attr:roiType#
{- | GQuark describing the semantic of the Roi (f.i. a face, a pedestrian)
-}
    getVideoRegionOfInterestMetaRoiType     ,
    setVideoRegionOfInterestMetaRoiType     ,
#if ENABLE_OVERLOADING
    videoRegionOfInterestMeta_roiType       ,
#endif


-- ** w #attr:w#
{- | bounding box width
-}
    getVideoRegionOfInterestMetaW           ,
    setVideoRegionOfInterestMetaW           ,
#if ENABLE_OVERLOADING
    videoRegionOfInterestMeta_w             ,
#endif


-- ** x #attr:x#
{- | x component of upper-left corner
-}
    getVideoRegionOfInterestMetaX           ,
    setVideoRegionOfInterestMetaX           ,
#if ENABLE_OVERLOADING
    videoRegionOfInterestMeta_x             ,
#endif


-- ** y #attr:y#
{- | y component of upper-left corner
-}
    getVideoRegionOfInterestMetaY           ,
    setVideoRegionOfInterestMetaY           ,
#if ENABLE_OVERLOADING
    videoRegionOfInterestMeta_y             ,
#endif




    ) where

import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL

import qualified GI.Gst.Structs.Meta as Gst.Meta
import qualified GI.Gst.Structs.MetaInfo as Gst.MetaInfo
import qualified GI.Gst.Structs.Structure as Gst.Structure

-- | Memory-managed wrapper type.
newtype VideoRegionOfInterestMeta = VideoRegionOfInterestMeta (ManagedPtr VideoRegionOfInterestMeta)
instance WrappedPtr VideoRegionOfInterestMeta where
    wrappedPtrCalloc = callocBytes 56
    wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 56 >=> wrapPtr VideoRegionOfInterestMeta)
    wrappedPtrFree = Just ptr_to_g_free

-- | Construct a `VideoRegionOfInterestMeta` struct initialized to zero.
newZeroVideoRegionOfInterestMeta :: MonadIO m => m VideoRegionOfInterestMeta
newZeroVideoRegionOfInterestMeta = liftIO $ wrappedPtrCalloc >>= wrapPtr VideoRegionOfInterestMeta

instance tag ~ 'AttrSet => Constructible VideoRegionOfInterestMeta tag where
    new _ attrs = do
        o <- newZeroVideoRegionOfInterestMeta
        GI.Attributes.set o attrs
        return o


-- | A convenience alias for `Nothing` :: `Maybe` `VideoRegionOfInterestMeta`.
noVideoRegionOfInterestMeta :: Maybe VideoRegionOfInterestMeta
noVideoRegionOfInterestMeta = Nothing

{- |
Get the value of the “@meta@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' videoRegionOfInterestMeta #meta
@
-}
getVideoRegionOfInterestMetaMeta :: MonadIO m => VideoRegionOfInterestMeta -> m Gst.Meta.Meta
getVideoRegionOfInterestMetaMeta s = liftIO $ withManagedPtr s $ \ptr -> do
    let val = ptr `plusPtr` 0 :: (Ptr Gst.Meta.Meta)
    val' <- (newPtr Gst.Meta.Meta) val
    return val'

#if ENABLE_OVERLOADING
data VideoRegionOfInterestMetaMetaFieldInfo
instance AttrInfo VideoRegionOfInterestMetaMetaFieldInfo where
    type AttrAllowedOps VideoRegionOfInterestMetaMetaFieldInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint VideoRegionOfInterestMetaMetaFieldInfo = (~) (Ptr Gst.Meta.Meta)
    type AttrBaseTypeConstraint VideoRegionOfInterestMetaMetaFieldInfo = (~) VideoRegionOfInterestMeta
    type AttrGetType VideoRegionOfInterestMetaMetaFieldInfo = Gst.Meta.Meta
    type AttrLabel VideoRegionOfInterestMetaMetaFieldInfo = "meta"
    type AttrOrigin VideoRegionOfInterestMetaMetaFieldInfo = VideoRegionOfInterestMeta
    attrGet _ = getVideoRegionOfInterestMetaMeta
    attrSet _ = undefined
    attrConstruct = undefined
    attrClear _ = undefined

videoRegionOfInterestMeta_meta :: AttrLabelProxy "meta"
videoRegionOfInterestMeta_meta = AttrLabelProxy

#endif


{- |
Get the value of the “@roi_type@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' videoRegionOfInterestMeta #roiType
@
-}
getVideoRegionOfInterestMetaRoiType :: MonadIO m => VideoRegionOfInterestMeta -> m Word32
getVideoRegionOfInterestMetaRoiType s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 16) :: IO Word32
    return val

{- |
Set the value of the “@roi_type@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' videoRegionOfInterestMeta [ #roiType 'Data.GI.Base.Attributes.:=' value ]
@
-}
setVideoRegionOfInterestMetaRoiType :: MonadIO m => VideoRegionOfInterestMeta -> Word32 -> m ()
setVideoRegionOfInterestMetaRoiType s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 16) (val :: Word32)

#if ENABLE_OVERLOADING
data VideoRegionOfInterestMetaRoiTypeFieldInfo
instance AttrInfo VideoRegionOfInterestMetaRoiTypeFieldInfo where
    type AttrAllowedOps VideoRegionOfInterestMetaRoiTypeFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint VideoRegionOfInterestMetaRoiTypeFieldInfo = (~) Word32
    type AttrBaseTypeConstraint VideoRegionOfInterestMetaRoiTypeFieldInfo = (~) VideoRegionOfInterestMeta
    type AttrGetType VideoRegionOfInterestMetaRoiTypeFieldInfo = Word32
    type AttrLabel VideoRegionOfInterestMetaRoiTypeFieldInfo = "roi_type"
    type AttrOrigin VideoRegionOfInterestMetaRoiTypeFieldInfo = VideoRegionOfInterestMeta
    attrGet _ = getVideoRegionOfInterestMetaRoiType
    attrSet _ = setVideoRegionOfInterestMetaRoiType
    attrConstruct = undefined
    attrClear _ = undefined

videoRegionOfInterestMeta_roiType :: AttrLabelProxy "roiType"
videoRegionOfInterestMeta_roiType = AttrLabelProxy

#endif


{- |
Get the value of the “@id@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' videoRegionOfInterestMeta #id
@
-}
getVideoRegionOfInterestMetaId :: MonadIO m => VideoRegionOfInterestMeta -> m Int32
getVideoRegionOfInterestMetaId s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 20) :: IO Int32
    return val

{- |
Set the value of the “@id@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' videoRegionOfInterestMeta [ #id 'Data.GI.Base.Attributes.:=' value ]
@
-}
setVideoRegionOfInterestMetaId :: MonadIO m => VideoRegionOfInterestMeta -> Int32 -> m ()
setVideoRegionOfInterestMetaId s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 20) (val :: Int32)

#if ENABLE_OVERLOADING
data VideoRegionOfInterestMetaIdFieldInfo
instance AttrInfo VideoRegionOfInterestMetaIdFieldInfo where
    type AttrAllowedOps VideoRegionOfInterestMetaIdFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint VideoRegionOfInterestMetaIdFieldInfo = (~) Int32
    type AttrBaseTypeConstraint VideoRegionOfInterestMetaIdFieldInfo = (~) VideoRegionOfInterestMeta
    type AttrGetType VideoRegionOfInterestMetaIdFieldInfo = Int32
    type AttrLabel VideoRegionOfInterestMetaIdFieldInfo = "id"
    type AttrOrigin VideoRegionOfInterestMetaIdFieldInfo = VideoRegionOfInterestMeta
    attrGet _ = getVideoRegionOfInterestMetaId
    attrSet _ = setVideoRegionOfInterestMetaId
    attrConstruct = undefined
    attrClear _ = undefined

videoRegionOfInterestMeta_id :: AttrLabelProxy "id"
videoRegionOfInterestMeta_id = AttrLabelProxy

#endif


{- |
Get the value of the “@parent_id@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' videoRegionOfInterestMeta #parentId
@
-}
getVideoRegionOfInterestMetaParentId :: MonadIO m => VideoRegionOfInterestMeta -> m Int32
getVideoRegionOfInterestMetaParentId s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 24) :: IO Int32
    return val

{- |
Set the value of the “@parent_id@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' videoRegionOfInterestMeta [ #parentId 'Data.GI.Base.Attributes.:=' value ]
@
-}
setVideoRegionOfInterestMetaParentId :: MonadIO m => VideoRegionOfInterestMeta -> Int32 -> m ()
setVideoRegionOfInterestMetaParentId s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 24) (val :: Int32)

#if ENABLE_OVERLOADING
data VideoRegionOfInterestMetaParentIdFieldInfo
instance AttrInfo VideoRegionOfInterestMetaParentIdFieldInfo where
    type AttrAllowedOps VideoRegionOfInterestMetaParentIdFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint VideoRegionOfInterestMetaParentIdFieldInfo = (~) Int32
    type AttrBaseTypeConstraint VideoRegionOfInterestMetaParentIdFieldInfo = (~) VideoRegionOfInterestMeta
    type AttrGetType VideoRegionOfInterestMetaParentIdFieldInfo = Int32
    type AttrLabel VideoRegionOfInterestMetaParentIdFieldInfo = "parent_id"
    type AttrOrigin VideoRegionOfInterestMetaParentIdFieldInfo = VideoRegionOfInterestMeta
    attrGet _ = getVideoRegionOfInterestMetaParentId
    attrSet _ = setVideoRegionOfInterestMetaParentId
    attrConstruct = undefined
    attrClear _ = undefined

videoRegionOfInterestMeta_parentId :: AttrLabelProxy "parentId"
videoRegionOfInterestMeta_parentId = AttrLabelProxy

#endif


{- |
Get the value of the “@x@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' videoRegionOfInterestMeta #x
@
-}
getVideoRegionOfInterestMetaX :: MonadIO m => VideoRegionOfInterestMeta -> m Word32
getVideoRegionOfInterestMetaX s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 28) :: IO Word32
    return val

{- |
Set the value of the “@x@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' videoRegionOfInterestMeta [ #x 'Data.GI.Base.Attributes.:=' value ]
@
-}
setVideoRegionOfInterestMetaX :: MonadIO m => VideoRegionOfInterestMeta -> Word32 -> m ()
setVideoRegionOfInterestMetaX s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 28) (val :: Word32)

#if ENABLE_OVERLOADING
data VideoRegionOfInterestMetaXFieldInfo
instance AttrInfo VideoRegionOfInterestMetaXFieldInfo where
    type AttrAllowedOps VideoRegionOfInterestMetaXFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint VideoRegionOfInterestMetaXFieldInfo = (~) Word32
    type AttrBaseTypeConstraint VideoRegionOfInterestMetaXFieldInfo = (~) VideoRegionOfInterestMeta
    type AttrGetType VideoRegionOfInterestMetaXFieldInfo = Word32
    type AttrLabel VideoRegionOfInterestMetaXFieldInfo = "x"
    type AttrOrigin VideoRegionOfInterestMetaXFieldInfo = VideoRegionOfInterestMeta
    attrGet _ = getVideoRegionOfInterestMetaX
    attrSet _ = setVideoRegionOfInterestMetaX
    attrConstruct = undefined
    attrClear _ = undefined

videoRegionOfInterestMeta_x :: AttrLabelProxy "x"
videoRegionOfInterestMeta_x = AttrLabelProxy

#endif


{- |
Get the value of the “@y@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' videoRegionOfInterestMeta #y
@
-}
getVideoRegionOfInterestMetaY :: MonadIO m => VideoRegionOfInterestMeta -> m Word32
getVideoRegionOfInterestMetaY s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 32) :: IO Word32
    return val

{- |
Set the value of the “@y@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' videoRegionOfInterestMeta [ #y 'Data.GI.Base.Attributes.:=' value ]
@
-}
setVideoRegionOfInterestMetaY :: MonadIO m => VideoRegionOfInterestMeta -> Word32 -> m ()
setVideoRegionOfInterestMetaY s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 32) (val :: Word32)

#if ENABLE_OVERLOADING
data VideoRegionOfInterestMetaYFieldInfo
instance AttrInfo VideoRegionOfInterestMetaYFieldInfo where
    type AttrAllowedOps VideoRegionOfInterestMetaYFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint VideoRegionOfInterestMetaYFieldInfo = (~) Word32
    type AttrBaseTypeConstraint VideoRegionOfInterestMetaYFieldInfo = (~) VideoRegionOfInterestMeta
    type AttrGetType VideoRegionOfInterestMetaYFieldInfo = Word32
    type AttrLabel VideoRegionOfInterestMetaYFieldInfo = "y"
    type AttrOrigin VideoRegionOfInterestMetaYFieldInfo = VideoRegionOfInterestMeta
    attrGet _ = getVideoRegionOfInterestMetaY
    attrSet _ = setVideoRegionOfInterestMetaY
    attrConstruct = undefined
    attrClear _ = undefined

videoRegionOfInterestMeta_y :: AttrLabelProxy "y"
videoRegionOfInterestMeta_y = AttrLabelProxy

#endif


{- |
Get the value of the “@w@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' videoRegionOfInterestMeta #w
@
-}
getVideoRegionOfInterestMetaW :: MonadIO m => VideoRegionOfInterestMeta -> m Word32
getVideoRegionOfInterestMetaW s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 36) :: IO Word32
    return val

{- |
Set the value of the “@w@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' videoRegionOfInterestMeta [ #w 'Data.GI.Base.Attributes.:=' value ]
@
-}
setVideoRegionOfInterestMetaW :: MonadIO m => VideoRegionOfInterestMeta -> Word32 -> m ()
setVideoRegionOfInterestMetaW s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 36) (val :: Word32)

#if ENABLE_OVERLOADING
data VideoRegionOfInterestMetaWFieldInfo
instance AttrInfo VideoRegionOfInterestMetaWFieldInfo where
    type AttrAllowedOps VideoRegionOfInterestMetaWFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint VideoRegionOfInterestMetaWFieldInfo = (~) Word32
    type AttrBaseTypeConstraint VideoRegionOfInterestMetaWFieldInfo = (~) VideoRegionOfInterestMeta
    type AttrGetType VideoRegionOfInterestMetaWFieldInfo = Word32
    type AttrLabel VideoRegionOfInterestMetaWFieldInfo = "w"
    type AttrOrigin VideoRegionOfInterestMetaWFieldInfo = VideoRegionOfInterestMeta
    attrGet _ = getVideoRegionOfInterestMetaW
    attrSet _ = setVideoRegionOfInterestMetaW
    attrConstruct = undefined
    attrClear _ = undefined

videoRegionOfInterestMeta_w :: AttrLabelProxy "w"
videoRegionOfInterestMeta_w = AttrLabelProxy

#endif


{- |
Get the value of the “@h@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' videoRegionOfInterestMeta #h
@
-}
getVideoRegionOfInterestMetaH :: MonadIO m => VideoRegionOfInterestMeta -> m Word32
getVideoRegionOfInterestMetaH s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 40) :: IO Word32
    return val

{- |
Set the value of the “@h@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' videoRegionOfInterestMeta [ #h 'Data.GI.Base.Attributes.:=' value ]
@
-}
setVideoRegionOfInterestMetaH :: MonadIO m => VideoRegionOfInterestMeta -> Word32 -> m ()
setVideoRegionOfInterestMetaH s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 40) (val :: Word32)

#if ENABLE_OVERLOADING
data VideoRegionOfInterestMetaHFieldInfo
instance AttrInfo VideoRegionOfInterestMetaHFieldInfo where
    type AttrAllowedOps VideoRegionOfInterestMetaHFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint VideoRegionOfInterestMetaHFieldInfo = (~) Word32
    type AttrBaseTypeConstraint VideoRegionOfInterestMetaHFieldInfo = (~) VideoRegionOfInterestMeta
    type AttrGetType VideoRegionOfInterestMetaHFieldInfo = Word32
    type AttrLabel VideoRegionOfInterestMetaHFieldInfo = "h"
    type AttrOrigin VideoRegionOfInterestMetaHFieldInfo = VideoRegionOfInterestMeta
    attrGet _ = getVideoRegionOfInterestMetaH
    attrSet _ = setVideoRegionOfInterestMetaH
    attrConstruct = undefined
    attrClear _ = undefined

videoRegionOfInterestMeta_h :: AttrLabelProxy "h"
videoRegionOfInterestMeta_h = AttrLabelProxy

#endif


{- |
Get the value of the “@params@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' videoRegionOfInterestMeta #params
@
-}
getVideoRegionOfInterestMetaParams :: MonadIO m => VideoRegionOfInterestMeta -> m ([Ptr ()])
getVideoRegionOfInterestMetaParams s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 48) :: IO (Ptr (GList (Ptr ())))
    val' <- unpackGList val
    return val'

{- |
Set the value of the “@params@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.set' videoRegionOfInterestMeta [ #params 'Data.GI.Base.Attributes.:=' value ]
@
-}
setVideoRegionOfInterestMetaParams :: MonadIO m => VideoRegionOfInterestMeta -> Ptr (GList (Ptr ())) -> m ()
setVideoRegionOfInterestMetaParams s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 48) (val :: Ptr (GList (Ptr ())))

{- |
Set the value of the “@params@” field to `Nothing`.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.clear' #params
@
-}
clearVideoRegionOfInterestMetaParams :: MonadIO m => VideoRegionOfInterestMeta -> m ()
clearVideoRegionOfInterestMetaParams s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 48) (FP.nullPtr :: Ptr (GList (Ptr ())))

#if ENABLE_OVERLOADING
data VideoRegionOfInterestMetaParamsFieldInfo
instance AttrInfo VideoRegionOfInterestMetaParamsFieldInfo where
    type AttrAllowedOps VideoRegionOfInterestMetaParamsFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint VideoRegionOfInterestMetaParamsFieldInfo = (~) (Ptr (GList (Ptr ())))
    type AttrBaseTypeConstraint VideoRegionOfInterestMetaParamsFieldInfo = (~) VideoRegionOfInterestMeta
    type AttrGetType VideoRegionOfInterestMetaParamsFieldInfo = [Ptr ()]
    type AttrLabel VideoRegionOfInterestMetaParamsFieldInfo = "params"
    type AttrOrigin VideoRegionOfInterestMetaParamsFieldInfo = VideoRegionOfInterestMeta
    attrGet _ = getVideoRegionOfInterestMetaParams
    attrSet _ = setVideoRegionOfInterestMetaParams
    attrConstruct = undefined
    attrClear _ = clearVideoRegionOfInterestMetaParams

videoRegionOfInterestMeta_params :: AttrLabelProxy "params"
videoRegionOfInterestMeta_params = AttrLabelProxy

#endif



#if ENABLE_OVERLOADING
instance O.HasAttributeList VideoRegionOfInterestMeta
type instance O.AttributeList VideoRegionOfInterestMeta = VideoRegionOfInterestMetaAttributeList
type VideoRegionOfInterestMetaAttributeList = ('[ '("meta", VideoRegionOfInterestMetaMetaFieldInfo), '("roiType", VideoRegionOfInterestMetaRoiTypeFieldInfo), '("id", VideoRegionOfInterestMetaIdFieldInfo), '("parentId", VideoRegionOfInterestMetaParentIdFieldInfo), '("x", VideoRegionOfInterestMetaXFieldInfo), '("y", VideoRegionOfInterestMetaYFieldInfo), '("w", VideoRegionOfInterestMetaWFieldInfo), '("h", VideoRegionOfInterestMetaHFieldInfo), '("params", VideoRegionOfInterestMetaParamsFieldInfo)] :: [(Symbol, *)])
#endif

-- method VideoRegionOfInterestMeta::add_param
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "meta", argType = TInterface (Name {namespace = "GstVideo", name = "VideoRegionOfInterestMeta"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstVideoRegionOfInterestMeta", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "s", argType = TInterface (Name {namespace = "Gst", name = "Structure"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstStructure", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_region_of_interest_meta_add_param" gst_video_region_of_interest_meta_add_param ::
    Ptr VideoRegionOfInterestMeta ->        -- meta : TInterface (Name {namespace = "GstVideo", name = "VideoRegionOfInterestMeta"})
    Ptr Gst.Structure.Structure ->          -- s : TInterface (Name {namespace = "Gst", name = "Structure"})
    IO ()

{- |
Attach element-specific parameters to /@meta@/ meant to be used by downstream
elements which may handle this ROI.
The name of /@s@/ is used to identify the element these parameters are meant for.

This is typically used to tell encoders how they should encode this specific region.
For example, a structure named \"roi\/x264enc\" could be used to give the
QP offsets this encoder should use when encoding the region described in /@meta@/.
Multiple parameters can be defined for the same meta so different encoders
can be supported by cross platform applications).

/Since: 1.14/
-}
videoRegionOfInterestMetaAddParam ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    VideoRegionOfInterestMeta
    {- ^ /@meta@/: a 'GI.GstVideo.Structs.VideoRegionOfInterestMeta.VideoRegionOfInterestMeta' -}
    -> Gst.Structure.Structure
    {- ^ /@s@/: a 'GI.Gst.Structs.Structure.Structure' -}
    -> m ()
videoRegionOfInterestMetaAddParam meta s = liftIO $ do
    meta' <- unsafeManagedPtrGetPtr meta
    s' <- B.ManagedPtr.disownBoxed s
    gst_video_region_of_interest_meta_add_param meta' s'
    touchManagedPtr meta
    touchManagedPtr s
    return ()

#if ENABLE_OVERLOADING
data VideoRegionOfInterestMetaAddParamMethodInfo
instance (signature ~ (Gst.Structure.Structure -> m ()), MonadIO m) => O.MethodInfo VideoRegionOfInterestMetaAddParamMethodInfo VideoRegionOfInterestMeta signature where
    overloadedMethod _ = videoRegionOfInterestMetaAddParam

#endif

-- method VideoRegionOfInterestMeta::get_param
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "meta", argType = TInterface (Name {namespace = "GstVideo", name = "VideoRegionOfInterestMeta"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstVideoRegionOfInterestMeta", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a name.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gst", name = "Structure"}))
-- throws : False
-- Skip return : False

foreign import ccall "gst_video_region_of_interest_meta_get_param" gst_video_region_of_interest_meta_get_param ::
    Ptr VideoRegionOfInterestMeta ->        -- meta : TInterface (Name {namespace = "GstVideo", name = "VideoRegionOfInterestMeta"})
    CString ->                              -- name : TBasicType TUTF8
    IO (Ptr Gst.Structure.Structure)

{- |
Retrieve the parameter for /@meta@/ having /@name@/ as structure name,
or 'Nothing' if there is none.

/Since: 1.14/
-}
videoRegionOfInterestMetaGetParam ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    VideoRegionOfInterestMeta
    {- ^ /@meta@/: a 'GI.GstVideo.Structs.VideoRegionOfInterestMeta.VideoRegionOfInterestMeta' -}
    -> T.Text
    {- ^ /@name@/: a name. -}
    -> m (Maybe Gst.Structure.Structure)
    {- ^ __Returns:__ a 'GI.Gst.Structs.Structure.Structure' -}
videoRegionOfInterestMetaGetParam meta name = liftIO $ do
    meta' <- unsafeManagedPtrGetPtr meta
    name' <- textToCString name
    result <- gst_video_region_of_interest_meta_get_param meta' name'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- (newBoxed Gst.Structure.Structure) result'
        return result''
    touchManagedPtr meta
    freeMem name'
    return maybeResult

#if ENABLE_OVERLOADING
data VideoRegionOfInterestMetaGetParamMethodInfo
instance (signature ~ (T.Text -> m (Maybe Gst.Structure.Structure)), MonadIO m) => O.MethodInfo VideoRegionOfInterestMetaGetParamMethodInfo VideoRegionOfInterestMeta signature where
    overloadedMethod _ = videoRegionOfInterestMetaGetParam

#endif

-- method VideoRegionOfInterestMeta::get_info
-- method type : MemberFunction
-- Args : []
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gst", name = "MetaInfo"}))
-- throws : False
-- Skip return : False

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

{- |
/No description available in the introspection data./
-}
videoRegionOfInterestMetaGetInfo ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    m Gst.MetaInfo.MetaInfo
videoRegionOfInterestMetaGetInfo  = liftIO $ do
    result <- gst_video_region_of_interest_meta_get_info
    checkUnexpectedReturnNULL "videoRegionOfInterestMetaGetInfo" result
    result' <- (newPtr Gst.MetaInfo.MetaInfo) result
    return result'

#if ENABLE_OVERLOADING
#endif

#if ENABLE_OVERLOADING
type family ResolveVideoRegionOfInterestMetaMethod (t :: Symbol) (o :: *) :: * where
    ResolveVideoRegionOfInterestMetaMethod "addParam" o = VideoRegionOfInterestMetaAddParamMethodInfo
    ResolveVideoRegionOfInterestMetaMethod "getParam" o = VideoRegionOfInterestMetaGetParamMethodInfo
    ResolveVideoRegionOfInterestMetaMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveVideoRegionOfInterestMetaMethod t VideoRegionOfInterestMeta, O.MethodInfo info VideoRegionOfInterestMeta p) => OL.IsLabel t (VideoRegionOfInterestMeta -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#else
    fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif

#endif