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

Structure describing the chromaticity coordinates of an RGB system. These
values can be used to construct a matrix to transform RGB to and from the
XYZ colorspace.
-}

module GI.GstVideo.Structs.VideoColorPrimariesInfo
    ( 

-- * Exported types
    VideoColorPrimariesInfo(..)             ,
    newZeroVideoColorPrimariesInfo          ,
    noVideoColorPrimariesInfo               ,


 -- * Properties
-- ** bx #attr:bx#
    getVideoColorPrimariesInfoBx            ,
    setVideoColorPrimariesInfoBx            ,
    videoColorPrimariesInfo_bx              ,


-- ** by #attr:by#
    getVideoColorPrimariesInfoBy            ,
    setVideoColorPrimariesInfoBy            ,
    videoColorPrimariesInfo_by              ,


-- ** gx #attr:gx#
    getVideoColorPrimariesInfoGx            ,
    setVideoColorPrimariesInfoGx            ,
    videoColorPrimariesInfo_gx              ,


-- ** gy #attr:gy#
    getVideoColorPrimariesInfoGy            ,
    setVideoColorPrimariesInfoGy            ,
    videoColorPrimariesInfo_gy              ,


-- ** primaries #attr:primaries#
    getVideoColorPrimariesInfoPrimaries     ,
    setVideoColorPrimariesInfoPrimaries     ,
    videoColorPrimariesInfo_primaries       ,


-- ** rx #attr:rx#
    getVideoColorPrimariesInfoRx            ,
    setVideoColorPrimariesInfoRx            ,
    videoColorPrimariesInfo_rx              ,


-- ** ry #attr:ry#
    getVideoColorPrimariesInfoRy            ,
    setVideoColorPrimariesInfoRy            ,
    videoColorPrimariesInfo_ry              ,


-- ** wx #attr:wx#
    getVideoColorPrimariesInfoWx            ,
    setVideoColorPrimariesInfoWx            ,
    videoColorPrimariesInfo_wx              ,


-- ** wy #attr:wy#
    getVideoColorPrimariesInfoWy            ,
    setVideoColorPrimariesInfoWy            ,
    videoColorPrimariesInfo_wy              ,




    ) 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.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
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 {-# SOURCE #-} qualified GI.GstVideo.Enums as GstVideo.Enums

newtype VideoColorPrimariesInfo = VideoColorPrimariesInfo (ManagedPtr VideoColorPrimariesInfo)
instance WrappedPtr VideoColorPrimariesInfo where
    wrappedPtrCalloc = callocBytes 72
    wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 72 >=> wrapPtr VideoColorPrimariesInfo)
    wrappedPtrFree = Just ptr_to_g_free

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

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


noVideoColorPrimariesInfo :: Maybe VideoColorPrimariesInfo
noVideoColorPrimariesInfo = Nothing

getVideoColorPrimariesInfoPrimaries :: MonadIO m => VideoColorPrimariesInfo -> m GstVideo.Enums.VideoColorPrimaries
getVideoColorPrimariesInfoPrimaries s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO CUInt
    let val' = (toEnum . fromIntegral) val
    return val'

setVideoColorPrimariesInfoPrimaries :: MonadIO m => VideoColorPrimariesInfo -> GstVideo.Enums.VideoColorPrimaries -> m ()
setVideoColorPrimariesInfoPrimaries s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = (fromIntegral . fromEnum) val
    poke (ptr `plusPtr` 0) (val' :: CUInt)

data VideoColorPrimariesInfoPrimariesFieldInfo
instance AttrInfo VideoColorPrimariesInfoPrimariesFieldInfo where
    type AttrAllowedOps VideoColorPrimariesInfoPrimariesFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint VideoColorPrimariesInfoPrimariesFieldInfo = (~) GstVideo.Enums.VideoColorPrimaries
    type AttrBaseTypeConstraint VideoColorPrimariesInfoPrimariesFieldInfo = (~) VideoColorPrimariesInfo
    type AttrGetType VideoColorPrimariesInfoPrimariesFieldInfo = GstVideo.Enums.VideoColorPrimaries
    type AttrLabel VideoColorPrimariesInfoPrimariesFieldInfo = "primaries"
    type AttrOrigin VideoColorPrimariesInfoPrimariesFieldInfo = VideoColorPrimariesInfo
    attrGet _ = getVideoColorPrimariesInfoPrimaries
    attrSet _ = setVideoColorPrimariesInfoPrimaries
    attrConstruct = undefined
    attrClear _ = undefined

videoColorPrimariesInfo_primaries :: AttrLabelProxy "primaries"
videoColorPrimariesInfo_primaries = AttrLabelProxy


getVideoColorPrimariesInfoWx :: MonadIO m => VideoColorPrimariesInfo -> m Double
getVideoColorPrimariesInfoWx s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 8) :: IO CDouble
    let val' = realToFrac val
    return val'

