{-# LANGUAGE ForeignFunctionInterface, FlexibleContexts #-}
-- | Interface to initialize FFmpeg, decode video files, encode video
-- files, and convert decoded image frames to JuicyPixels images.
module Codec.FFmpeg (-- * Initialization
                     initFFmpeg, setLogLevel,
                     -- * Decoding
                     imageReader, imageReaderTime,
                     imageReaderT, imageReaderTimeT,
                     -- * Encoding
                     EncodingParams(..), defaultParams, imageWriter,
                     -- * Types and Enums
                     module Codec.FFmpeg.Types, 
                     module Codec.FFmpeg.Enums
                     )where
import Codec.FFmpeg.Encode
import Codec.FFmpeg.Enums
import Codec.FFmpeg.Juicy
import Codec.FFmpeg.Types
import Foreign.C.Types (CInt(..))

foreign import ccall "av_register_all" av_register_all :: IO ()
foreign import ccall "avdevice_register_all" avdevice_register_all :: IO ()

-- foreign import ccall "avcodec_register_all" avcodec_register_all :: IO (

foreign import ccall "av_log_set_level" av_log_set_level :: CInt -> IO ()

-- | Log output is sent to stderr.
setLogLevel :: LogLevel -> IO ()
setLogLevel :: LogLevel -> IO ()
setLogLevel (LogLevel l :: CInt
l) = CInt -> IO ()
av_log_set_level CInt
l

-- | Initialize FFmpeg by registering all known codecs. This /must/ be
-- called before using other FFmpeg functions. The debug level is
-- initially set to @quiet@. If you would like the standard ffmpeg
-- debug level, call @setLogLevel avLogInfo@ after @initFFmpeg@.
initFFmpeg :: IO ()
initFFmpeg :: IO ()
initFFmpeg = IO ()
av_register_all IO () -> IO () -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> IO ()
avdevice_register_all IO () -> IO () -> IO ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> LogLevel -> IO ()
setLogLevel LogLevel
avLogQuiet