opencv-0.0.0.0: src/OpenCV/Internal/VideoIO/Types.hs
{-# language GeneralizedNewtypeDeriving #-}
{-# language CPP #-}
#ifndef ENABLE_INTERNAL_DOCUMENTATION
{-# OPTIONS_HADDOCK hide #-}
#endif
module OpenCV.Internal.VideoIO.Types
( -- * VideoCodecs
FourCC(..)
, VideoCaptureProperties(..)
, marshalCaptureProperties
, VideoCaptureAPI(..)
, marshalVideoCaptureAPI
) where
import "base" Data.Char ( ord )
import "base" Data.Int ( Int32 )
import "base" Data.Word ( Word32 )
import "base" Data.String ( IsString (..) )
import "base" Data.List( unfoldr )
import "this" OpenCV.Internal.VideoIO.Constants
--------------------------------------------------------------------------------
-- FourCC
--------------------------------------------------------------------------------
newtype FourCC = FourCC { unFourCC :: Int32 }
instance IsString FourCC where
fromString "ask" = FourCC (-1)
fromString fcc =
FourCC $ foldr (\x acc -> acc * 256 + fromIntegral (ord x))
0
(take 4 fcc)
instance Show FourCC where
show (FourCC (-1)) = "ask"
show (FourCC fcc) = take 4 $ unfoldr worker (fromIntegral fcc :: Word32)
where
worker 0 = Nothing
worker b = Just (toEnum . fromEnum $ b `mod` 256, b `div` 256)
--------------------------------------------------------------------------------
-- VideoCaptureProperties
-- more at https://github.com/opencv/opencv/blob/master/modules/videoio/include/opencv2/videoio.hpp
--------------------------------------------------------------------------------
data VideoCaptureProperties
= VideoCapPropPosMsec
-- ^ Current position of the video file in milliseconds.
| VideoCapPropPosFrames
-- ^ 0-based index of the frame to be decoded/captured next.
| VideoCapPropPosAviRatio
-- ^ Relative position of the video file: 0=start of the film,
-- 1=end of the film.
| VideoCapPropFrameWidth -- ^ Width of the frames in the video stream.
| VideoCapPropFrameHeight -- ^ Height of the frames in the video stream.
| VideoCapPropFps -- ^ Frame rate.
| VideoCapPropFourCc -- ^ 4-character code of codec.
| VideoCapPropFrameCount -- ^ Number of frames in the video file.
| VideoCapPropFormat
-- ^ Format of the Mat objects returned by VideoCapture::retrieve().
| VideoCapPropMode
-- ^ Backend-specific value indicating the current capture mode.
| VideoCapPropBrightness -- ^ Brightness of the image (only for cameras).
| VideoCapPropContrast -- ^ Contrast of the image (only for cameras).
| VideoCapPropSaturation -- ^ Saturation of the image (only for cameras).
| VideoCapPropHue -- ^ Hue of the image (only for cameras).
| VideoCapPropGain -- ^ Gain of the image (only for cameras).
| VideoCapPropExposure -- ^ Exposure (only for cameras).
| VideoCapPropConvertRgb
-- ^ Boolean flags indicating whether images should be converted to RGB.
| VideoCapPropWhiteBalanceBlueU -- ^ Currently unsupported.
| VideoCapPropRectification
-- ^ Rectification flag for stereo cameras
-- (note: only supported by DC1394 v 2.x backend currently).
| VideoCapPropMonochrome -- ^
| VideoCapPropSharpness -- ^
| VideoCapPropAutoExposure
-- ^ DC1394: exposure control done by camera, user can adjust reference
-- level using this feature.
| VideoCapPropGamma -- ^
| VideoCapPropTemperature -- ^
| VideoCapPropTrigger -- ^
| VideoCapPropTriggerDelay -- ^
| VideoCapPropWhiteBalanceRedV -- ^
| VideoCapPropZoom -- ^
| VideoCapPropFocus -- ^
| VideoCapPropGuid -- ^
| VideoCapPropIsoSpeed -- ^
| VideoCapPropBacklight -- ^
| VideoCapPropPan -- ^
| VideoCapPropTilt -- ^
| VideoCapPropRoll -- ^
| VideoCapPropIris -- ^
| VideoCapPropSettings
-- ^ Pop up video/camera filter dialog (note: only supported by DSHOW
-- backend currently. Property value is ignored)
| VideoCapPropBuffersize -- ^
| VideoCapPropAutofocus -- ^
| VideoCapPropInt !Int32
-- ^ Any property we need. Meaning of this property depends on
-- the backend.
marshalCaptureProperties :: VideoCaptureProperties -> Int32
marshalCaptureProperties = \case
VideoCapPropPosMsec -> c'CAP_PROP_POS_MSEC
VideoCapPropPosFrames -> c'CAP_PROP_POS_FRAMES
VideoCapPropPosAviRatio -> c'CAP_PROP_POS_AVI_RATIO
VideoCapPropFrameWidth -> c'CAP_PROP_FRAME_WIDTH
VideoCapPropFrameHeight -> c'CAP_PROP_FRAME_HEIGHT
VideoCapPropFps -> c'CAP_PROP_FPS
VideoCapPropFourCc -> c'CAP_PROP_FOURCC
VideoCapPropFrameCount -> c'CAP_PROP_FRAME_COUNT
VideoCapPropFormat -> c'CAP_PROP_FORMAT
VideoCapPropMode -> c'CAP_PROP_MODE
VideoCapPropBrightness -> c'CAP_PROP_BRIGHTNESS
VideoCapPropContrast -> c'CAP_PROP_CONTRAST
VideoCapPropSaturation -> c'CAP_PROP_SATURATION
VideoCapPropHue -> c'CAP_PROP_HUE
VideoCapPropGain -> c'CAP_PROP_GAIN
VideoCapPropExposure -> c'CAP_PROP_EXPOSURE
VideoCapPropConvertRgb -> c'CAP_PROP_CONVERT_RGB
VideoCapPropWhiteBalanceBlueU -> c'CAP_PROP_WHITE_BALANCE_BLUE_U
VideoCapPropRectification -> c'CAP_PROP_RECTIFICATION
VideoCapPropMonochrome -> c'CAP_PROP_MONOCHROME
VideoCapPropSharpness -> c'CAP_PROP_SHARPNESS
VideoCapPropAutoExposure -> c'CAP_PROP_AUTO_EXPOSURE
VideoCapPropGamma -> c'CAP_PROP_GAMMA
VideoCapPropTemperature -> c'CAP_PROP_TEMPERATURE
VideoCapPropTrigger -> c'CAP_PROP_TRIGGER
VideoCapPropTriggerDelay -> c'CAP_PROP_TRIGGER_DELAY
VideoCapPropWhiteBalanceRedV -> c'CAP_PROP_WHITE_BALANCE_RED_V
VideoCapPropZoom -> c'CAP_PROP_ZOOM
VideoCapPropFocus -> c'CAP_PROP_FOCUS
VideoCapPropGuid -> c'CAP_PROP_GUID
VideoCapPropIsoSpeed -> c'CAP_PROP_ISO_SPEED
VideoCapPropBacklight -> c'CAP_PROP_BACKLIGHT
VideoCapPropPan -> c'CAP_PROP_PAN
VideoCapPropTilt -> c'CAP_PROP_TILT
VideoCapPropRoll -> c'CAP_PROP_ROLL
VideoCapPropIris -> c'CAP_PROP_IRIS
VideoCapPropSettings -> c'CAP_PROP_SETTINGS
VideoCapPropBuffersize -> c'CAP_PROP_BUFFERSIZE
VideoCapPropAutofocus -> c'CAP_PROP_AUTOFOCUS
VideoCapPropInt a -> a
--------------------------------------------------------------------------------
-- VideoCaptureProperties
-- more at https://github.com/opencv/opencv/blob/master/modules/videoio/include/opencv2/videoio.hpp
--------------------------------------------------------------------------------
data VideoCaptureAPI
= VideoCapAny -- ^ Auto detect == 0
| VideoCapVfw -- ^ Video For Windows (platform native)
| VideoCapV4l -- ^ V4L/V4L2 capturing support via libv4l
| VideoCapV4l2 -- ^ Same as CAP_V4L
| VideoCapFirewire -- ^ IEEE 1394 drivers
| VideoCapFireware -- ^ Same as CAP_FIREWIRE
| VideoCapIeee1394 -- ^ Same as CAP_FIREWIRE
| VideoCapDc1394 -- ^ Same as CAP_FIREWIRE
| VideoCapCmu1394 -- ^ Same as CAP_FIREWIRE
| VideoCapQt -- ^ QuickTime
| VideoCapUnicap -- ^ Unicap drivers
| VideoCapDshow -- ^ DirectShow (via videoInput)
| VideoCapPvapi -- ^ PvAPI, Prosilica GigE SDK
| VideoCapOpenni -- ^ OpenNI (for Kinect)
| VideoCapOpenniAsus -- ^ OpenNI (for Asus Xtion)
| VideoCapAndroid -- ^ Android - not used
| VideoCapXiapi -- ^ XIMEA Camera API
| VideoCapAvfoundation
-- ^ AVFoundation framework for iOS (OS X Lion will have the same API)
| VideoCapGiganetix -- ^ Smartek Giganetix GigEVisionSDK
| VideoCapMsmf -- ^ Microsoft Media Foundation (via videoInput)
| VideoCapWinrt -- ^ Microsoft Windows Runtime using Media Foundation
| VideoCapIntelperc -- ^ Intel Perceptual Computing SDK
| VideoCapOpenni2 -- ^ OpenNI2 (for Kinect)
| VideoCapOpenni2Asus
-- ^ OpenNI2 (for Asus Xtion and Occipital Structure sensors)
| VideoCapGphoto2 -- ^ gPhoto2 connection
| VideoCapGstreamer -- ^ GStreamer
| VideoCapFfmpeg
-- ^ Open and record video file or stream using the FFMPEG library
| VideoCapImages -- ^ Image Sequence (e.g. img_%02d.jpg)
marshalVideoCaptureAPI :: VideoCaptureAPI -> Int32
marshalVideoCaptureAPI = \case
VideoCapAny -> c'CAP_ANY
VideoCapVfw -> c'CAP_VFW
VideoCapV4l -> c'CAP_V4L
VideoCapV4l2 -> c'CAP_V4L2
VideoCapFirewire -> c'CAP_FIREWIRE
VideoCapFireware -> c'CAP_FIREWARE
VideoCapIeee1394 -> c'CAP_IEEE1394
VideoCapDc1394 -> c'CAP_DC1394
VideoCapCmu1394 -> c'CAP_CMU1394
VideoCapQt -> c'CAP_QT
VideoCapUnicap -> c'CAP_UNICAP
VideoCapDshow -> c'CAP_DSHOW
VideoCapPvapi -> c'CAP_PVAPI
VideoCapOpenni -> c'CAP_OPENNI
VideoCapOpenniAsus -> c'CAP_OPENNI_ASUS
VideoCapAndroid -> c'CAP_ANDROID
VideoCapXiapi -> c'CAP_XIAPI
VideoCapAvfoundation -> c'CAP_AVFOUNDATION
VideoCapGiganetix -> c'CAP_GIGANETIX
VideoCapMsmf -> c'CAP_MSMF
VideoCapWinrt -> c'CAP_WINRT
VideoCapIntelperc -> c'CAP_INTELPERC
VideoCapOpenni2 -> c'CAP_OPENNI2
VideoCapOpenni2Asus -> c'CAP_OPENNI2_ASUS
VideoCapGphoto2 -> c'CAP_GPHOTO2
VideoCapGstreamer -> c'CAP_GSTREAMER
VideoCapFfmpeg -> c'CAP_FFMPEG
VideoCapImages -> c'CAP_IMAGES