setVideoColorPrimariesInfoWx :: MonadIO m => VideoColorPrimariesInfo -> Double -> m ()
setVideoColorPrimariesInfoWx s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = realToFrac val
    poke (ptr `plusPtr` 8) (val' :: CDouble)

data VideoColorPrimariesInfoWxFieldInfo
instance AttrInfo VideoColorPrimariesInfoWxFieldInfo where
    type AttrAllowedOps VideoColorPrimariesInfoWxFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint VideoColorPrimariesInfoWxFieldInfo = (~) Double
    type AttrBaseTypeConstraint VideoColorPrimariesInfoWxFieldInfo = (~) VideoColorPrimariesInfo
    type AttrGetType VideoColorPrimariesInfoWxFieldInfo = Double
    type AttrLabel VideoColorPrimariesInfoWxFieldInfo = "Wx"
    type AttrOrigin VideoColorPrimariesInfoWxFieldInfo = VideoColorPrimariesInfo
    attrGet _ = getVideoColorPrimariesInfoWx
    attrSet _ = setVideoColorPrimariesInfoWx
    attrConstruct = undefined
    attrClear _ = undefined

videoColorPrimariesInfo_wx :: AttrLabelProxy "wx"
videoColorPrimariesInfo_wx = AttrLabelProxy


getVideoColorPrimariesInfoWy :: MonadIO m => VideoColorPrimariesInfo -> m Double
getVideoColorPrimariesInfoWy s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 16) :: IO CDouble
    let val' = realToFrac val
    return val'

setVideoColorPrimariesInfoWy :: MonadIO m => VideoColorPrimariesInfo -> Double -> m ()
setVideoColorPrimariesInfoWy s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = realToFrac val
    poke (ptr `plusPtr` 16) (val' :: CDouble)

data VideoColorPrimariesInfoWyFieldInfo
instance AttrInfo VideoColorPrimariesInfoWyFieldInfo where
    type AttrAllowedOps VideoColorPrimariesInfoWyFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint VideoColorPrimariesInfoWyFieldInfo = (~) Double
    type AttrBaseTypeConstraint VideoColorPrimariesInfoWyFieldInfo = (~) VideoColorPrimariesInfo
    type AttrGetType VideoColorPrimariesInfoWyFieldInfo = Double
    type AttrLabel VideoColorPrimariesInfoWyFieldInfo = "Wy"
    type AttrOrigin VideoColorPrimariesInfoWyFieldInfo = VideoColorPrimariesInfo
    attrGet _ = getVideoColorPrimariesInfoWy
    attrSet _ = setVideoColorPrimariesInfoWy
    attrConstruct = undefined
    attrClear _ = undefined

videoColorPrimariesInfo_wy :: AttrLabelProxy "wy"
videoColorPrimariesInfo_wy = AttrLabelProxy


getVideoColorPrimariesInfoRx :: MonadIO m => VideoColorPrimariesInfo -> m Double
getVideoColorPrimariesInfoRx s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 24) :: IO CDouble
    let val' = realToFrac val
    return val'

setVideoColorPrimariesInfoRx :: MonadIO m => VideoColorPrimariesInfo -> Double -> m ()
setVideoColorPrimariesInfoRx s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = realToFrac val
    poke (ptr `plusPtr` 24) (val' :: CDouble)

data VideoColorPrimariesInfoRxFieldInfo
instance AttrInfo VideoColorPrimariesInfoRxFieldInfo where
    type AttrAllowedOps VideoColorPrimariesInfoRxFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint VideoColorPrimariesInfoRxFieldInfo = (~) Double
    type AttrBaseTypeConstraint VideoColorPrimariesInfoRxFieldInfo = (~) VideoColorPrimariesInfo
    type AttrGetType VideoColorPrimariesInfoRxFieldInfo = Double
    type AttrLabel VideoColorPrimariesInfoRxFieldInfo = "Rx"
    type AttrOrigin VideoColorPrimariesInfoRxFieldInfo = VideoColorPrimariesInfo
    attrGet _ = getVideoColorPrimariesInfoRx
    attrSet _ = setVideoColorPrimariesInfoRx
    attrConstruct = undefined
    attrClear _ = undefined

videoColorPrimariesInfo_rx :: AttrLabelProxy "rx"
videoColorPrimariesInfo_rx = AttrLabelProxy


getVideoColorPrimariesInfoRy :: MonadIO m => VideoColorPrimariesInfo -> m Double
getVideoColorPrimariesInfoRy s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 32) :: IO CDouble
    let val' = realToFrac val
    return val'

