simple-firewire (empty) → 0.1
raw patch · 5 files changed
+624/−0 lines, 5 filesdep +CVdep +basedep +bindings-dc1394setup-changed
Dependencies added: CV, base, bindings-dc1394
Files
- Examples/Example1.hs +74/−0
- LICENSE +30/−0
- Setup.hs +2/−0
- System/Camera/Firewire/Simple.hs +485/−0
- simple-firewire.cabal +33/−0
+ Examples/Example1.hs view
@@ -0,0 +1,74 @@+{-#LANGUAGE ScopedTypeVariables#-}+module Main where++import CV.ColourUtils+import CV.Conversions+import CV.Image+import Control.Applicative+import Control.Exception+import Control.Monad+import Data.Array.CArray+import Data.Array.IArray+import Data.Bits+import Foreign.C.Types+import Foreign.Concurrent+import Foreign.ForeignPtr hiding (newForeignPtr)+import Foreign.Marshal.Alloc+import Foreign.Marshal.Array+import Foreign.Ptr+import Foreign.Storable+import Foreign.Storable.Tuple+import System.IO.Unsafe+import qualified Data.ByteString.Char8 as B++import Data.Enumerator hiding (peek)+import qualified Data.Enumerator.List as E+import Control.Monad.Trans++import System.Camera.Firewire.Simple+++enumCamera+ :: MonadIO m =>+ Camera -> Step (Image RGB D8) m b -> Iteratee (Image RGB D8) m b+enumCamera camera = loop + where+ loop (Continue k) = do+ x <- liftIO $ getFrame camera+ case x of+ Just i -> k (Chunks [i]) >>== loop + Nothing -> k (Chunks []) >>== loop + loop s = returnI s++save :: Iteratee (Image RGB D8) IO ()+save = continue $ go 0+ where+ go :: Int -> Stream (Image RGB D8) -> Iteratee (Image RGB D8) IO ()+ go n (Chunks []) = liftIO (print "No-SNAP") >> continue (go (n))+ go n (Chunks [i]) = liftIO (print "SNAP") >> liftIO (saveImage ("img_"++show n++".png") i) >> continue (go (n+1))+ go n a = yield () a +++saveClip c = enumCamera c $$ (E.isolate 10 =$ save)++main = do+ dc <- getDC1394 --c'dc1394_new + (e:_) <- getCameras dc+ print e+ print ("Trying camera", e)+ cam <- cameraFromID dc e-- c'dc1394_camera_new dc guid+ print ("Camera can do oneshots", oneShotCapable cam)+ setISOSpeed cam ISO_400+ setVideoMode cam Mode_640x480_RGB8+ setFrameRate cam Rate_7_5+ setupCamera cam 4 (defaultFlags)+ startVideoTransmission cam+ + run_ (saveClip cam)+ -- getFrame cam >>= saveImage "testShot2-1.png"+ -- getFrame cam >>= saveImage "testShot2-3.png"+ + stopVideoTransmission cam+ stopCapture cam++
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c)2011, Ville Tirronen++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Ville Tirronen nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ System/Camera/Firewire/Simple.hs view
@@ -0,0 +1,485 @@+{-#LANGUAGE ScopedTypeVariables#-}+module System.Camera.Firewire.Simple (+ -- * Basic types+ Camera+ , CameraId + , CaptureFlag + , DC1394+ + -- * Capture flags+ , (&+)+ , autoISO+ , candwidthAlloc+ , channelAlloc+ , defaultFlags + + -- * Setting up cameras+ , cameraFromID+ , setFrameRate + , setISOSpeed + , setVideoMode + , setupCamera + + -- * Setting up the context, cameras and the transmission+ , getCameras + , getDC1394 + , startVideoTransmission + , stopVideoTransmission + , stopCapture + + -- * Camera properties+ , oneShotCapable + + -- * Getting images+ , getFrame + -- * Various flags + , DCResult(..)+ , Framerate(..)+ , ISOSpeed(..)+ , VideoMode(..)+++) where++import Bindings.DC1394+import CV.Conversions+import CV.Image+import Control.Applicative+import Control.Exception+import Control.Monad+import Data.Bits+import Foreign.C.Types+import Foreign.Concurrent+import Foreign.ForeignPtr hiding (newForeignPtr)+import Foreign.Marshal.Alloc+import Foreign.Marshal.Array+import Foreign.Ptr+import Foreign.Storable+import System.IO.Unsafe++getIds :: C'dc1394camera_list_t -> IO [C'dc1394camera_id_t]+getIds camList = peekArray (fromIntegral $ c'dc1394camera_list_t'num camList)+ (c'dc1394camera_list_t'ids camList)+++-- | Unique camera identifier+type CameraId = C'dc1394camera_id_t++-- | Get list of available cameras+getCameras :: DC1394 -> IO [CameraId]+getCameras dc = + withDC1394 dc $ \c_dc ->+ alloca $ \list -> bracket + (checking $ c'dc1394_camera_enumerate c_dc list)+ (\_ -> peek list >>= c'dc1394_camera_free_list)+ (\_ -> peek list >>= peek >>= getIds) ++-- | Grab a frame from the camera. Currently does only 640x480 RGB D8 Images.+getFrame :: Camera -> IO (Maybe (Image RGB D8))+getFrame camera' = alloca $ \(framePtr :: Ptr (Ptr (C'dc1394video_frame_t))) ->+ withCameraPtr camera' $ \camera -> do++ mode <- getMode camera+ when (mode /= c'DC1394_VIDEO_MODE_640x480_RGB8) $ error "Unsupported mode. Use 640x480 RGB8 for now"++ c'dc1394_capture_dequeue camera c'DC1394_CAPTURE_POLICY_WAIT framePtr+ frameP :: Ptr C'dc1394video_frame_t <- peek framePtr++ if frameP == nullPtr -- Perhaps there was no frame available?+ then c'dc1394_capture_enqueue camera frameP >> return Nothing+ else do + --corrupt <- c'dc1394_capture_is_frame_corrupt camera frameP -- Or it was corrupted?+ -- For some reason this seems always true on os x+ let corrupt = 0+ case corrupt of+ 0 -> do -- Yay! A frame!+ dataPtr <- c'dc1394video_frame_t'image <$> (peek framePtr >>= peek)+ r <- unsafe8UC3FromPtr (640,480) dataPtr+ c'dc1394_capture_enqueue camera frameP+ return . Just $ r+ _ -> c'dc1394_capture_enqueue camera frameP >> return Nothing++++getMode :: Ptr C'dc1394camera_t -> IO CInt+getMode camera = alloca $ \(mode :: Ptr CInt) -> do + c'dc1394_video_get_mode camera mode+ peek mode++sizeFromMode camera mode = alloca $ \w -> alloca $ \h -> do+ c'dc1394_get_image_size_from_video_mode camera mode w h+ (,) <$> peek w <*> peek h +++-- | Abstract type for cameras+data Camera = Camera (ForeignPtr C'dc1394camera_t)++-- | Create Camera from ID. Although the camera type is memory managed, the user is required+-- to stop data transfer and reset appropriate settings. Finalizers are not quaranteed to run.+cameraFromID :: DC1394 -> CameraId -> IO Camera+cameraFromID dc e = do+ let guid = c'dc1394camera_id_t'guid e+ camera <- withDC1394 dc $ \c_dc -> c'dc1394_camera_new c_dc guid+ when (camera==nullPtr) $ error "Could not create camera"+ Camera <$> newForeignPtr camera (c'dc1394_camera_free camera)+ -- #TODO What else should be cleaned up?++withCameraPtr (Camera fptr) op = withForeignPtr fptr op+withCamera (Camera fptr) op = withForeignPtr fptr (\ptr -> peek ptr >>= op)++-- | DC1394 context used for creating cameras, etc.+newtype DC1394 = DC1394 (ForeignPtr C'dc1394_t)++-- | Create a new DC1394 context+getDC1394 :: IO DC1394+getDC1394 = do+ dc <- c'dc1394_new + when (dc==nullPtr) $ error "Could not get dc1394 context"+ DC1394 <$> newForeignPtr dc (c'dc1394_free dc)++withDC1394 :: DC1394 -> (Ptr C'dc1394_t -> IO b) -> IO b+withDC1394 (DC1394 fptr) op = withForeignPtr fptr op++-- | Set the video transmission on+startVideoTransmission :: Camera -> IO ()+startVideoTransmission c = withCameraPtr c $ \camera -> checking $ c'dc1394_video_set_transmission camera c'DC1394_ON++-- | Set the video transmission off. Call this when you are done with the camera+stopVideoTransmission :: Camera -> IO ()+stopVideoTransmission c = withCameraPtr c $ \camera -> checking $ c'dc1394_video_set_transmission camera c'DC1394_OFF++-- | Stop capturing. Call this when you are done with the camera.+stopCapture :: Camera -> IO ()+stopCapture c = withCameraPtr c $ \camera -> checking $ c'dc1394_capture_stop camera++-- | Does the camera have one-shot functionality?+oneShotCapable :: Camera -> Bool+oneShotCapable camera = unsafePerformIO $ withCamera camera (return . itob . c'dc1394camera_t'one_shot_capable)++-- | Type for capture flags+newtype CaptureFlag = CF CInt+channelAlloc, candwidthAlloc, defaultFlags, autoISO :: CaptureFlag ++channelAlloc = CF c'DC1394_CAPTURE_FLAGS_CHANNEL_ALLOC +candwidthAlloc = CF c'DC1394_CAPTURE_FLAGS_BANDWIDTH_ALLOC +defaultFlags = CF c'DC1394_CAPTURE_FLAGS_DEFAULT +autoISO = CF c'DC1394_CAPTURE_FLAGS_AUTO_ISO +fromCF (CF a) = a++-- | Join flags+(&+) :: CaptureFlag -> CaptureFlag -> CaptureFlag+CF a &+ CF b = CF (a .&. b)++-- | Set ISO speed+setISOSpeed :: Camera -> ISOSpeed -> IO ()+setISOSpeed c iso = withCameraPtr c $ \camera -> + checking $ c'dc1394_video_set_iso_speed camera (fromISO iso)++-- | Set the video mode+setVideoMode :: Camera -> VideoMode -> IO ()+setVideoMode c mode = withCameraPtr c $ \camera -> + checking $ c'dc1394_video_set_mode camera (toVideoMode mode)++-- | Set the frame rate+setFrameRate :: Camera -> Framerate -> IO ()+setFrameRate c rate = withCameraPtr c $ \camera -> + checking $ c'dc1394_video_set_framerate camera (toFramerate rate)++-- | Setup the camera for capturing+setupCamera :: Camera -> Int -> CaptureFlag -> IO ()+setupCamera c dmaBuffers cf = withCameraPtr c $ \camera -> + checking $ c'dc1394_capture_setup camera + (fromIntegral dmaBuffers) (fromCF cf)++-- | Execute a libdc1394 function and check for the error code. Currently raises the error as +-- UserError, but in future might provide a more reasonable error hierarchy.+checking :: IO CInt -> IO ()+checking op = do + r <- toResult <$>op+ case r of+ SUCCESS -> return ()+ e -> error (show e)++itob 0 = False+itob _ = True++data ISOSpeed = + ISO_100+ | ISO_200+ | ISO_400+ | ISO_800+ | ISO_1600+ | ISO_3200++fromISO ISO_100 = c'DC1394_ISO_SPEED_100 +fromISO ISO_200 = c'DC1394_ISO_SPEED_200+fromISO ISO_400 = c'DC1394_ISO_SPEED_400+fromISO ISO_800 = c'DC1394_ISO_SPEED_800+fromISO ISO_1600 = c'DC1394_ISO_SPEED_1600+fromISO ISO_3200 = c'DC1394_ISO_SPEED_3200+toISO i + | i == c'DC1394_ISO_SPEED_100 = ISO_100 + | i == c'DC1394_ISO_SPEED_200 = ISO_200 + | i == c'DC1394_ISO_SPEED_400 = ISO_400 + | i == c'DC1394_ISO_SPEED_800 = ISO_800 + | i == c'DC1394_ISO_SPEED_1600 = ISO_1600 + | i == c'DC1394_ISO_SPEED_3200 = ISO_3200 + ++data DCResult = + SUCCESS + | FAILURE + | NOT_A_CAMERA + | FUNCTION_NOT_SUPPORTED + | CAMERA_NOT_INITIALIZED + | MEMORY_ALLOCATION_FAILURE + | TAGGED_REGISTER_NOT_FOUND + | NO_ISO_CHANNEL + | NO_BANDWIDTH + | IOCTL_FAILURE + | CAPTURE_IS_NOT_SET + | CAPTURE_IS_RUNNING + | RAW1394_FAILURE + | FORMAT7_ERROR_FLAG_1 + | FORMAT7_ERROR_FLAG_2 + | INVALID_ARGUMENT_VALUE + | REQ_VALUE_OUTSIDE_RANGE + | INVALID_FEATURE + | INVALID_VIDEO_FORMAT + | INVALID_VIDEO_MODE + | INVALID_FRAMERATE + | INVALID_TRIGGER_MODE + | INVALID_TRIGGER_SOURCE + | INVALID_ISO_SPEED + | INVALID_IIDC_VERSION + | INVALID_COLOR_CODING + | INVALID_COLOR_FILTER + | INVALID_CAPTURE_POLICY + | INVALID_ERROR_CODE + | INVALID_BAYER_METHOD + | INVALID_VIDEO1394_DEVICE + | INVALID_OPERATION_MODE + | INVALID_TRIGGER_POLARITY + | INVALID_FEATURE_MODE + | INVALID_LOG_TYPE + | INVALID_BYTE_ORDER + | INVALID_STEREO_METHOD + | BASLER_NO_MORE_SFF_CHUNKS + | BASLER_CORRUPTED_SFF_CHUNK + | BASLER_UNKNOWN_SFF_CHUNK + deriving (Show,Eq)++fromResult SUCCESS = c'DC1394_SUCCESS +fromResult FAILURE = c'DC1394_FAILURE +fromResult NOT_A_CAMERA = c'DC1394_NOT_A_CAMERA +fromResult FUNCTION_NOT_SUPPORTED = c'DC1394_FUNCTION_NOT_SUPPORTED +fromResult CAMERA_NOT_INITIALIZED = c'DC1394_CAMERA_NOT_INITIALIZED +fromResult MEMORY_ALLOCATION_FAILURE = c'DC1394_MEMORY_ALLOCATION_FAILURE +fromResult TAGGED_REGISTER_NOT_FOUND = c'DC1394_TAGGED_REGISTER_NOT_FOUND +fromResult NO_ISO_CHANNEL = c'DC1394_NO_ISO_CHANNEL +fromResult NO_BANDWIDTH = c'DC1394_NO_BANDWIDTH +fromResult IOCTL_FAILURE = c'DC1394_IOCTL_FAILURE +fromResult CAPTURE_IS_NOT_SET = c'DC1394_CAPTURE_IS_NOT_SET +fromResult CAPTURE_IS_RUNNING = c'DC1394_CAPTURE_IS_RUNNING +fromResult RAW1394_FAILURE = c'DC1394_RAW1394_FAILURE +fromResult FORMAT7_ERROR_FLAG_1 = c'DC1394_FORMAT7_ERROR_FLAG_1 +fromResult FORMAT7_ERROR_FLAG_2 = c'DC1394_FORMAT7_ERROR_FLAG_2 +fromResult INVALID_ARGUMENT_VALUE = c'DC1394_INVALID_ARGUMENT_VALUE +fromResult REQ_VALUE_OUTSIDE_RANGE = c'DC1394_REQ_VALUE_OUTSIDE_RANGE +fromResult INVALID_FEATURE = c'DC1394_INVALID_FEATURE +fromResult INVALID_VIDEO_FORMAT = c'DC1394_INVALID_VIDEO_FORMAT +fromResult INVALID_VIDEO_MODE = c'DC1394_INVALID_VIDEO_MODE +fromResult INVALID_FRAMERATE = c'DC1394_INVALID_FRAMERATE +fromResult INVALID_TRIGGER_MODE = c'DC1394_INVALID_TRIGGER_MODE +fromResult INVALID_TRIGGER_SOURCE = c'DC1394_INVALID_TRIGGER_SOURCE +fromResult INVALID_ISO_SPEED = c'DC1394_INVALID_ISO_SPEED +fromResult INVALID_IIDC_VERSION = c'DC1394_INVALID_IIDC_VERSION +fromResult INVALID_COLOR_CODING = c'DC1394_INVALID_COLOR_CODING +fromResult INVALID_COLOR_FILTER = c'DC1394_INVALID_COLOR_FILTER +fromResult INVALID_CAPTURE_POLICY = c'DC1394_INVALID_CAPTURE_POLICY +fromResult INVALID_ERROR_CODE = c'DC1394_INVALID_ERROR_CODE +fromResult INVALID_BAYER_METHOD = c'DC1394_INVALID_BAYER_METHOD +fromResult INVALID_VIDEO1394_DEVICE = c'DC1394_INVALID_VIDEO1394_DEVICE +fromResult INVALID_OPERATION_MODE = c'DC1394_INVALID_OPERATION_MODE +fromResult INVALID_TRIGGER_POLARITY = c'DC1394_INVALID_TRIGGER_POLARITY +fromResult INVALID_FEATURE_MODE = c'DC1394_INVALID_FEATURE_MODE +fromResult INVALID_LOG_TYPE = c'DC1394_INVALID_LOG_TYPE +fromResult INVALID_BYTE_ORDER = c'DC1394_INVALID_BYTE_ORDER +fromResult INVALID_STEREO_METHOD = c'DC1394_INVALID_STEREO_METHOD +fromResult BASLER_NO_MORE_SFF_CHUNKS = c'DC1394_BASLER_NO_MORE_SFF_CHUNKS +fromResult BASLER_CORRUPTED_SFF_CHUNK = c'DC1394_BASLER_CORRUPTED_SFF_CHUNK +fromResult BASLER_UNKNOWN_SFF_CHUNK = c'DC1394_BASLER_UNKNOWN_SFF_CHUNK ++toResult r + | r == c'DC1394_SUCCESS = SUCCESS + | r == c'DC1394_FAILURE = FAILURE + | r == c'DC1394_NOT_A_CAMERA = NOT_A_CAMERA + | r == c'DC1394_FUNCTION_NOT_SUPPORTED = FUNCTION_NOT_SUPPORTED + | r == c'DC1394_CAMERA_NOT_INITIALIZED = CAMERA_NOT_INITIALIZED + | r == c'DC1394_MEMORY_ALLOCATION_FAILURE = MEMORY_ALLOCATION_FAILURE + | r == c'DC1394_TAGGED_REGISTER_NOT_FOUND = TAGGED_REGISTER_NOT_FOUND + | r == c'DC1394_NO_ISO_CHANNEL = NO_ISO_CHANNEL + | r == c'DC1394_NO_BANDWIDTH = NO_BANDWIDTH + | r == c'DC1394_IOCTL_FAILURE = IOCTL_FAILURE + | r == c'DC1394_CAPTURE_IS_NOT_SET = CAPTURE_IS_NOT_SET + | r == c'DC1394_CAPTURE_IS_RUNNING = CAPTURE_IS_RUNNING + | r == c'DC1394_RAW1394_FAILURE = RAW1394_FAILURE + | r == c'DC1394_FORMAT7_ERROR_FLAG_1 = FORMAT7_ERROR_FLAG_1 + | r == c'DC1394_FORMAT7_ERROR_FLAG_2 = FORMAT7_ERROR_FLAG_2 + | r == c'DC1394_INVALID_ARGUMENT_VALUE = INVALID_ARGUMENT_VALUE + | r == c'DC1394_REQ_VALUE_OUTSIDE_RANGE = REQ_VALUE_OUTSIDE_RANGE + | r == c'DC1394_INVALID_FEATURE = INVALID_FEATURE + | r == c'DC1394_INVALID_VIDEO_FORMAT = INVALID_VIDEO_FORMAT + | r == c'DC1394_INVALID_VIDEO_MODE = INVALID_VIDEO_MODE + | r == c'DC1394_INVALID_FRAMERATE = INVALID_FRAMERATE + | r == c'DC1394_INVALID_TRIGGER_MODE = INVALID_TRIGGER_MODE + | r == c'DC1394_INVALID_TRIGGER_SOURCE = INVALID_TRIGGER_SOURCE + | r == c'DC1394_INVALID_ISO_SPEED = INVALID_ISO_SPEED + | r == c'DC1394_INVALID_IIDC_VERSION = INVALID_IIDC_VERSION + | r == c'DC1394_INVALID_COLOR_CODING = INVALID_COLOR_CODING + | r == c'DC1394_INVALID_COLOR_FILTER = INVALID_COLOR_FILTER + | r == c'DC1394_INVALID_CAPTURE_POLICY = INVALID_CAPTURE_POLICY + | r == c'DC1394_INVALID_ERROR_CODE = INVALID_ERROR_CODE + | r == c'DC1394_INVALID_BAYER_METHOD = INVALID_BAYER_METHOD + | r == c'DC1394_INVALID_VIDEO1394_DEVICE = INVALID_VIDEO1394_DEVICE + | r == c'DC1394_INVALID_OPERATION_MODE = INVALID_OPERATION_MODE + | r == c'DC1394_INVALID_TRIGGER_POLARITY = INVALID_TRIGGER_POLARITY + | r == c'DC1394_INVALID_FEATURE_MODE = INVALID_FEATURE_MODE + | r == c'DC1394_INVALID_LOG_TYPE = INVALID_LOG_TYPE + | r == c'DC1394_INVALID_BYTE_ORDER = INVALID_BYTE_ORDER + | r == c'DC1394_INVALID_STEREO_METHOD = INVALID_STEREO_METHOD + | r == c'DC1394_BASLER_NO_MORE_SFF_CHUNKS = BASLER_NO_MORE_SFF_CHUNKS + | r == c'DC1394_BASLER_CORRUPTED_SFF_CHUNK = BASLER_CORRUPTED_SFF_CHUNK + | r == c'DC1394_BASLER_UNKNOWN_SFF_CHUNK = BASLER_UNKNOWN_SFF_CHUNK ++data VideoMode = Mode_160x120_YUV444 + | Mode_320x240_YUV422 + | Mode_640x480_YUV411 + | Mode_640x480_YUV422 + | Mode_640x480_RGB8 + | Mode_640x480_MONO8 + | Mode_640x480_MONO16 + | Mode_800x600_YUV422 + | Mode_800x600_RGB8 + | Mode_800x600_MONO8 + | Mode_1024x768_YUV422 + | Mode_1024x768_RGB8 + | Mode_1024x768_MONO8 + | Mode_800x600_MONO16 + | Mode_1024x768_MONO16 + | Mode_1280x960_YUV422 + | Mode_1280x960_RGB8 + | Mode_1280x960_MONO8 + | Mode_1600x1200_YUV422 + | Mode_1600x1200_RGB8 + | Mode_1600x1200_MONO8 + | Mode_1280x960_MONO16 + | Mode_1600x1200_MONO16 + | Mode_EXIF + | Mode_FORMAT7_0 + | Mode_FORMAT7_1 + | Mode_FORMAT7_2 + | Mode_FORMAT7_3 + | Mode_FORMAT7_4 + | Mode_FORMAT7_5 + | Mode_FORMAT7_6 + | Mode_FORMAT7_7 + deriving (Show,Eq)++fromVideoMode Mode_160x120_YUV444 = c'DC1394_VIDEO_MODE_160x120_YUV444 +fromVideoMode Mode_320x240_YUV422 = c'DC1394_VIDEO_MODE_320x240_YUV422 +fromVideoMode Mode_640x480_YUV411 = c'DC1394_VIDEO_MODE_640x480_YUV411 +fromVideoMode Mode_640x480_YUV422 = c'DC1394_VIDEO_MODE_640x480_YUV422 +fromVideoMode Mode_640x480_RGB8 = c'DC1394_VIDEO_MODE_640x480_RGB8 +fromVideoMode Mode_640x480_MONO8 = c'DC1394_VIDEO_MODE_640x480_MONO8 +fromVideoMode Mode_640x480_MONO16 = c'DC1394_VIDEO_MODE_640x480_MONO16 +fromVideoMode Mode_800x600_YUV422 = c'DC1394_VIDEO_MODE_800x600_YUV422 +fromVideoMode Mode_800x600_RGB8 = c'DC1394_VIDEO_MODE_800x600_RGB8 +fromVideoMode Mode_800x600_MONO8 = c'DC1394_VIDEO_MODE_800x600_MONO8 +fromVideoMode Mode_1024x768_YUV422 = c'DC1394_VIDEO_MODE_1024x768_YUV422 +fromVideoMode Mode_1024x768_RGB8 = c'DC1394_VIDEO_MODE_1024x768_RGB8 +fromVideoMode Mode_1024x768_MONO8 = c'DC1394_VIDEO_MODE_1024x768_MONO8 +fromVideoMode Mode_800x600_MONO16 = c'DC1394_VIDEO_MODE_800x600_MONO16 +fromVideoMode Mode_1024x768_MONO16 = c'DC1394_VIDEO_MODE_1024x768_MONO16 +fromVideoMode Mode_1280x960_YUV422 = c'DC1394_VIDEO_MODE_1280x960_YUV422 +fromVideoMode Mode_1280x960_RGB8 = c'DC1394_VIDEO_MODE_1280x960_RGB8 +fromVideoMode Mode_1280x960_MONO8 = c'DC1394_VIDEO_MODE_1280x960_MONO8 +fromVideoMode Mode_1600x1200_YUV422 = c'DC1394_VIDEO_MODE_1600x1200_YUV422 +fromVideoMode Mode_1600x1200_RGB8 = c'DC1394_VIDEO_MODE_1600x1200_RGB8 +fromVideoMode Mode_1600x1200_MONO8 = c'DC1394_VIDEO_MODE_1600x1200_MONO8 +fromVideoMode Mode_1280x960_MONO16 = c'DC1394_VIDEO_MODE_1280x960_MONO16 +fromVideoMode Mode_1600x1200_MONO16 = c'DC1394_VIDEO_MODE_1600x1200_MONO16 +fromVideoMode Mode_EXIF = c'DC1394_VIDEO_MODE_EXIF +fromVideoMode Mode_FORMAT7_0 = c'DC1394_VIDEO_MODE_FORMAT7_0 +fromVideoMode Mode_FORMAT7_1 = c'DC1394_VIDEO_MODE_FORMAT7_1 +fromVideoMode Mode_FORMAT7_2 = c'DC1394_VIDEO_MODE_FORMAT7_2 +fromVideoMode Mode_FORMAT7_3 = c'DC1394_VIDEO_MODE_FORMAT7_3 +fromVideoMode Mode_FORMAT7_4 = c'DC1394_VIDEO_MODE_FORMAT7_4 +fromVideoMode Mode_FORMAT7_5 = c'DC1394_VIDEO_MODE_FORMAT7_5 +fromVideoMode Mode_FORMAT7_6 = c'DC1394_VIDEO_MODE_FORMAT7_6 +fromVideoMode Mode_FORMAT7_7 = c'DC1394_VIDEO_MODE_FORMAT7_7 ++toVideoMode i + | i == Mode_160x120_YUV444 = c'DC1394_VIDEO_MODE_160x120_YUV444 + | i == Mode_320x240_YUV422 = c'DC1394_VIDEO_MODE_320x240_YUV422 + | i == Mode_640x480_YUV411 = c'DC1394_VIDEO_MODE_640x480_YUV411 + | i == Mode_640x480_YUV422 = c'DC1394_VIDEO_MODE_640x480_YUV422 + | i == Mode_640x480_RGB8 = c'DC1394_VIDEO_MODE_640x480_RGB8 + | i == Mode_640x480_MONO8 = c'DC1394_VIDEO_MODE_640x480_MONO8 + | i == Mode_640x480_MONO16 = c'DC1394_VIDEO_MODE_640x480_MONO16 + | i == Mode_800x600_YUV422 = c'DC1394_VIDEO_MODE_800x600_YUV422 + | i == Mode_800x600_RGB8 = c'DC1394_VIDEO_MODE_800x600_RGB8 + | i == Mode_800x600_MONO8 = c'DC1394_VIDEO_MODE_800x600_MONO8 + | i == Mode_1024x768_YUV422 = c'DC1394_VIDEO_MODE_1024x768_YUV422 + | i == Mode_1024x768_RGB8 = c'DC1394_VIDEO_MODE_1024x768_RGB8 + | i == Mode_1024x768_MONO8 = c'DC1394_VIDEO_MODE_1024x768_MONO8 + | i == Mode_800x600_MONO16 = c'DC1394_VIDEO_MODE_800x600_MONO16 + | i == Mode_1024x768_MONO16 = c'DC1394_VIDEO_MODE_1024x768_MONO16 + | i == Mode_1280x960_YUV422 = c'DC1394_VIDEO_MODE_1280x960_YUV422 + | i == Mode_1280x960_RGB8 = c'DC1394_VIDEO_MODE_1280x960_RGB8 + | i == Mode_1280x960_MONO8 = c'DC1394_VIDEO_MODE_1280x960_MONO8 + | i == Mode_1600x1200_YUV422 = c'DC1394_VIDEO_MODE_1600x1200_YUV422 + | i == Mode_1600x1200_RGB8 = c'DC1394_VIDEO_MODE_1600x1200_RGB8 + | i == Mode_1600x1200_MONO8 = c'DC1394_VIDEO_MODE_1600x1200_MONO8 + | i == Mode_1280x960_MONO16 = c'DC1394_VIDEO_MODE_1280x960_MONO16 + | i == Mode_1600x1200_MONO16 = c'DC1394_VIDEO_MODE_1600x1200_MONO16 + | i == Mode_EXIF = c'DC1394_VIDEO_MODE_EXIF + | i == Mode_FORMAT7_0 = c'DC1394_VIDEO_MODE_FORMAT7_0 + | i == Mode_FORMAT7_1 = c'DC1394_VIDEO_MODE_FORMAT7_1 + | i == Mode_FORMAT7_2 = c'DC1394_VIDEO_MODE_FORMAT7_2 + | i == Mode_FORMAT7_3 = c'DC1394_VIDEO_MODE_FORMAT7_3 + | i == Mode_FORMAT7_4 = c'DC1394_VIDEO_MODE_FORMAT7_4 + | i == Mode_FORMAT7_5 = c'DC1394_VIDEO_MODE_FORMAT7_5 + | i == Mode_FORMAT7_6 = c'DC1394_VIDEO_MODE_FORMAT7_6 + | i == Mode_FORMAT7_7 = c'DC1394_VIDEO_MODE_FORMAT7_7 ++data Framerate = Rate_1_875 + | Rate_3_75 + | Rate_7_5 + | Rate_15 + | Rate_30 + | Rate_60 + | Rate_120 + | Rate_240 + deriving (Show,Eq)++fromFramerate Rate_1_875 = c'DC1394_FRAMERATE_1_875 +fromFramerate Rate_3_75 = c'DC1394_FRAMERATE_3_75 +fromFramerate Rate_7_5 = c'DC1394_FRAMERATE_7_5 +fromFramerate Rate_15 = c'DC1394_FRAMERATE_15 +fromFramerate Rate_30 = c'DC1394_FRAMERATE_30 +fromFramerate Rate_60 = c'DC1394_FRAMERATE_60 +fromFramerate Rate_120 = c'DC1394_FRAMERATE_120 +fromFramerate Rate_240 = c'DC1394_FRAMERATE_240 ++toFramerate i + | i == Rate_1_875 = c'DC1394_FRAMERATE_1_875 + | i == Rate_3_75 = c'DC1394_FRAMERATE_3_75 + | i == Rate_7_5 = c'DC1394_FRAMERATE_7_5 + | i == Rate_15 = c'DC1394_FRAMERATE_15 + | i == Rate_30 = c'DC1394_FRAMERATE_30 + | i == Rate_60 = c'DC1394_FRAMERATE_60 + | i == Rate_120 = c'DC1394_FRAMERATE_120 + | i == Rate_240 = c'DC1394_FRAMERATE_240 ++
+ simple-firewire.cabal view
@@ -0,0 +1,33 @@+Name: simple-firewire+Version: 0.1+Synopsis: Simplified interface for firewire cameras+Description: A simplified interface for firewire cameras based on libdc1394 <http://damien.douxchamps.net/ieee1394/libdc1394/>+ .+ Currently this interfaces with CV library and+ provides both plain IO based interface for+ controlling the cameras.+ .++ .+ The interface will most likely change in the future.+Homepage: https://github.com/aleator/simple-firewire+License: BSD3+License-file: LICENSE+Author: Ville Tirronen+Maintainer: aleator@gmail.com+Category: Graphics, Machine Vision, System+Build-type: Simple+Cabal-version: >=1.2+Extra-Source-Files:+ Examples/Example1.hs++Library+ Exposed-modules: + System.Camera.Firewire.Simple+ Build-depends: + base > 4 && < 5,+ bindings-dc1394 >= 0.1 && < 1,+ CV >= 0.3.1.2 && < 0.4++ -- Other-modules: + -- Build-tools: