sdl3-bindgen-sys-0.0.0.1: src/SDL3/Sys/Bindgen/Camera.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE EmptyDataDecls #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MagicHash #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UnboxedTuples #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE NoFieldSelectors #-}
-- | Video capture for the SDL library.
--
-- This API lets apps read input from video sources, like webcams. Camera devices can be enumerated, queried, and opened. Once opened, it will provide SDL_Surface objects as new frames of video come in. These surfaces can be uploaded to an SDL_Texture or processed as pixels in memory.
--
-- Several platforms will alert the user if an app tries to access a camera, and some will present a UI asking the user if your application should be allowed to obtain images at all, which they can deny. A successfully opened camera will not provide images until permission is granted. Applications, after opening a camera device, can see if they were granted access by either polling with the @SDL_GetCameraPermissionState()@ function, or waiting for an SDL_EVENT_CAMERA_DEVICE_APPROVED or SDL_EVENT_CAMERA_DEVICE_DENIED event. Platforms that don\'t have any user approval process will report approval immediately.
--
-- Note that SDL cameras only provide video as individual frames; they will not provide full-motion video encoded in a movie file format, although an app is free to encode the acquired frames into any format it likes. It also does not provide audio from the camera hardware through this API; not only do many webcams not have microphones at all, many people from streamers to people on Zoom calls will want to use a separate microphone regardless of the camera. In any case, recorded audio will be available through SDL\'s audio API no matter what hardware provides the microphone.
--
-- Camera gotchas
--
-- Consumer-level camera hardware tends to take a little while to warm up, once the device has been opened. Generally most camera apps have some sort of UI to take a picture (a button to snap a pic while a preview is showing, some sort of multi-second countdown for the user to pose, like a photo booth), which puts control in the users\' hands, or they are intended to stay on for long times (Pokemon Go, etc).
--
-- It\'s not uncommon that a newly-opened camera will provide a couple of completely black frames, maybe followed by some under-exposed images. If taking a single frame automatically, or recording video from a camera\'s input without the user initiating it from a preview, it could be wise to drop the first several frames (if not the first several /seconds/ worth of frames!) before using images from a camera. This is a unique ID for a camera device for the time it is connected to the system, and is never reused for the lifetime of the application.
--
-- If the device is disconnected and reconnected, it will get a new ID.
--
-- The value 0 is an invalid ID.
--
-- @since 3.2.0
--
-- [See also]: 'sDL_GetCameras'
module SDL3.Sys.Bindgen.Camera (
SDL3.Sys.Bindgen.Camera.SDL_CameraID (..),
SDL3.Sys.Bindgen.Camera.SDL_Camera,
SDL3.Sys.Bindgen.Camera.SDL_CameraSpec (..),
SDL3.Sys.Bindgen.Camera.SDL_CameraPosition (..),
pattern SDL3.Sys.Bindgen.Camera.SDL_CAMERA_POSITION_UNKNOWN,
pattern SDL3.Sys.Bindgen.Camera.SDL_CAMERA_POSITION_FRONT_FACING,
pattern SDL3.Sys.Bindgen.Camera.SDL_CAMERA_POSITION_BACK_FACING,
SDL3.Sys.Bindgen.Camera.SDL_CameraPermissionState (..),
pattern SDL3.Sys.Bindgen.Camera.SDL_CAMERA_PERMISSION_STATE_DENIED,
pattern SDL3.Sys.Bindgen.Camera.SDL_CAMERA_PERMISSION_STATE_PENDING,
pattern SDL3.Sys.Bindgen.Camera.SDL_CAMERA_PERMISSION_STATE_APPROVED,
)
where
import HsBindgen.Runtime.CEnum qualified as CEnum
import HsBindgen.Runtime.HasCField qualified as HasCField
import HsBindgen.Runtime.Marshal qualified as Marshal
import HsBindgen.Runtime.Support qualified as BG
import HsBindgen.Runtime.Support.CompatHasField qualified as BG.CompatHasField
import SDL3.Sys.Bindgen.Pixels qualified
import SDL3.Sys.Bindgen.Stdinc qualified
-- | [C declaration]: @SDL_CameraID@, defined at @SDL3\/SDL_camera.h 95:16@
newtype SDL_CameraID = SDL_CameraID
{ unwrap :: SDL3.Sys.Bindgen.Stdinc.Uint32
}
deriving stock (BG.Generic, Eq, Ord, Read, Show)
deriving newtype
( BG.Bitfield
, BG.Bits
, BG.FiniteBits
, BG.HasFFIType
, BG.Ix
, BG.Prim
, BG.Storable
, Bounded
, Enum
, Integral
, Marshal.ReadRaw
, Marshal.StaticSize
, Marshal.WriteRaw
, Num
, Real
)
instance
(ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
=> BG.CompatHasField.HasField "unwrap" SDL_CameraID ty
where
hasField =
\x0 ->
( \y1 ->
SDL_CameraID{unwrap = y1}
, BG.getField @"unwrap" x0
)
instance
(ty ~ SDL3.Sys.Bindgen.Stdinc.Uint32)
=> BG.HasField "unwrap" (BG.Ptr SDL_CameraID) (BG.Ptr ty)
where
getField = HasCField.fromPtr (BG.Proxy @"unwrap")
instance HasCField.HasCField SDL_CameraID "unwrap" where
type
CFieldType SDL_CameraID "unwrap" =
SDL3.Sys.Bindgen.Stdinc.Uint32
offset# = \_ -> \_ -> 0
-- | The opaque structure used to identify an opened SDL camera.
--
-- @since 3.2.0
--
-- [C declaration]: @struct SDL_Camera@, defined at @SDL3\/SDL_camera.h 102:16@
data SDL_Camera
-- | The details of an output format for a camera device.
--
-- Cameras often support multiple formats; each one will be encapsulated in this struct.
--
-- @since 3.2.0
--
-- [See also]: 'sDL_GetCameraSupportedFormats', 'sDL_GetCameraFormat'
--
-- [C declaration]: @struct SDL_CameraSpec@, defined at @SDL3\/SDL_camera.h 115:16@
data SDL_CameraSpec = SDL_CameraSpec
{ format :: SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
-- ^ Frame format
--
-- [C declaration]: @format@, defined at @SDL3\/SDL_camera.h 117:21@
, colorspace :: SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
-- ^ Frame colorspace
--
-- [C declaration]: @colorspace@, defined at @SDL3\/SDL_camera.h 118:20@
, width :: BG.CInt
-- ^ Frame width
--
-- [C declaration]: @width@, defined at @SDL3\/SDL_camera.h 119:9@
, height :: BG.CInt
-- ^ Frame height
--
-- [C declaration]: @height@, defined at @SDL3\/SDL_camera.h 120:9@
, framerate_numerator :: BG.CInt
-- ^ Frame rate numerator ((num \/ denom) == FPS, (denom \/ num) == duration in seconds)
--
-- [C declaration]: @framerate_numerator@, defined at @SDL3\/SDL_camera.h 121:9@
, framerate_denominator :: BG.CInt
-- ^ Frame rate denominator ((num \/ denom) == FPS, (denom \/ num) == duration in seconds)
--
-- [C declaration]: @framerate_denominator@, defined at @SDL3\/SDL_camera.h 122:9@
}
deriving stock (BG.Generic, Eq, Show)
instance Marshal.StaticSize SDL_CameraSpec where
staticSizeOf = \_ -> (24 :: Int)
staticAlignment = \_ -> (4 :: Int)
instance Marshal.ReadRaw SDL_CameraSpec where
readRaw =
\ptr0 ->
pure SDL_CameraSpec
<*> HasCField.readRaw (BG.Proxy @"format") ptr0
<*> HasCField.readRaw (BG.Proxy @"colorspace") ptr0
<*> HasCField.readRaw (BG.Proxy @"width") ptr0
<*> HasCField.readRaw (BG.Proxy @"height") ptr0
<*> HasCField.readRaw (BG.Proxy @"framerate_numerator") ptr0
<*> HasCField.readRaw (BG.Proxy @"framerate_denominator") ptr0
instance Marshal.WriteRaw SDL_CameraSpec where
writeRaw =
\ptr0 ->
\s1 ->
case s1 of
SDL_CameraSpec
format2
colorspace3
width4
height5
framerate_numerator6
framerate_denominator7 ->
HasCField.writeRaw (BG.Proxy @"format") ptr0 format2
>> HasCField.writeRaw (BG.Proxy @"colorspace") ptr0 colorspace3
>> HasCField.writeRaw (BG.Proxy @"width") ptr0 width4
>> HasCField.writeRaw (BG.Proxy @"height") ptr0 height5
>> HasCField.writeRaw (BG.Proxy @"framerate_numerator") ptr0 framerate_numerator6
>> HasCField.writeRaw (BG.Proxy @"framerate_denominator") ptr0 framerate_denominator7
deriving via Marshal.EquivStorable SDL_CameraSpec instance BG.Storable SDL_CameraSpec
instance
(ty ~ SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat)
=> BG.CompatHasField.HasField "format" SDL_CameraSpec ty
where
hasField =
\x0 ->
( \y1 ->
SDL_CameraSpec
{ format = y1
, colorspace = BG.getField @"colorspace" x0
, width = BG.getField @"width" x0
, height = BG.getField @"height" x0
, framerate_numerator = BG.getField @"framerate_numerator" x0
, framerate_denominator = BG.getField @"framerate_denominator" x0
}
, BG.getField @"format" x0
)
instance
(ty ~ SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat)
=> BG.HasField "format" (BG.Ptr SDL_CameraSpec) (BG.Ptr ty)
where
getField = HasCField.fromPtr (BG.Proxy @"format")
instance HasCField.HasCField SDL_CameraSpec "format" where
type
CFieldType SDL_CameraSpec "format" =
SDL3.Sys.Bindgen.Pixels.SDL_PixelFormat
offset# = \_ -> \_ -> 0
instance
(ty ~ SDL3.Sys.Bindgen.Pixels.SDL_Colorspace)
=> BG.CompatHasField.HasField "colorspace" SDL_CameraSpec ty
where
hasField =
\x0 ->
( \y1 ->
SDL_CameraSpec
{ colorspace = y1
, format = BG.getField @"format" x0
, width = BG.getField @"width" x0
, height = BG.getField @"height" x0
, framerate_numerator = BG.getField @"framerate_numerator" x0
, framerate_denominator = BG.getField @"framerate_denominator" x0
}
, BG.getField @"colorspace" x0
)
instance
(ty ~ SDL3.Sys.Bindgen.Pixels.SDL_Colorspace)
=> BG.HasField "colorspace" (BG.Ptr SDL_CameraSpec) (BG.Ptr ty)
where
getField = HasCField.fromPtr (BG.Proxy @"colorspace")
instance HasCField.HasCField SDL_CameraSpec "colorspace" where
type
CFieldType SDL_CameraSpec "colorspace" =
SDL3.Sys.Bindgen.Pixels.SDL_Colorspace
offset# = \_ -> \_ -> 4
instance
(ty ~ BG.CInt)
=> BG.CompatHasField.HasField "width" SDL_CameraSpec ty
where
hasField =
\x0 ->
( \y1 ->
SDL_CameraSpec
{ width = y1
, format = BG.getField @"format" x0
, colorspace = BG.getField @"colorspace" x0
, height = BG.getField @"height" x0
, framerate_numerator = BG.getField @"framerate_numerator" x0
, framerate_denominator = BG.getField @"framerate_denominator" x0
}
, BG.getField @"width" x0
)
instance
(ty ~ BG.CInt)
=> BG.HasField "width" (BG.Ptr SDL_CameraSpec) (BG.Ptr ty)
where
getField = HasCField.fromPtr (BG.Proxy @"width")
instance HasCField.HasCField SDL_CameraSpec "width" where
type CFieldType SDL_CameraSpec "width" = BG.CInt
offset# = \_ -> \_ -> 8
instance
(ty ~ BG.CInt)
=> BG.CompatHasField.HasField "height" SDL_CameraSpec ty
where
hasField =
\x0 ->
( \y1 ->
SDL_CameraSpec
{ height = y1
, format = BG.getField @"format" x0
, colorspace = BG.getField @"colorspace" x0
, width = BG.getField @"width" x0
, framerate_numerator = BG.getField @"framerate_numerator" x0
, framerate_denominator = BG.getField @"framerate_denominator" x0
}
, BG.getField @"height" x0
)
instance
(ty ~ BG.CInt)
=> BG.HasField "height" (BG.Ptr SDL_CameraSpec) (BG.Ptr ty)
where
getField = HasCField.fromPtr (BG.Proxy @"height")
instance HasCField.HasCField SDL_CameraSpec "height" where
type CFieldType SDL_CameraSpec "height" = BG.CInt
offset# = \_ -> \_ -> 12
instance
(ty ~ BG.CInt)
=> BG.CompatHasField.HasField "framerate_numerator" SDL_CameraSpec ty
where
hasField =
\x0 ->
( \y1 ->
SDL_CameraSpec
{ framerate_numerator = y1
, format = BG.getField @"format" x0
, colorspace = BG.getField @"colorspace" x0
, width = BG.getField @"width" x0
, height = BG.getField @"height" x0
, framerate_denominator = BG.getField @"framerate_denominator" x0
}
, BG.getField @"framerate_numerator" x0
)
instance
(ty ~ BG.CInt)
=> BG.HasField "framerate_numerator" (BG.Ptr SDL_CameraSpec) (BG.Ptr ty)
where
getField =
HasCField.fromPtr (BG.Proxy @"framerate_numerator")
instance HasCField.HasCField SDL_CameraSpec "framerate_numerator" where
type
CFieldType SDL_CameraSpec "framerate_numerator" =
BG.CInt
offset# = \_ -> \_ -> 16
instance
(ty ~ BG.CInt)
=> BG.CompatHasField.HasField "framerate_denominator" SDL_CameraSpec ty
where
hasField =
\x0 ->
( \y1 ->
SDL_CameraSpec
{ framerate_denominator = y1
, format = BG.getField @"format" x0
, colorspace = BG.getField @"colorspace" x0
, width = BG.getField @"width" x0
, height = BG.getField @"height" x0
, framerate_numerator = BG.getField @"framerate_numerator" x0
}
, BG.getField @"framerate_denominator" x0
)
instance
(ty ~ BG.CInt)
=> BG.HasField "framerate_denominator" (BG.Ptr SDL_CameraSpec) (BG.Ptr ty)
where
getField =
HasCField.fromPtr (BG.Proxy @"framerate_denominator")
instance HasCField.HasCField SDL_CameraSpec "framerate_denominator" where
type
CFieldType SDL_CameraSpec "framerate_denominator" =
BG.CInt
offset# = \_ -> \_ -> 20
-- | The position of camera in relation to system device.
--
-- @since 3.2.0
--
-- [See also]: 'sDL_GetCameraPosition'
--
-- [C declaration]: @enum SDL_CameraPosition@, defined at @SDL3\/SDL_camera.h 132:14@
newtype SDL_CameraPosition = SDL_CameraPosition
{ unwrap :: BG.CUInt
}
deriving stock (BG.Generic, Eq, Ord)
deriving newtype (BG.HasFFIType)
instance Marshal.StaticSize SDL_CameraPosition where
staticSizeOf = \_ -> (4 :: Int)
staticAlignment = \_ -> (4 :: Int)
instance Marshal.ReadRaw SDL_CameraPosition where
readRaw =
\ptr0 ->
pure SDL_CameraPosition
<*> Marshal.readRawByteOff ptr0 (0 :: Int)
instance Marshal.WriteRaw SDL_CameraPosition where
writeRaw =
\ptr0 ->
\s1 ->
case s1 of
SDL_CameraPosition unwrap2 ->
Marshal.writeRawByteOff ptr0 (0 :: Int) unwrap2
deriving via Marshal.EquivStorable SDL_CameraPosition instance BG.Storable SDL_CameraPosition
deriving via BG.CUInt instance BG.Prim SDL_CameraPosition
instance CEnum.CEnum SDL_CameraPosition where
type CEnumZ SDL_CameraPosition = BG.CUInt
toCEnum = SDL_CameraPosition
fromCEnum = BG.getField @"unwrap"
declaredValues =
\_ ->
CEnum.declaredValuesFromList
[ (0, BG.singleton "SDL_CAMERA_POSITION_UNKNOWN")
, (1, BG.singleton "SDL_CAMERA_POSITION_FRONT_FACING")
, (2, BG.singleton "SDL_CAMERA_POSITION_BACK_FACING")
]
showsUndeclared =
CEnum.showsWrappedUndeclared "SDL_CameraPosition"
readPrecUndeclared =
CEnum.readPrecWrappedUndeclared "SDL_CameraPosition"
isDeclared = CEnum.seqIsDeclared
mkDeclared = CEnum.seqMkDeclared
instance CEnum.SequentialCEnum SDL_CameraPosition where
minDeclaredValue = SDL_CAMERA_POSITION_UNKNOWN
maxDeclaredValue = SDL_CAMERA_POSITION_BACK_FACING
instance Show SDL_CameraPosition where
showsPrec = CEnum.shows
instance Read SDL_CameraPosition where
readPrec = CEnum.readPrec
readList = BG.readListDefault
readListPrec = BG.readListPrecDefault
instance
(ty ~ BG.CUInt)
=> BG.CompatHasField.HasField "unwrap" SDL_CameraPosition ty
where
hasField =
\x0 ->
( \y1 ->
SDL_CameraPosition{unwrap = y1}
, BG.getField @"unwrap" x0
)
instance
(ty ~ BG.CUInt)
=> BG.HasField "unwrap" (BG.Ptr SDL_CameraPosition) (BG.Ptr ty)
where
getField = HasCField.fromPtr (BG.Proxy @"unwrap")
instance HasCField.HasCField SDL_CameraPosition "unwrap" where
type
CFieldType SDL_CameraPosition "unwrap" =
BG.CUInt
offset# = \_ -> \_ -> 0
-- | [C declaration]: @SDL_CAMERA_POSITION_UNKNOWN@, defined at @SDL3\/SDL_camera.h 134:5@
pattern SDL_CAMERA_POSITION_UNKNOWN :: SDL_CameraPosition
pattern SDL_CAMERA_POSITION_UNKNOWN = SDL_CameraPosition 0
-- | [C declaration]: @SDL_CAMERA_POSITION_FRONT_FACING@, defined at @SDL3\/SDL_camera.h 135:5@
pattern SDL_CAMERA_POSITION_FRONT_FACING :: SDL_CameraPosition
pattern SDL_CAMERA_POSITION_FRONT_FACING = SDL_CameraPosition 1
-- | [C declaration]: @SDL_CAMERA_POSITION_BACK_FACING@, defined at @SDL3\/SDL_camera.h 136:5@
pattern SDL_CAMERA_POSITION_BACK_FACING :: SDL_CameraPosition
pattern SDL_CAMERA_POSITION_BACK_FACING = SDL_CameraPosition 2
-- | The current state of a request for camera access.
--
-- @since 3.4.0
--
-- [See also]: 'sDL_GetCameraPermissionState'
--
-- [C declaration]: @enum SDL_CameraPermissionState@, defined at @SDL3\/SDL_camera.h 146:14@
newtype SDL_CameraPermissionState = SDL_CameraPermissionState
{ unwrap :: BG.CInt
}
deriving stock (BG.Generic, Eq, Ord)
deriving newtype (BG.HasFFIType)
instance Marshal.StaticSize SDL_CameraPermissionState where
staticSizeOf = \_ -> (4 :: Int)
staticAlignment = \_ -> (4 :: Int)
instance Marshal.ReadRaw SDL_CameraPermissionState where
readRaw =
\ptr0 ->
pure SDL_CameraPermissionState
<*> Marshal.readRawByteOff ptr0 (0 :: Int)
instance Marshal.WriteRaw SDL_CameraPermissionState where
writeRaw =
\ptr0 ->
\s1 ->
case s1 of
SDL_CameraPermissionState unwrap2 ->
Marshal.writeRawByteOff ptr0 (0 :: Int) unwrap2
deriving via
Marshal.EquivStorable SDL_CameraPermissionState
instance
BG.Storable SDL_CameraPermissionState
deriving via BG.CInt instance BG.Prim SDL_CameraPermissionState
instance CEnum.CEnum SDL_CameraPermissionState where
type CEnumZ SDL_CameraPermissionState = BG.CInt
toCEnum = SDL_CameraPermissionState
fromCEnum = BG.getField @"unwrap"
declaredValues =
\_ ->
CEnum.declaredValuesFromList
[ (-1, BG.singleton "SDL_CAMERA_PERMISSION_STATE_DENIED")
, (0, BG.singleton "SDL_CAMERA_PERMISSION_STATE_PENDING")
, (1, BG.singleton "SDL_CAMERA_PERMISSION_STATE_APPROVED")
]
showsUndeclared =
CEnum.showsWrappedUndeclared "SDL_CameraPermissionState"
readPrecUndeclared =
CEnum.readPrecWrappedUndeclared "SDL_CameraPermissionState"
isDeclared = CEnum.seqIsDeclared
mkDeclared = CEnum.seqMkDeclared
instance CEnum.SequentialCEnum SDL_CameraPermissionState where
minDeclaredValue = SDL_CAMERA_PERMISSION_STATE_DENIED
maxDeclaredValue =
SDL_CAMERA_PERMISSION_STATE_APPROVED
instance Show SDL_CameraPermissionState where
showsPrec = CEnum.shows
instance Read SDL_CameraPermissionState where
readPrec = CEnum.readPrec
readList = BG.readListDefault
readListPrec = BG.readListPrecDefault
instance
(ty ~ BG.CInt)
=> BG.CompatHasField.HasField "unwrap" SDL_CameraPermissionState ty
where
hasField =
\x0 ->
( \y1 ->
SDL_CameraPermissionState{unwrap = y1}
, BG.getField @"unwrap" x0
)
instance
(ty ~ BG.CInt)
=> BG.HasField "unwrap" (BG.Ptr SDL_CameraPermissionState) (BG.Ptr ty)
where
getField = HasCField.fromPtr (BG.Proxy @"unwrap")
instance HasCField.HasCField SDL_CameraPermissionState "unwrap" where
type
CFieldType SDL_CameraPermissionState "unwrap" =
BG.CInt
offset# = \_ -> \_ -> 0
-- | [C declaration]: @SDL_CAMERA_PERMISSION_STATE_DENIED@, defined at @SDL3\/SDL_camera.h 148:5@
pattern SDL_CAMERA_PERMISSION_STATE_DENIED :: SDL_CameraPermissionState
pattern SDL_CAMERA_PERMISSION_STATE_DENIED = SDL_CameraPermissionState (-1)
-- | [C declaration]: @SDL_CAMERA_PERMISSION_STATE_PENDING@, defined at @SDL3\/SDL_camera.h 149:5@
pattern SDL_CAMERA_PERMISSION_STATE_PENDING :: SDL_CameraPermissionState
pattern SDL_CAMERA_PERMISSION_STATE_PENDING = SDL_CameraPermissionState 0
-- | [C declaration]: @SDL_CAMERA_PERMISSION_STATE_APPROVED@, defined at @SDL3\/SDL_camera.h 150:5@
pattern SDL_CAMERA_PERMISSION_STATE_APPROVED :: SDL_CameraPermissionState
pattern SDL_CAMERA_PERMISSION_STATE_APPROVED = SDL_CameraPermissionState 1