{- | Module : Graphics.V4L2 Maintainer : claude@mathr.co.uk Stability : no Portability : no -} module Graphics.V4L2 ( module Graphics.V4L2.Device , module Graphics.V4L2.Capability , module Graphics.V4L2.Priority , module Graphics.V4L2.Control , module Graphics.V4L2.Field , module Graphics.V4L2.PixelFormat , module Graphics.V4L2.ColorSpace , module Graphics.V4L2.Format , module Graphics.V4L2.VideoInput , module Graphics.V4L2.VideoStandard , module Graphics.V4L2.VideoCapture ) where import Graphics.V4L2.Device import Graphics.V4L2.Capability import Graphics.V4L2.Priority import Graphics.V4L2.Control import Graphics.V4L2.Field import Graphics.V4L2.PixelFormat import Graphics.V4L2.ColorSpace import Graphics.V4L2.Format import Graphics.V4L2.VideoInput import Graphics.V4L2.VideoStandard import Graphics.V4L2.VideoCapture {- -- * Buffers and formats. , BufferType(..) -- ** Image formats. -- * Audio inputs. , AudioIndex -- * Tuners. , TunerIndex -- * Exceptions , V4L2Bug(..) ) where import Prelude hiding (null, catch) import Foreign import Foreign.C import Foreign.Helper import Control.Monad (when) import Control.Exception import GHC.IO.Exception (IOErrorType(InvalidArgument, ResourceBusy), ioe_type) import System.Posix.Types (Fd(Fd), CMode) import System.Posix.IOCtl (IOControl(ioctlReq)) import Data.Set (Set, empty, fromList, singleton, union, insert, null) import Data.Word (Word8, Word32, Word64) import Data.Bits (shiftR, (.&.), testBit) import Data.Maybe (fromMaybe) import Bindings.Linux.VideoDev2 import Bindings.LibV4L2 {- | Buffer type identifiers. -} enum "BufferType" "C'v4l2_buf_type" "c'V4L2_BUF_TYPE_" "B" $ words "VIDEO_CAPTURE VIDEO_CAPTURE_MPLANE VIDEO_OUTPUT VIDEO_OUTPUT_MPLANE VIDEO_OVERLAY VBI_CAPTURE VBI_OUTPUT SLICED_VBI_CAPTURE SLICED_VBI_OUTPUT VIDEO_OUTPUT_OVERLAY" {- | Audio input index. -} newtype AudioIndex = AudioIndex Int deriving (Eq, Ord, Enum, Bounded, Read, Show, Data, Typeable, Num, Integral, Real) {- | Tuner index. -} newtype TunerIndex = TunerIndex Int deriving (Eq, Ord, Enum, Bounded, Read, Show, Data, Typeable, Num, Integral, Real) zero :: Storable a => IO a zero = alloca $ \p -> c'memset p 0 (fromIntegral $ sizeOf (undefined `asTypeOf` unsafePerformIO (peek p))) >> peek p {- | Internal errors. Please report these as bugs. -} data V4L2Bug = V4L2BugUnparseableInput C'v4l2_input | V4L2BugUnparseableFormat C'v4l2_format | V4L2BugUnparseableFormatDescription C'v4l2_fmtdesc | V4L2BugUnexpectedFrameSizeType C'v4l2_frmsizeenum | V4L2BugUnexpectedFrameIntervalType C'v4l2_frmivalenum deriving (Show, Typeable) instance Exception V4L2Bug -}