setVideoColorPrimariesInfoRy :: MonadIO m => VideoColorPrimariesInfo -> Double -> m ()
setVideoColorPrimariesInfoRy s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = realToFrac val
    poke (ptr `plusPtr` 32) (val' :: CDouble)

data VideoColorPrimariesInfoRyFieldInfo
instance AttrInfo VideoColorPrimariesInfoRyFieldInfo where
    type AttrAllowedOps VideoColorPrimariesInfoRyFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint VideoColorPrimariesInfoRyFieldInfo = (~) Double
    type AttrBaseTypeConstraint VideoColorPrimariesInfoRyFieldInfo = (~) VideoColorPrimariesInfo
    type AttrGetType VideoColorPrimariesInfoRyFieldInfo = Double
    type AttrLabel VideoColorPrimariesInfoRyFieldInfo = "Ry"
    type AttrOrigin VideoColorPrimariesInfoRyFieldInfo = VideoColorPrimariesInfo
    attrGet _ = getVideoColorPrimariesInfoRy
    attrSet _ = setVideoColorPrimariesInfoRy
    attrConstruct = undefined
    attrClear _ = undefined

videoColorPrimariesInfo_ry :: AttrLabelProxy "ry"
videoColorPrimariesInfo_ry = AttrLabelProxy


getVideoColorPrimariesInfoGx :: MonadIO m => VideoColorPrimariesInfo -> m Double
getVideoColorPrimariesInfoGx s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 40) :: IO CDouble
    let val' = realToFrac val
    return val'

setVideoColorPrimariesInfoGx :: MonadIO m => VideoColorPrimariesInfo -> Double -> m ()
setVideoColorPrimariesInfoGx s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = realToFrac val
    poke (ptr `plusPtr` 40) (val' :: CDouble)

data VideoColorPrimariesInfoGxFieldInfo
instance AttrInfo VideoColorPrimariesInfoGxFieldInfo where
    type AttrAllowedOps VideoColorPrimariesInfoGxFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint VideoColorPrimariesInfoGxFieldInfo = (~) Double
    type AttrBaseTypeConstraint VideoColorPrimariesInfoGxFieldInfo = (~) VideoColorPrimariesInfo
    type AttrGetType VideoColorPrimariesInfoGxFieldInfo = Double
    type AttrLabel VideoColorPrimariesInfoGxFieldInfo = "Gx"
    type AttrOrigin VideoColorPrimariesInfoGxFieldInfo = VideoColorPrimariesInfo
    attrGet _ = getVideoColorPrimariesInfoGx
    attrSet _ = setVideoColorPrimariesInfoGx
    attrConstruct = undefined
    attrClear _ = undefined

videoColorPrimariesInfo_gx :: AttrLabelProxy "gx"
videoColorPrimariesInfo_gx = AttrLabelProxy


getVideoColorPrimariesInfoGy :: MonadIO m => VideoColorPrimariesInfo -> m Double
getVideoColorPrimariesInfoGy s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 48) :: IO CDouble
    let val' = realToFrac val
    return val'

setVideoColorPrimariesInfoGy :: MonadIO m => VideoColorPrimariesInfo -> Double -> m ()
setVideoColorPrimariesInfoGy s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = realToFrac val
    poke (ptr `plusPtr` 48) (val' :: CDouble)

data VideoColorPrimariesInfoGyFieldInfo
instance AttrInfo VideoColorPrimariesInfoGyFieldInfo where
    type AttrAllowedOps VideoColorPrimariesInfoGyFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint VideoColorPrimariesInfoGyFieldInfo = (~) Double
    type AttrBaseTypeConstraint VideoColorPrimariesInfoGyFieldInfo = (~) VideoColorPrimariesInfo
    type AttrGetType VideoColorPrimariesInfoGyFieldInfo = Double
    type AttrLabel VideoColorPrimariesInfoGyFieldInfo = "Gy"
    type AttrOrigin VideoColorPrimariesInfoGyFieldInfo = VideoColorPrimariesInfo
    attrGet _ = getVideoColorPrimariesInfoGy
    attrSet _ = setVideoColorPrimariesInfoGy
    attrConstruct = undefined
    attrClear _ = undefined

videoColorPrimariesInfo_gy :: AttrLabelProxy "gy"
videoColorPrimariesInfo_gy = AttrLabelProxy


getVideoColorPrimariesInfoBx :: MonadIO m => VideoColorPrimariesInfo -> m Double
getVideoColorPrimariesInfoBx s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 56) :: IO CDouble
    let val' = realToFrac val
    return val'

