module Graphics.V4L2.ColorSpace.Internal
( ColorSpace(..)
, fromColorSpace
, toColorSpace
) where
import Data.Data (Data)
import Data.Typeable (Typeable)
import Data.Word (Word32)
import Bindings.Linux.VideoDev2
import Foreign.Extra.CEnum (toCEnum, fromCEnum)
data ColorSpace
= ColorSMPTE170M
| ColorSMPTE240M
| ColorREC709
| ColorBT878
| Color470SystemM
| Color470SystemBG
| ColorJPEG
| ColorSRGB
| ColorUnknown Word32
deriving (Eq, Ord, Read, Show, Data, Typeable)
fromColorSpace :: C'v4l2_colorspace -> ColorSpace
toColorSpace :: ColorSpace -> C'v4l2_colorspace
(fromColorSpace, toColorSpace) = (fromCEnum spec (ColorUnknown . fromIntegral), toCEnum spec isUnknown unUnknown) where
spec =
[ ( ColorSMPTE170M , c'V4L2_COLORSPACE_SMPTE170M )
, ( ColorSMPTE240M , c'V4L2_COLORSPACE_SMPTE240M )
, ( ColorREC709 , c'V4L2_COLORSPACE_REC709 )
, ( ColorBT878 , c'V4L2_COLORSPACE_BT878 )
, ( Color470SystemM , c'V4L2_COLORSPACE_470_SYSTEM_M )
, ( Color470SystemBG , c'V4L2_COLORSPACE_470_SYSTEM_BG )
, ( ColorJPEG , c'V4L2_COLORSPACE_JPEG )
, ( ColorSRGB , c'V4L2_COLORSPACE_SRGB )
]
isUnknown (ColorUnknown _) = True
isUnknown _ = False
unUnknown (ColorUnknown f) = fromIntegral f
unUnknown _ = error "Graphice.V4L2.ColorSpace.Internal.toColorSpace"