{-# Language ForeignFunctionInterface, EmptyDataDecls #-}

module AI.CV.OpenCV.Video
where

import Foreign
import Foreign.C
import AI.CV.OpenCV.CxCore

data Priv_CvVideoWriter

type CvVideoWriter = Ptr Priv_CvVideoWriter

foreign import ccall unsafe "HOpenCV_wrap.h wrap_cvCreateVideoWriter"
  wrap_cvCreateVideoWriter :: CString -> CInt -> CDouble -> CInt -> CInt -> IO (Ptr Priv_CvVideoWriter)

type FourCC = String

createVideoWriter :: String -> FourCC -> Double -> CvSize -> IO CvVideoWriter
createVideoWriter file fourCC fps size
  = withCString file $ \f  ->
    wrap_cvCreateVideoWriter f (toCInt fourCC) (realToFrac fps) (sizeWidth size) (sizeHeight size)
 where
  toCInt = fromIntegral . sum . map fromEnum

foreign import ccall unsafe "highgui.h cvReleaseVideoWriter"
  releaseVideoWriter :: CvVideoWriter -> IO ()

foreign import ccall unsafe "highgui.h cvWriteFrame"
  cvWriteFrame :: CvVideoWriter -> Ptr IplImage -> IO CInt

writeFrame :: CvVideoWriter -> Ptr IplImage -> IO Int
writeFrame vw im
  = do i <- cvWriteFrame vw im
       return $ fromIntegral i