{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- t'GI.Gst.Structs.ReferenceTimestampMeta.ReferenceTimestampMeta' can be used to attach alternative timestamps and
-- possibly durations to a t'GI.Gst.Structs.Buffer.Buffer'. These are generally not according to
-- the pipeline clock and could be e.g. the NTP timestamp when the media was
-- captured.
-- 
-- The reference is stored as a t'GI.Gst.Structs.Caps.Caps' in /@reference@/. Examples of valid
-- references would be \"timestamp\/x-drivername-stream\" for timestamps that are locally
-- generated by some driver named \"drivername\" when generating the stream,
-- e.g. based on a frame counter, or \"timestamp\/x-ntp, host=pool.ntp.org,
-- port=123\" for timestamps based on a specific NTP server.
-- 
-- /Since: 1.14/

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

module GI.Gst.Structs.ReferenceTimestampMeta
    ( 

-- * Exported types
    ReferenceTimestampMeta(..)              ,
    newZeroReferenceTimestampMeta           ,
    noReferenceTimestampMeta                ,


 -- * Methods
-- ** Overloaded methods #method:Overloaded methods#

#if defined(ENABLE_OVERLOADING)
    ResolveReferenceTimestampMetaMethod     ,
#endif


-- ** getInfo #method:getInfo#

    referenceTimestampMetaGetInfo           ,




 -- * Properties
-- ** duration #attr:duration#
-- | duration, or 'GI.Gst.Constants.CLOCK_TIME_NONE'

    getReferenceTimestampMetaDuration       ,
#if defined(ENABLE_OVERLOADING)
    referenceTimestampMeta_duration         ,
#endif
    setReferenceTimestampMetaDuration       ,


-- ** parent #attr:parent#
-- | the parent t'GI.Gst.Structs.Meta.Meta' structure

    getReferenceTimestampMetaParent         ,
#if defined(ENABLE_OVERLOADING)
    referenceTimestampMeta_parent           ,
#endif


-- ** reference #attr:reference#
-- | identifier for the timestamp reference.

    clearReferenceTimestampMetaReference    ,
    getReferenceTimestampMetaReference      ,
#if defined(ENABLE_OVERLOADING)
    referenceTimestampMeta_reference        ,
#endif
    setReferenceTimestampMetaReference      ,


-- ** timestamp #attr:timestamp#
-- | timestamp

    getReferenceTimestampMetaTimestamp      ,
#if defined(ENABLE_OVERLOADING)
    referenceTimestampMeta_timestamp        ,
#endif
    setReferenceTimestampMetaTimestamp      ,




    ) 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.GI.Base.Signals as B.Signals
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 {-# SOURCE #-} qualified GI.Gst.Structs.Caps as Gst.Caps
import {-# SOURCE #-} qualified GI.Gst.Structs.Meta as Gst.Meta
import {-# SOURCE #-} qualified GI.Gst.Structs.MetaInfo as Gst.MetaInfo

-- | Memory-managed wrapper type.
newtype ReferenceTimestampMeta = ReferenceTimestampMeta (ManagedPtr ReferenceTimestampMeta)
    deriving (ReferenceTimestampMeta -> ReferenceTimestampMeta -> Bool
(ReferenceTimestampMeta -> ReferenceTimestampMeta -> Bool)
-> (ReferenceTimestampMeta -> ReferenceTimestampMeta -> Bool)
-> Eq ReferenceTimestampMeta
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ReferenceTimestampMeta -> ReferenceTimestampMeta -> Bool
$c/= :: ReferenceTimestampMeta -> ReferenceTimestampMeta -> Bool
== :: ReferenceTimestampMeta -> ReferenceTimestampMeta -> Bool
$c== :: ReferenceTimestampMeta -> ReferenceTimestampMeta -> Bool
Eq)
instance WrappedPtr ReferenceTimestampMeta where
    wrappedPtrCalloc :: IO (Ptr ReferenceTimestampMeta)
wrappedPtrCalloc = Int -> IO (Ptr ReferenceTimestampMeta)
forall a. Int -> IO (Ptr a)
callocBytes 40
    wrappedPtrCopy :: ReferenceTimestampMeta -> IO ReferenceTimestampMeta
wrappedPtrCopy = \p :: ReferenceTimestampMeta
p -> ReferenceTimestampMeta
-> (Ptr ReferenceTimestampMeta -> IO ReferenceTimestampMeta)
-> IO ReferenceTimestampMeta
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr ReferenceTimestampMeta
p (Int
-> Ptr ReferenceTimestampMeta -> IO (Ptr ReferenceTimestampMeta)
forall a. WrappedPtr a => Int -> Ptr a -> IO (Ptr a)
copyBytes 40 (Ptr ReferenceTimestampMeta -> IO (Ptr ReferenceTimestampMeta))
-> (Ptr ReferenceTimestampMeta -> IO ReferenceTimestampMeta)
-> Ptr ReferenceTimestampMeta
-> IO ReferenceTimestampMeta
forall (m :: * -> *) a b c.
Monad m =>
(a -> m b) -> (b -> m c) -> a -> m c
>=> (ManagedPtr ReferenceTimestampMeta -> ReferenceTimestampMeta)
-> Ptr ReferenceTimestampMeta -> IO ReferenceTimestampMeta
forall a.
(HasCallStack, WrappedPtr a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
wrapPtr ManagedPtr ReferenceTimestampMeta -> ReferenceTimestampMeta
ReferenceTimestampMeta)
    wrappedPtrFree :: Maybe (GDestroyNotify ReferenceTimestampMeta)
wrappedPtrFree = GDestroyNotify ReferenceTimestampMeta
-> Maybe (GDestroyNotify ReferenceTimestampMeta)
forall a. a -> Maybe a
Just GDestroyNotify ReferenceTimestampMeta
forall a. FunPtr (Ptr a -> IO ())
ptr_to_g_free

-- | Construct a `ReferenceTimestampMeta` struct initialized to zero.
newZeroReferenceTimestampMeta :: MonadIO m => m ReferenceTimestampMeta
newZeroReferenceTimestampMeta :: m ReferenceTimestampMeta
newZeroReferenceTimestampMeta = IO ReferenceTimestampMeta -> m ReferenceTimestampMeta
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO ReferenceTimestampMeta -> m ReferenceTimestampMeta)
-> IO ReferenceTimestampMeta -> m ReferenceTimestampMeta
forall a b. (a -> b) -> a -> b
$ IO (Ptr ReferenceTimestampMeta)
forall a. WrappedPtr a => IO (Ptr a)
wrappedPtrCalloc IO (Ptr ReferenceTimestampMeta)
-> (Ptr ReferenceTimestampMeta -> IO ReferenceTimestampMeta)
-> IO ReferenceTimestampMeta
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ManagedPtr ReferenceTimestampMeta -> ReferenceTimestampMeta)
-> Ptr ReferenceTimestampMeta -> IO ReferenceTimestampMeta
forall a.
(HasCallStack, WrappedPtr a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
wrapPtr ManagedPtr ReferenceTimestampMeta -> ReferenceTimestampMeta
ReferenceTimestampMeta

instance tag ~ 'AttrSet => Constructible ReferenceTimestampMeta tag where
    new :: (ManagedPtr ReferenceTimestampMeta -> ReferenceTimestampMeta)
-> [AttrOp ReferenceTimestampMeta tag] -> m ReferenceTimestampMeta
new _ attrs :: [AttrOp ReferenceTimestampMeta tag]
attrs = do
        ReferenceTimestampMeta
o <- m ReferenceTimestampMeta
forall (m :: * -> *). MonadIO m => m ReferenceTimestampMeta
newZeroReferenceTimestampMeta
        ReferenceTimestampMeta
-> [AttrOp ReferenceTimestampMeta 'AttrSet] -> m ()
forall o (m :: * -> *).
MonadIO m =>
o -> [AttrOp o 'AttrSet] -> m ()
GI.Attributes.set ReferenceTimestampMeta
o [AttrOp ReferenceTimestampMeta tag]
[AttrOp ReferenceTimestampMeta 'AttrSet]
attrs
        ReferenceTimestampMeta -> m ReferenceTimestampMeta
forall (m :: * -> *) a. Monad m => a -> m a
return ReferenceTimestampMeta
o


-- | A convenience alias for `Nothing` :: `Maybe` `ReferenceTimestampMeta`.
noReferenceTimestampMeta :: Maybe ReferenceTimestampMeta
noReferenceTimestampMeta :: Maybe ReferenceTimestampMeta
noReferenceTimestampMeta = Maybe ReferenceTimestampMeta
forall a. Maybe a
Nothing

-- | Get the value of the “@parent@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' referenceTimestampMeta #parent
-- @
getReferenceTimestampMetaParent :: MonadIO m => ReferenceTimestampMeta -> m Gst.Meta.Meta
getReferenceTimestampMetaParent :: ReferenceTimestampMeta -> m Meta
getReferenceTimestampMetaParent s :: ReferenceTimestampMeta
s = IO Meta -> m Meta
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Meta -> m Meta) -> IO Meta -> m Meta
forall a b. (a -> b) -> a -> b
$ ReferenceTimestampMeta
-> (Ptr ReferenceTimestampMeta -> IO Meta) -> IO Meta
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr ReferenceTimestampMeta
s ((Ptr ReferenceTimestampMeta -> IO Meta) -> IO Meta)
-> (Ptr ReferenceTimestampMeta -> IO Meta) -> IO Meta
forall a b. (a -> b) -> a -> b
$ \ptr :: Ptr ReferenceTimestampMeta
ptr -> do
    let val :: Ptr Meta
val = Ptr ReferenceTimestampMeta
ptr Ptr ReferenceTimestampMeta -> Int -> Ptr Meta
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 0 :: (Ptr Gst.Meta.Meta)
    Meta
val' <- ((ManagedPtr Meta -> Meta) -> Ptr Meta -> IO Meta
forall a.
(HasCallStack, WrappedPtr a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
newPtr ManagedPtr Meta -> Meta
Gst.Meta.Meta) Ptr Meta
val
    Meta -> IO Meta
forall (m :: * -> *) a. Monad m => a -> m a
return Meta
val'

#if defined(ENABLE_OVERLOADING)
data ReferenceTimestampMetaParentFieldInfo
instance AttrInfo ReferenceTimestampMetaParentFieldInfo where
    type AttrBaseTypeConstraint ReferenceTimestampMetaParentFieldInfo = (~) ReferenceTimestampMeta
    type AttrAllowedOps ReferenceTimestampMetaParentFieldInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint ReferenceTimestampMetaParentFieldInfo = (~) (Ptr Gst.Meta.Meta)
    type AttrTransferTypeConstraint ReferenceTimestampMetaParentFieldInfo = (~)(Ptr Gst.Meta.Meta)
    type AttrTransferType ReferenceTimestampMetaParentFieldInfo = (Ptr Gst.Meta.Meta)
    type AttrGetType ReferenceTimestampMetaParentFieldInfo = Gst.Meta.Meta
    type AttrLabel ReferenceTimestampMetaParentFieldInfo = "parent"
    type AttrOrigin ReferenceTimestampMetaParentFieldInfo = ReferenceTimestampMeta
    attrGet = getReferenceTimestampMetaParent
    attrSet = undefined
    attrConstruct = undefined
    attrClear = undefined
    attrTransfer = undefined

referenceTimestampMeta_parent :: AttrLabelProxy "parent"
referenceTimestampMeta_parent = AttrLabelProxy

#endif


-- | Get the value of the “@reference@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' referenceTimestampMeta #reference
-- @
getReferenceTimestampMetaReference :: MonadIO m => ReferenceTimestampMeta -> m (Maybe Gst.Caps.Caps)
getReferenceTimestampMetaReference :: ReferenceTimestampMeta -> m (Maybe Caps)
getReferenceTimestampMetaReference s :: ReferenceTimestampMeta
s = IO (Maybe Caps) -> m (Maybe Caps)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Maybe Caps) -> m (Maybe Caps))
-> IO (Maybe Caps) -> m (Maybe Caps)
forall a b. (a -> b) -> a -> b
$ ReferenceTimestampMeta
-> (Ptr ReferenceTimestampMeta -> IO (Maybe Caps))
-> IO (Maybe Caps)
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr ReferenceTimestampMeta
s ((Ptr ReferenceTimestampMeta -> IO (Maybe Caps))
 -> IO (Maybe Caps))
-> (Ptr ReferenceTimestampMeta -> IO (Maybe Caps))
-> IO (Maybe Caps)
forall a b. (a -> b) -> a -> b
$ \ptr :: Ptr ReferenceTimestampMeta
ptr -> do
    Ptr Caps
val <- Ptr (Ptr Caps) -> IO (Ptr Caps)
forall a. Storable a => Ptr a -> IO a
peek (Ptr ReferenceTimestampMeta
ptr Ptr ReferenceTimestampMeta -> Int -> Ptr (Ptr Caps)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16) :: IO (Ptr Gst.Caps.Caps)
    Maybe Caps
result <- Ptr Caps -> (Ptr Caps -> IO Caps) -> IO (Maybe Caps)
forall a b. Ptr a -> (Ptr a -> IO b) -> IO (Maybe b)
SP.convertIfNonNull Ptr Caps
val ((Ptr Caps -> IO Caps) -> IO (Maybe Caps))
-> (Ptr Caps -> IO Caps) -> IO (Maybe Caps)
forall a b. (a -> b) -> a -> b
$ \val' :: Ptr Caps
val' -> do
        Caps
val'' <- ((ManagedPtr Caps -> Caps) -> Ptr Caps -> IO Caps
forall a.
(HasCallStack, BoxedObject a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
newBoxed ManagedPtr Caps -> Caps
Gst.Caps.Caps) Ptr Caps
val'
        Caps -> IO Caps
forall (m :: * -> *) a. Monad m => a -> m a
return Caps
val''
    Maybe Caps -> IO (Maybe Caps)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe Caps
result

-- | Set the value of the “@reference@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' referenceTimestampMeta [ #reference 'Data.GI.Base.Attributes.:=' value ]
-- @
setReferenceTimestampMetaReference :: MonadIO m => ReferenceTimestampMeta -> Ptr Gst.Caps.Caps -> m ()
setReferenceTimestampMetaReference :: ReferenceTimestampMeta -> Ptr Caps -> m ()
setReferenceTimestampMetaReference s :: ReferenceTimestampMeta
s val :: Ptr Caps
val = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ ReferenceTimestampMeta
-> (Ptr ReferenceTimestampMeta -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr ReferenceTimestampMeta
s ((Ptr ReferenceTimestampMeta -> IO ()) -> IO ())
-> (Ptr ReferenceTimestampMeta -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \ptr :: Ptr ReferenceTimestampMeta
ptr -> do
    Ptr (Ptr Caps) -> Ptr Caps -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr ReferenceTimestampMeta
ptr Ptr ReferenceTimestampMeta -> Int -> Ptr (Ptr Caps)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16) (Ptr Caps
val :: Ptr Gst.Caps.Caps)

-- | Set the value of the “@reference@” 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' #reference
-- @
clearReferenceTimestampMetaReference :: MonadIO m => ReferenceTimestampMeta -> m ()
clearReferenceTimestampMetaReference :: ReferenceTimestampMeta -> m ()
clearReferenceTimestampMetaReference s :: ReferenceTimestampMeta
s = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ ReferenceTimestampMeta
-> (Ptr ReferenceTimestampMeta -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr ReferenceTimestampMeta
s ((Ptr ReferenceTimestampMeta -> IO ()) -> IO ())
-> (Ptr ReferenceTimestampMeta -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \ptr :: Ptr ReferenceTimestampMeta
ptr -> do
    Ptr (Ptr Caps) -> Ptr Caps -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr ReferenceTimestampMeta
ptr Ptr ReferenceTimestampMeta -> Int -> Ptr (Ptr Caps)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 16) (Ptr Caps
forall a. Ptr a
FP.nullPtr :: Ptr Gst.Caps.Caps)

#if defined(ENABLE_OVERLOADING)
data ReferenceTimestampMetaReferenceFieldInfo
instance AttrInfo ReferenceTimestampMetaReferenceFieldInfo where
    type AttrBaseTypeConstraint ReferenceTimestampMetaReferenceFieldInfo = (~) ReferenceTimestampMeta
    type AttrAllowedOps ReferenceTimestampMetaReferenceFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint ReferenceTimestampMetaReferenceFieldInfo = (~) (Ptr Gst.Caps.Caps)
    type AttrTransferTypeConstraint ReferenceTimestampMetaReferenceFieldInfo = (~)(Ptr Gst.Caps.Caps)
    type AttrTransferType ReferenceTimestampMetaReferenceFieldInfo = (Ptr Gst.Caps.Caps)
    type AttrGetType ReferenceTimestampMetaReferenceFieldInfo = Maybe Gst.Caps.Caps
    type AttrLabel ReferenceTimestampMetaReferenceFieldInfo = "reference"
    type AttrOrigin ReferenceTimestampMetaReferenceFieldInfo = ReferenceTimestampMeta
    attrGet = getReferenceTimestampMetaReference
    attrSet = setReferenceTimestampMetaReference
    attrConstruct = undefined
    attrClear = clearReferenceTimestampMetaReference
    attrTransfer _ v = do
        return v

referenceTimestampMeta_reference :: AttrLabelProxy "reference"
referenceTimestampMeta_reference = AttrLabelProxy

#endif


-- | Get the value of the “@timestamp@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' referenceTimestampMeta #timestamp
-- @
getReferenceTimestampMetaTimestamp :: MonadIO m => ReferenceTimestampMeta -> m Word64
getReferenceTimestampMetaTimestamp :: ReferenceTimestampMeta -> m Word64
getReferenceTimestampMetaTimestamp s :: ReferenceTimestampMeta
s = IO Word64 -> m Word64
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Word64 -> m Word64) -> IO Word64 -> m Word64
forall a b. (a -> b) -> a -> b
$ ReferenceTimestampMeta
-> (Ptr ReferenceTimestampMeta -> IO Word64) -> IO Word64
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr ReferenceTimestampMeta
s ((Ptr ReferenceTimestampMeta -> IO Word64) -> IO Word64)
-> (Ptr ReferenceTimestampMeta -> IO Word64) -> IO Word64
forall a b. (a -> b) -> a -> b
$ \ptr :: Ptr ReferenceTimestampMeta
ptr -> do
    Word64
val <- Ptr Word64 -> IO Word64
forall a. Storable a => Ptr a -> IO a
peek (Ptr ReferenceTimestampMeta
ptr Ptr ReferenceTimestampMeta -> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 24) :: IO Word64
    Word64 -> IO Word64
forall (m :: * -> *) a. Monad m => a -> m a
return Word64
val

-- | Set the value of the “@timestamp@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' referenceTimestampMeta [ #timestamp 'Data.GI.Base.Attributes.:=' value ]
-- @
setReferenceTimestampMetaTimestamp :: MonadIO m => ReferenceTimestampMeta -> Word64 -> m ()
setReferenceTimestampMetaTimestamp :: ReferenceTimestampMeta -> Word64 -> m ()
setReferenceTimestampMetaTimestamp s :: ReferenceTimestampMeta
s val :: Word64
val = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ ReferenceTimestampMeta
-> (Ptr ReferenceTimestampMeta -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr ReferenceTimestampMeta
s ((Ptr ReferenceTimestampMeta -> IO ()) -> IO ())
-> (Ptr ReferenceTimestampMeta -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \ptr :: Ptr ReferenceTimestampMeta
ptr -> do
    Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr ReferenceTimestampMeta
ptr Ptr ReferenceTimestampMeta -> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 24) (Word64
val :: Word64)

#if defined(ENABLE_OVERLOADING)
data ReferenceTimestampMetaTimestampFieldInfo
instance AttrInfo ReferenceTimestampMetaTimestampFieldInfo where
    type AttrBaseTypeConstraint ReferenceTimestampMetaTimestampFieldInfo = (~) ReferenceTimestampMeta
    type AttrAllowedOps ReferenceTimestampMetaTimestampFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint ReferenceTimestampMetaTimestampFieldInfo = (~) Word64
    type AttrTransferTypeConstraint ReferenceTimestampMetaTimestampFieldInfo = (~)Word64
    type AttrTransferType ReferenceTimestampMetaTimestampFieldInfo = Word64
    type AttrGetType ReferenceTimestampMetaTimestampFieldInfo = Word64
    type AttrLabel ReferenceTimestampMetaTimestampFieldInfo = "timestamp"
    type AttrOrigin ReferenceTimestampMetaTimestampFieldInfo = ReferenceTimestampMeta
    attrGet = getReferenceTimestampMetaTimestamp
    attrSet = setReferenceTimestampMetaTimestamp
    attrConstruct = undefined
    attrClear = undefined
    attrTransfer _ v = do
        return v

referenceTimestampMeta_timestamp :: AttrLabelProxy "timestamp"
referenceTimestampMeta_timestamp = AttrLabelProxy

#endif


-- | Get the value of the “@duration@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' referenceTimestampMeta #duration
-- @
getReferenceTimestampMetaDuration :: MonadIO m => ReferenceTimestampMeta -> m Word64
getReferenceTimestampMetaDuration :: ReferenceTimestampMeta -> m Word64
getReferenceTimestampMetaDuration s :: ReferenceTimestampMeta
s = IO Word64 -> m Word64
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Word64 -> m Word64) -> IO Word64 -> m Word64
forall a b. (a -> b) -> a -> b
$ ReferenceTimestampMeta
-> (Ptr ReferenceTimestampMeta -> IO Word64) -> IO Word64
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr ReferenceTimestampMeta
s ((Ptr ReferenceTimestampMeta -> IO Word64) -> IO Word64)
-> (Ptr ReferenceTimestampMeta -> IO Word64) -> IO Word64
forall a b. (a -> b) -> a -> b
$ \ptr :: Ptr ReferenceTimestampMeta
ptr -> do
    Word64
val <- Ptr Word64 -> IO Word64
forall a. Storable a => Ptr a -> IO a
peek (Ptr ReferenceTimestampMeta
ptr Ptr ReferenceTimestampMeta -> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 32) :: IO Word64
    Word64 -> IO Word64
forall (m :: * -> *) a. Monad m => a -> m a
return Word64
val

-- | Set the value of the “@duration@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' referenceTimestampMeta [ #duration 'Data.GI.Base.Attributes.:=' value ]
-- @
setReferenceTimestampMetaDuration :: MonadIO m => ReferenceTimestampMeta -> Word64 -> m ()
setReferenceTimestampMetaDuration :: ReferenceTimestampMeta -> Word64 -> m ()
setReferenceTimestampMetaDuration s :: ReferenceTimestampMeta
s val :: Word64
val = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ ReferenceTimestampMeta
-> (Ptr ReferenceTimestampMeta -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr ReferenceTimestampMeta
s ((Ptr ReferenceTimestampMeta -> IO ()) -> IO ())
-> (Ptr ReferenceTimestampMeta -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \ptr :: Ptr ReferenceTimestampMeta
ptr -> do
    Ptr Word64 -> Word64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr ReferenceTimestampMeta
ptr Ptr ReferenceTimestampMeta -> Int -> Ptr Word64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` 32) (Word64
val :: Word64)

#if defined(ENABLE_OVERLOADING)
data ReferenceTimestampMetaDurationFieldInfo
instance AttrInfo ReferenceTimestampMetaDurationFieldInfo where
    type AttrBaseTypeConstraint ReferenceTimestampMetaDurationFieldInfo = (~) ReferenceTimestampMeta
    type AttrAllowedOps ReferenceTimestampMetaDurationFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint ReferenceTimestampMetaDurationFieldInfo = (~) Word64
    type AttrTransferTypeConstraint ReferenceTimestampMetaDurationFieldInfo = (~)Word64
    type AttrTransferType ReferenceTimestampMetaDurationFieldInfo = Word64
    type AttrGetType ReferenceTimestampMetaDurationFieldInfo = Word64
    type AttrLabel ReferenceTimestampMetaDurationFieldInfo = "duration"
    type AttrOrigin ReferenceTimestampMetaDurationFieldInfo = ReferenceTimestampMeta
    attrGet = getReferenceTimestampMetaDuration
    attrSet = setReferenceTimestampMetaDuration
    attrConstruct = undefined
    attrClear = undefined
    attrTransfer _ v = do
        return v

referenceTimestampMeta_duration :: AttrLabelProxy "duration"
referenceTimestampMeta_duration = AttrLabelProxy

#endif



#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList ReferenceTimestampMeta
type instance O.AttributeList ReferenceTimestampMeta = ReferenceTimestampMetaAttributeList
type ReferenceTimestampMetaAttributeList = ('[ '("parent", ReferenceTimestampMetaParentFieldInfo), '("reference", ReferenceTimestampMetaReferenceFieldInfo), '("timestamp", ReferenceTimestampMetaTimestampFieldInfo), '("duration", ReferenceTimestampMetaDurationFieldInfo)] :: [(Symbol, *)])
#endif

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

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

-- | Get the global t'GI.Gst.Structs.MetaInfo.MetaInfo' describing  the t'GI.Gst.Structs.ReferenceTimestampMeta.ReferenceTimestampMeta' meta.
-- 
-- /Since: 1.14/
referenceTimestampMetaGetInfo ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    m Gst.MetaInfo.MetaInfo
    -- ^ __Returns:__ The t'GI.Gst.Structs.MetaInfo.MetaInfo'
referenceTimestampMetaGetInfo :: m MetaInfo
referenceTimestampMetaGetInfo  = IO MetaInfo -> m MetaInfo
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO MetaInfo -> m MetaInfo) -> IO MetaInfo -> m MetaInfo
forall a b. (a -> b) -> a -> b
$ do
    Ptr MetaInfo
result <- IO (Ptr MetaInfo)
gst_reference_timestamp_meta_get_info
    Text -> Ptr MetaInfo -> IO ()
forall a. HasCallStack => Text -> Ptr a -> IO ()
checkUnexpectedReturnNULL "referenceTimestampMetaGetInfo" Ptr MetaInfo
result
    MetaInfo
result' <- ((ManagedPtr MetaInfo -> MetaInfo) -> Ptr MetaInfo -> IO MetaInfo
forall a.
(HasCallStack, WrappedPtr a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
newPtr ManagedPtr MetaInfo -> MetaInfo
Gst.MetaInfo.MetaInfo) Ptr MetaInfo
result
    MetaInfo -> IO MetaInfo
forall (m :: * -> *) a. Monad m => a -> m a
return MetaInfo
result'

#if defined(ENABLE_OVERLOADING)
#endif

#if defined(ENABLE_OVERLOADING)
type family ResolveReferenceTimestampMetaMethod (t :: Symbol) (o :: *) :: * where
    ResolveReferenceTimestampMetaMethod l o = O.MethodResolutionFailed l o

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

#endif