module Graphics.V4L2.PixelFormat.Internal
( PixelFormat(..)
, fromPixelFormat
, toPixelFormat
) where
import Data.Data (Data)
import Data.Typeable (Typeable)
import Data.Word (Word32)
import Bindings.Linux.VideoDev2
import Foreign.Extra.CEnum (toCEnum, fromCEnum)
data PixelFormat
= PixelRGB332
| PixelRGB444
| PixelRGB555
| PixelRGB565
| PixelRGB555X
| PixelRGB565X
| PixelBGR24
| PixelRGB24
| PixelBGR32
| PixelRGB32
| PixelGREY
| PixelY16
| PixelPAL8
| PixelYVU410
| PixelYVU420
| PixelYUYV
| PixelYYUV
| PixelYVYU
| PixelUYVY
| PixelVYUY
| PixelYUV422P
| PixelYUV411P
| PixelY41P
| PixelYUV444
| PixelYUV555
| PixelYUV565
| PixelYUV32
| PixelYUV410
| PixelYUV420
| PixelHI240
| PixelHM12
| PixelNV12
| PixelNV21
| PixelNV16
| PixelNV61
| PixelSBGGR8
| PixelSGBRG8
| PixelSGRBG8
| PixelSGRBG10
| PixelSGRBG10DPCM8
| PixelSBGGR16
| PixelMJPEG
| PixelJPEG
| PixelDV
| PixelMPEG
| PixelWNVA
| PixelSN9C10X
| PixelSN9C20X_I420
| PixelPWC1
| PixelPWC2
| PixelET61X251
| PixelSPCA501
| PixelSPCA505
| PixelSPCA508
| PixelSPCA561
| PixelPAC207
| PixelMR97310A
| PixelSQ905C
| PixelPJPG
| PixelOV511
| PixelOV518
| PixelUnknown Word32
deriving (Eq, Ord, Read, Show, Data, Typeable)
fromPixelFormat :: Word32 -> PixelFormat
toPixelFormat :: PixelFormat -> Word32
(fromPixelFormat, toPixelFormat) = (fromCEnum spec PixelUnknown, toCEnum spec isUnknown unUnknown) where
spec =
[ ( PixelRGB332 , c'V4L2_PIX_FMT_RGB332 )
, ( PixelRGB444 , c'V4L2_PIX_FMT_RGB444 )
, ( PixelRGB555 , c'V4L2_PIX_FMT_RGB555 )
, ( PixelRGB565 , c'V4L2_PIX_FMT_RGB565 )
, ( PixelRGB555X , c'V4L2_PIX_FMT_RGB555X )
, ( PixelRGB565X , c'V4L2_PIX_FMT_RGB565X )
, ( PixelBGR24 , c'V4L2_PIX_FMT_BGR24 )
, ( PixelRGB24 , c'V4L2_PIX_FMT_RGB24 )
, ( PixelBGR32 , c'V4L2_PIX_FMT_BGR32 )
, ( PixelRGB32 , c'V4L2_PIX_FMT_RGB32 )
, ( PixelGREY , c'V4L2_PIX_FMT_GREY )
, ( PixelY16 , c'V4L2_PIX_FMT_Y16 )
, ( PixelPAL8 , c'V4L2_PIX_FMT_PAL8 )
, ( PixelYVU410 , c'V4L2_PIX_FMT_YVU410 )
, ( PixelYVU420 , c'V4L2_PIX_FMT_YVU420 )
, ( PixelYUYV , c'V4L2_PIX_FMT_YUYV )
, ( PixelYYUV , c'V4L2_PIX_FMT_YYUV )
, ( PixelYVYU , c'V4L2_PIX_FMT_YVYU )
, ( PixelUYVY , c'V4L2_PIX_FMT_UYVY )
, ( PixelVYUY , c'V4L2_PIX_FMT_VYUY )
, ( PixelYUV422P , c'V4L2_PIX_FMT_YUV422P )
, ( PixelYUV411P , c'V4L2_PIX_FMT_YUV411P )
, ( PixelY41P , c'V4L2_PIX_FMT_Y41P )
, ( PixelYUV444 , c'V4L2_PIX_FMT_YUV444 )
, ( PixelYUV555 , c'V4L2_PIX_FMT_YUV555 )
, ( PixelYUV565 , c'V4L2_PIX_FMT_YUV565 )
, ( PixelYUV32 , c'V4L2_PIX_FMT_YUV32 )
, ( PixelYUV410 , c'V4L2_PIX_FMT_YUV410 )
, ( PixelYUV420 , c'V4L2_PIX_FMT_YUV420 )
, ( PixelHI240 , c'V4L2_PIX_FMT_HI240 )
, ( PixelHM12 , c'V4L2_PIX_FMT_HM12 )
, ( PixelNV12 , c'V4L2_PIX_FMT_NV12 )
, ( PixelNV21 , c'V4L2_PIX_FMT_NV21 )
, ( PixelNV16 , c'V4L2_PIX_FMT_NV16 )
, ( PixelNV61 , c'V4L2_PIX_FMT_NV61 )
, ( PixelSBGGR8 , c'V4L2_PIX_FMT_SBGGR8 )
, ( PixelSGBRG8 , c'V4L2_PIX_FMT_SGBRG8 )
, ( PixelSGRBG8 , c'V4L2_PIX_FMT_SGRBG8 )
, ( PixelSGRBG10 , c'V4L2_PIX_FMT_SGRBG10 )
, ( PixelSGRBG10DPCM8 , c'V4L2_PIX_FMT_SGRBG10DPCM8 )
, ( PixelSBGGR16 , c'V4L2_PIX_FMT_SBGGR16 )
, ( PixelMJPEG , c'V4L2_PIX_FMT_MJPEG )
, ( PixelJPEG , c'V4L2_PIX_FMT_JPEG )
, ( PixelDV , c'V4L2_PIX_FMT_DV )
, ( PixelMPEG , c'V4L2_PIX_FMT_MPEG )
, ( PixelWNVA , c'V4L2_PIX_FMT_WNVA )
, ( PixelSN9C10X , c'V4L2_PIX_FMT_SN9C10X )
, ( PixelSN9C20X_I420 , c'V4L2_PIX_FMT_SN9C20X_I420 )
, ( PixelPWC1 , c'V4L2_PIX_FMT_PWC1 )
, ( PixelPWC2 , c'V4L2_PIX_FMT_PWC2 )
, ( PixelET61X251 , c'V4L2_PIX_FMT_ET61X251 )
, ( PixelSPCA501 , c'V4L2_PIX_FMT_SPCA501 )
, ( PixelSPCA505 , c'V4L2_PIX_FMT_SPCA505 )
, ( PixelSPCA508 , c'V4L2_PIX_FMT_SPCA508 )
, ( PixelSPCA561 , c'V4L2_PIX_FMT_SPCA561 )
, ( PixelPAC207 , c'V4L2_PIX_FMT_PAC207 )
, ( PixelMR97310A , c'V4L2_PIX_FMT_MR97310A )
, ( PixelSQ905C , c'V4L2_PIX_FMT_SQ905C )
, ( PixelPJPG , c'V4L2_PIX_FMT_PJPG )
, ( PixelOV511 , c'V4L2_PIX_FMT_OV511 )
, ( PixelOV518 , c'V4L2_PIX_FMT_OV518 )
]
isUnknown (PixelUnknown _) = True
isUnknown _ = False
unUnknown (PixelUnknown f) = f
unUnknown _ = error "Graphice.V4L2.PixelFormat.Internal.toPixelFormat"