setVideoColorPrimariesInfoBx :: MonadIO m => VideoColorPrimariesInfo -> Double -> m ()
setVideoColorPrimariesInfoBx s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = realToFrac val
    poke (ptr `plusPtr` 56) (val' :: CDouble)

data VideoColorPrimariesInfoBxFieldInfo
instance AttrInfo VideoColorPrimariesInfoBxFieldInfo where
    type AttrAllowedOps VideoColorPrimariesInfoBxFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint VideoColorPrimariesInfoBxFieldInfo = (~) Double
    type AttrBaseTypeConstraint VideoColorPrimariesInfoBxFieldInfo = (~) VideoColorPrimariesInfo
    type AttrGetType VideoColorPrimariesInfoBxFieldInfo = Double
    type AttrLabel VideoColorPrimariesInfoBxFieldInfo = "Bx"
    type AttrOrigin VideoColorPrimariesInfoBxFieldInfo = VideoColorPrimariesInfo
    attrGet _ = getVideoColorPrimariesInfoBx
    attrSet _ = setVideoColorPrimariesInfoBx
    attrConstruct = undefined
    attrClear _ = undefined

videoColorPrimariesInfo_bx :: AttrLabelProxy "bx"
videoColorPrimariesInfo_bx = AttrLabelProxy


getVideoColorPrimariesInfoBy :: MonadIO m => VideoColorPrimariesInfo -> m Double
getVideoColorPrimariesInfoBy s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 64) :: IO CDouble
    let val' = realToFrac val
    return val'

setVideoColorPrimariesInfoBy :: MonadIO m => VideoColorPrimariesInfo -> Double -> m ()
setVideoColorPrimariesInfoBy s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = realToFrac val
    poke (ptr `plusPtr` 64) (val' :: CDouble)

data VideoColorPrimariesInfoByFieldInfo
instance AttrInfo VideoColorPrimariesInfoByFieldInfo where
    type AttrAllowedOps VideoColorPrimariesInfoByFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint VideoColorPrimariesInfoByFieldInfo = (~) Double
    type AttrBaseTypeConstraint VideoColorPrimariesInfoByFieldInfo = (~) VideoColorPrimariesInfo
    type AttrGetType VideoColorPrimariesInfoByFieldInfo = Double
    type AttrLabel VideoColorPrimariesInfoByFieldInfo = "By"
    type AttrOrigin VideoColorPrimariesInfoByFieldInfo = VideoColorPrimariesInfo
    attrGet _ = getVideoColorPrimariesInfoBy
    attrSet _ = setVideoColorPrimariesInfoBy
    attrConstruct = undefined
    attrClear _ = undefined

videoColorPrimariesInfo_by :: AttrLabelProxy "by"
videoColorPrimariesInfo_by = AttrLabelProxy



instance O.HasAttributeList VideoColorPrimariesInfo
type instance O.AttributeList VideoColorPrimariesInfo = VideoColorPrimariesInfoAttributeList
type VideoColorPrimariesInfoAttributeList = ('[ '("primaries", VideoColorPrimariesInfoPrimariesFieldInfo), '("wx", VideoColorPrimariesInfoWxFieldInfo), '("wy", VideoColorPrimariesInfoWyFieldInfo), '("rx", VideoColorPrimariesInfoRxFieldInfo), '("ry", VideoColorPrimariesInfoRyFieldInfo), '("gx", VideoColorPrimariesInfoGxFieldInfo), '("gy", VideoColorPrimariesInfoGyFieldInfo), '("bx", VideoColorPrimariesInfoBxFieldInfo), '("by", VideoColorPrimariesInfoByFieldInfo)] :: [(Symbol, *)])

type family ResolveVideoColorPrimariesInfoMethod (t :: Symbol) (o :: *) :: * where
    ResolveVideoColorPrimariesInfoMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveVideoColorPrimariesInfoMethod t VideoColorPrimariesInfo, O.MethodInfo info VideoColorPrimariesInfo p) => O.IsLabelProxy t (VideoColorPrimariesInfo -> p) where
    fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)

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