{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc) GstVideoDither provides implementations of several dithering algorithms that can be applied to lines of video pixels to quantize and dither them. -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.GstVideo.Structs.VideoDither ( -- * Exported types VideoDither(..) , noVideoDither , -- * Methods -- ** free #method:free# #if ENABLE_OVERLOADING VideoDitherFreeMethodInfo , #endif videoDitherFree , -- ** line #method:line# #if ENABLE_OVERLOADING VideoDitherLineMethodInfo , #endif videoDitherLine , ) 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 -- | Memory-managed wrapper type. newtype VideoDither = VideoDither (ManagedPtr VideoDither) -- XXX Wrapping a foreign struct/union with no known destructor or size, leak? instance WrappedPtr VideoDither where wrappedPtrCalloc = return nullPtr wrappedPtrCopy = return wrappedPtrFree = Nothing -- | A convenience alias for `Nothing` :: `Maybe` `VideoDither`. noVideoDither :: Maybe VideoDither noVideoDither = Nothing #if ENABLE_OVERLOADING instance O.HasAttributeList VideoDither type instance O.AttributeList VideoDither = VideoDitherAttributeList type VideoDitherAttributeList = ('[ ] :: [(Symbol, *)]) #endif -- method VideoDither::free -- method type : OrdinaryMethod -- Args : [Arg {argCName = "dither", argType = TInterface (Name {namespace = "GstVideo", name = "VideoDither"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstVideoDither", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "gst_video_dither_free" gst_video_dither_free :: Ptr VideoDither -> -- dither : TInterface (Name {namespace = "GstVideo", name = "VideoDither"}) IO () {- | Free /@dither@/ -} videoDitherFree :: (B.CallStack.HasCallStack, MonadIO m) => VideoDither {- ^ /@dither@/: a 'GI.GstVideo.Structs.VideoDither.VideoDither' -} -> m () videoDitherFree dither = liftIO $ do dither' <- unsafeManagedPtrGetPtr dither gst_video_dither_free dither' touchManagedPtr dither return () #if ENABLE_OVERLOADING data VideoDitherFreeMethodInfo instance (signature ~ (m ()), MonadIO m) => O.MethodInfo VideoDitherFreeMethodInfo VideoDither signature where overloadedMethod _ = videoDitherFree #endif -- method VideoDither::line -- method type : OrdinaryMethod -- Args : [Arg {argCName = "dither", argType = TInterface (Name {namespace = "GstVideo", name = "VideoDither"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstVideoDither", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "line", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "pointer to the pixels of the line", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "x", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "x coordinate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "y", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "y coordinate", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "width", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the width", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Nothing -- throws : False -- Skip return : False foreign import ccall "gst_video_dither_line" gst_video_dither_line :: Ptr VideoDither -> -- dither : TInterface (Name {namespace = "GstVideo", name = "VideoDither"}) Ptr () -> -- line : TBasicType TPtr Word32 -> -- x : TBasicType TUInt Word32 -> -- y : TBasicType TUInt Word32 -> -- width : TBasicType TUInt IO () {- | Dither /@width@/ pixels starting from offset /@x@/ in /@line@/ using /@dither@/. /@y@/ is the line number of /@line@/ in the output image. -} videoDitherLine :: (B.CallStack.HasCallStack, MonadIO m) => VideoDither {- ^ /@dither@/: a 'GI.GstVideo.Structs.VideoDither.VideoDither' -} -> Ptr () {- ^ /@line@/: pointer to the pixels of the line -} -> Word32 {- ^ /@x@/: x coordinate -} -> Word32 {- ^ /@y@/: y coordinate -} -> Word32 {- ^ /@width@/: the width -} -> m () videoDitherLine dither line x y width = liftIO $ do dither' <- unsafeManagedPtrGetPtr dither gst_video_dither_line dither' line x y width touchManagedPtr dither return () #if ENABLE_OVERLOADING data VideoDitherLineMethodInfo instance (signature ~ (Ptr () -> Word32 -> Word32 -> Word32 -> m ()), MonadIO m) => O.MethodInfo VideoDitherLineMethodInfo VideoDither signature where overloadedMethod _ = videoDitherLine #endif #if ENABLE_OVERLOADING type family ResolveVideoDitherMethod (t :: Symbol) (o :: *) :: * where ResolveVideoDitherMethod "free" o = VideoDitherFreeMethodInfo ResolveVideoDitherMethod "line" o = VideoDitherLineMethodInfo ResolveVideoDitherMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveVideoDitherMethod t VideoDither, O.MethodInfo info VideoDither p) => OL.IsLabel t (VideoDither -> 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