large portion
[hsv4l2:phischus-v4l2.git] / Graphics / V4L2.hs
1 {- |
2 Module      : Graphics.V4L2
3 Maintainer  : claudiusmaximus@goto10.org
4 Stability   : no
5 Portability : no
6 -}
7 module Graphics.V4L2 (
8     module Graphics.V4L2.Device
9   , module Graphics.V4L2.Capability
10   , module Graphics.V4L2.Priority
11   , module Graphics.V4L2.Control
12   , module Graphics.V4L2.Field
13   , module Graphics.V4L2.PixelFormat
14   , module Graphics.V4L2.ColorSpace
15   , module Graphics.V4L2.Format
16   , module Graphics.V4L2.VideoInput
17   , module Graphics.V4L2.VideoStandard
18   , module Graphics.V4L2.VideoCapture
19   ) where
20
21 import Graphics.V4L2.Device
22 import Graphics.V4L2.Capability
23 import Graphics.V4L2.Priority
24 import Graphics.V4L2.Control
25 import Graphics.V4L2.Field
26 import Graphics.V4L2.PixelFormat
27 import Graphics.V4L2.ColorSpace
28 import Graphics.V4L2.Format
29 import Graphics.V4L2.VideoInput
30 import Graphics.V4L2.VideoStandard
31 import Graphics.V4L2.VideoCapture
32
33 {-
34   -- * Buffers and formats.
35   , BufferType(..)
36   -- ** Image formats.
37   -- * Audio inputs.
38   , AudioIndex
39   -- * Tuners.
40   , TunerIndex
41   -- * Exceptions
42   , V4L2Bug(..)
43   ) where
44 import Prelude hiding (null, catch)
45 import Foreign
46 import Foreign.C
47 import Foreign.Helper
48 import Control.Monad (when)
49 import Control.Exception
50 import GHC.IO.Exception (IOErrorType(InvalidArgument, ResourceBusy), ioe_type)
51 import System.Posix.Types (Fd(Fd), CMode)
52 import System.Posix.IOCtl (IOControl(ioctlReq))
53 import Data.Set (Set, empty, fromList, singleton, union, insert, null)
54 import Data.Word (Word8, Word32, Word64)
55 import Data.Bits (shiftR, (.&.), testBit)
56 import Data.Maybe (fromMaybe)
57 import Bindings.Linux.VideoDev2
58 import Bindings.LibV4L2
59
60 {- | Buffer type identifiers. -}
61 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"
62
63 {- | Audio input index. -}
64 newtype AudioIndex = AudioIndex Int
65   deriving (Eq, Ord, Enum, Bounded, Read, Show, Data, Typeable, Num, Integral, Real)
66
67 {- | Tuner index. -}
68 newtype TunerIndex = TunerIndex Int
69   deriving (Eq, Ord, Enum, Bounded, Read, Show, Data, Typeable, Num, Integral, Real)
70
71
72 zero :: Storable a => IO a
73 zero = alloca $ \p -> c'memset p 0 (fromIntegral $ sizeOf (undefined `asTypeOf` unsafePerformIO (peek p))) >> peek p
74
75 {- | Internal errors.  Please report these as bugs. -}
76 data V4L2Bug
77   = V4L2BugUnparseableInput C'v4l2_input
78   | V4L2BugUnparseableFormat C'v4l2_format
79   | V4L2BugUnparseableFormatDescription C'v4l2_fmtdesc
80   | V4L2BugUnexpectedFrameSizeType C'v4l2_frmsizeenum
81   | V4L2BugUnexpectedFrameIntervalType C'v4l2_frmivalenum
82   deriving (Show, Typeable)
83 instance Exception V4L2Bug
84 -}