ffmpeg-light-0.11.0: src/Codec/FFmpeg.hs
{-# 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 l) = av_log_set_level 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 = av_register_all >> avdevice_register_all >> setLogLevel avLogQuiet