{-# LINE 1 "src/Codec/Avif/FFI.chs" #-}
{-# LANGUAGE DeriveDataTypeable #-}
module Codec.Avif.FFI ( avifImageCreate
, avifImageCreateEmpty
, avifImageDestroy
, avifEncoderCreate
, avifEncoderDestroy
, avifEncoderWrite
, avifDecoderCreate
, avifDecoderDestroy
, avifDecoderReadMemory
, avifRGBImageSetDefaults
, avifRGBImagePixelSize
, avifImageRGBToYUV
, avifImageYUVToRGB
, avifRGBImageAllocatePixels
, avifRGBImageFreePixels
, AvifPixelFormat (..)
, AvifResult (..)
) where
import qualified Foreign.C.Types as C2HSImp
import qualified Foreign.ForeignPtr as C2HSImp
import qualified Foreign.Ptr as C2HSImp
import Control.Exception (Exception)
import Data.Coerce (coerce)
import Data.Typeable (Typeable (..))
import Foreign.C.Types (CInt, CSize)
import Foreign.Ptr (castPtr, Ptr)
type UInt8 = (C2HSImp.CUChar)
{-# LINE 30 "src/Codec/Avif/FFI.chs" #-}
type UInt32 = (C2HSImp.CUInt)
{-# LINE 31 "src/Codec/Avif/FFI.chs" #-}
data AvifPixelFormat = AvifPixelFormatNone
| AvifPixelFormatYuv444
| AvifPixelFormatYuv422
| AvifPixelFormatYuv420
| AvifPixelFormatYuv400
instance Enum AvifPixelFormat where
succ AvifPixelFormatNone = AvifPixelFormatYuv444
succ AvifPixelFormatYuv444 = AvifPixelFormatYuv422
succ AvifPixelFormatYuv422 = AvifPixelFormatYuv420
succ AvifPixelFormatYuv420 = AvifPixelFormatYuv400
succ AvifPixelFormatYuv400 = error "AvifPixelFormat.succ: AvifPixelFormatYuv400 has no successor"
pred AvifPixelFormatYuv444 = AvifPixelFormatNone
pred AvifPixelFormatYuv422 = AvifPixelFormatYuv444
pred AvifPixelFormatYuv420 = AvifPixelFormatYuv422
pred AvifPixelFormatYuv400 = AvifPixelFormatYuv420
pred AvifPixelFormatNone = error "AvifPixelFormat.pred: AvifPixelFormatNone has no predecessor"
enumFromTo from to = go from
where
end = fromEnum to
go v = case compare (fromEnum v) end of
LT -> v : go (succ v)
EQ -> [v]
GT -> []
enumFrom from = enumFromTo from AvifPixelFormatYuv400
fromEnum AvifPixelFormatNone = 0
fromEnum AvifPixelFormatYuv444 = 1
fromEnum AvifPixelFormatYuv422 = 2
fromEnum AvifPixelFormatYuv420 = 3
fromEnum AvifPixelFormatYuv400 = 4
toEnum 0 = AvifPixelFormatNone
toEnum 1 = AvifPixelFormatYuv444
toEnum 2 = AvifPixelFormatYuv422
toEnum 3 = AvifPixelFormatYuv420
toEnum 4 = AvifPixelFormatYuv400
toEnum unmatched = error ("AvifPixelFormat.toEnum: Cannot match " ++ show unmatched)
{-# LINE 33 "src/Codec/Avif/FFI.chs" #-}
data AvifResult = AvifResultOk
| AvifResultUnknownError
| AvifResultInvalidFtyp
| AvifResultNoContent
| AvifResultNoYuvFormatSelected
| AvifResultReformatFailed
| AvifResultUnsupportedDepth
| AvifResultEncodeColorFailed
| AvifResultEncodeAlphaFailed
| AvifResultBmffParseFailed
| AvifResultNoAv1ItemsFound
| AvifResultDecodeColorFailed
| AvifResultDecodeAlphaFailed
| AvifResultColorAlphaSizeMismatch
| AvifResultIspeSizeMismatch
| AvifResultNoCodecAvailable
| AvifResultNoImagesRemaining
| AvifResultInvalidExifPayload
| AvifResultInvalidImageGrid
| AvifResultInvalidCodecSpecificOption
| AvifResultTruncatedData
| AvifResultIoNotSet
| AvifResultIoError
| AvifResultWaitingOnIo
| AvifResultInvalidArgument
| AvifResultNotImplemented
deriving (Eq,Show,Typeable)
instance Enum AvifResult where
succ AvifResultOk = AvifResultUnknownError
succ AvifResultUnknownError = AvifResultInvalidFtyp
succ AvifResultInvalidFtyp = AvifResultNoContent
succ AvifResultNoContent = AvifResultNoYuvFormatSelected
succ AvifResultNoYuvFormatSelected = AvifResultReformatFailed
succ AvifResultReformatFailed = AvifResultUnsupportedDepth
succ AvifResultUnsupportedDepth = AvifResultEncodeColorFailed
succ AvifResultEncodeColorFailed = AvifResultEncodeAlphaFailed
succ AvifResultEncodeAlphaFailed = AvifResultBmffParseFailed
succ AvifResultBmffParseFailed = AvifResultNoAv1ItemsFound
succ AvifResultNoAv1ItemsFound = AvifResultDecodeColorFailed
succ AvifResultDecodeColorFailed = AvifResultDecodeAlphaFailed
succ AvifResultDecodeAlphaFailed = AvifResultColorAlphaSizeMismatch
succ AvifResultColorAlphaSizeMismatch = AvifResultIspeSizeMismatch
succ AvifResultIspeSizeMismatch = AvifResultNoCodecAvailable
succ AvifResultNoCodecAvailable = AvifResultNoImagesRemaining
succ AvifResultNoImagesRemaining = AvifResultInvalidExifPayload
succ AvifResultInvalidExifPayload = AvifResultInvalidImageGrid
succ AvifResultInvalidImageGrid = AvifResultInvalidCodecSpecificOption
succ AvifResultInvalidCodecSpecificOption = AvifResultTruncatedData
succ AvifResultTruncatedData = AvifResultIoNotSet
succ AvifResultIoNotSet = AvifResultIoError
succ AvifResultIoError = AvifResultWaitingOnIo
succ AvifResultWaitingOnIo = AvifResultInvalidArgument
succ AvifResultInvalidArgument = AvifResultNotImplemented
succ AvifResultNotImplemented = error "AvifResult.succ: AvifResultNotImplemented has no successor"
pred AvifResultUnknownError = AvifResultOk
pred AvifResultInvalidFtyp = AvifResultUnknownError
pred AvifResultNoContent = AvifResultInvalidFtyp
pred AvifResultNoYuvFormatSelected = AvifResultNoContent
pred AvifResultReformatFailed = AvifResultNoYuvFormatSelected
pred AvifResultUnsupportedDepth = AvifResultReformatFailed
pred AvifResultEncodeColorFailed = AvifResultUnsupportedDepth
pred AvifResultEncodeAlphaFailed = AvifResultEncodeColorFailed
pred AvifResultBmffParseFailed = AvifResultEncodeAlphaFailed
pred AvifResultNoAv1ItemsFound = AvifResultBmffParseFailed
pred AvifResultDecodeColorFailed = AvifResultNoAv1ItemsFound
pred AvifResultDecodeAlphaFailed = AvifResultDecodeColorFailed
pred AvifResultColorAlphaSizeMismatch = AvifResultDecodeAlphaFailed
pred AvifResultIspeSizeMismatch = AvifResultColorAlphaSizeMismatch
pred AvifResultNoCodecAvailable = AvifResultIspeSizeMismatch
pred AvifResultNoImagesRemaining = AvifResultNoCodecAvailable
pred AvifResultInvalidExifPayload = AvifResultNoImagesRemaining
pred AvifResultInvalidImageGrid = AvifResultInvalidExifPayload
pred AvifResultInvalidCodecSpecificOption = AvifResultInvalidImageGrid
pred AvifResultTruncatedData = AvifResultInvalidCodecSpecificOption
pred AvifResultIoNotSet = AvifResultTruncatedData
pred AvifResultIoError = AvifResultIoNotSet
pred AvifResultWaitingOnIo = AvifResultIoError
pred AvifResultInvalidArgument = AvifResultWaitingOnIo
pred AvifResultNotImplemented = AvifResultInvalidArgument
pred AvifResultOk = error "AvifResult.pred: AvifResultOk has no predecessor"
enumFromTo :: AvifResult -> AvifResult -> [AvifResult]
enumFromTo AvifResult
from AvifResult
to = AvifResult -> [AvifResult]
forall {t}. Enum t => t -> [t]
go AvifResult
from
where
end :: Int
end = AvifResult -> Int
forall a. Enum a => a -> Int
fromEnum AvifResult
to
go :: t -> [t]
go t
v = case Int -> Int -> Ordering
forall a. Ord a => a -> a -> Ordering
compare (t -> Int
forall a. Enum a => a -> Int
fromEnum t
v) Int
end of
Ordering
LT -> t
v t -> [t] -> [t]
forall a. a -> [a] -> [a]
: t -> [t]
go (t -> t
forall a. Enum a => a -> a
succ t
v)
Ordering
EQ -> [t
v]
Ordering
GT -> []
enumFrom :: AvifResult -> [AvifResult]
enumFrom AvifResult
from = AvifResult -> AvifResult -> [AvifResult]
forall a. Enum a => a -> a -> [a]
enumFromTo AvifResult
from AvifResult
AvifResultNotImplemented
fromEnum :: AvifResult -> Int
fromEnum AvifResult
AvifResultOk = Int
0
fromEnum AvifResult
AvifResultUnknownError = Int
1
fromEnum AvifResult
AvifResultInvalidFtyp = Int
2
fromEnum AvifResult
AvifResultNoContent = Int
3
fromEnum AvifResult
AvifResultNoYuvFormatSelected = Int
4
fromEnum AvifResult
AvifResultReformatFailed = Int
5
fromEnum AvifResult
AvifResultUnsupportedDepth = Int
6
fromEnum AvifResult
AvifResultEncodeColorFailed = Int
7
fromEnum AvifResult
AvifResultEncodeAlphaFailed = Int
8
fromEnum AvifResult
AvifResultBmffParseFailed = Int
9
fromEnum AvifResult
AvifResultNoAv1ItemsFound = Int
10
fromEnum AvifResult
AvifResultDecodeColorFailed = Int
11
fromEnum AvifResult
AvifResultDecodeAlphaFailed = Int
12
fromEnum AvifResult
AvifResultColorAlphaSizeMismatch = Int
13
fromEnum AvifResult
AvifResultIspeSizeMismatch = Int
14
fromEnum AvifResult
AvifResultNoCodecAvailable = Int
15
fromEnum AvifResult
AvifResultNoImagesRemaining = Int
16
fromEnum AvifResult
AvifResultInvalidExifPayload = Int
17
fromEnum AvifResult
AvifResultInvalidImageGrid = Int
18
fromEnum AvifResult
AvifResultInvalidCodecSpecificOption = Int
19
fromEnum AvifResult
AvifResultTruncatedData = Int
20
fromEnum AvifResult
AvifResultIoNotSet = Int
21
fromEnum AvifResult
AvifResultIoError = Int
22
fromEnum AvifResult
AvifResultWaitingOnIo = Int
23
fromEnum AvifResult
AvifResultInvalidArgument = Int
24
fromEnum AvifResult
AvifResultNotImplemented = Int
25
toEnum :: Int -> AvifResult
toEnum Int
0 = AvifResult
AvifResultOk
toEnum Int
1 = AvifResult
AvifResultUnknownError
toEnum Int
2 = AvifResult
AvifResultInvalidFtyp
toEnum Int
3 = AvifResult
AvifResultNoContent
toEnum Int
4 = AvifResult
AvifResultNoYuvFormatSelected
toEnum Int
5 = AvifResult
AvifResultReformatFailed
toEnum Int
6 = AvifResult
AvifResultUnsupportedDepth
toEnum Int
7 = AvifResult
AvifResultEncodeColorFailed
toEnum Int
8 = AvifResult
AvifResultEncodeAlphaFailed
toEnum Int
9 = AvifResult
AvifResultBmffParseFailed
toEnum Int
10 = AvifResult
AvifResultNoAv1ItemsFound
toEnum Int
11 = AvifResult
AvifResultDecodeColorFailed
toEnum Int
12 = AvifResult
AvifResultDecodeAlphaFailed
toEnum Int
13 = AvifResult
AvifResultColorAlphaSizeMismatch
toEnum Int
14 = AvifResult
AvifResultIspeSizeMismatch
toEnum Int
15 = AvifResult
AvifResultNoCodecAvailable
toEnum Int
16 = AvifResult
AvifResultNoImagesRemaining
toEnum Int
17 = AvifResult
AvifResultInvalidExifPayload
toEnum Int
18 = AvifResult
AvifResultInvalidImageGrid
toEnum Int
19 = AvifResult
AvifResultInvalidCodecSpecificOption
toEnum Int
20 = AvifResult
AvifResultTruncatedData
toEnum Int
21 = AvifResult
AvifResultIoNotSet
toEnum Int
22 = AvifResult
AvifResultIoError
toEnum Int
23 = AvifResult
AvifResultWaitingOnIo
toEnum Int
24 = AvifResult
AvifResultInvalidArgument
toEnum Int
25 = AvifResult
AvifResultNotImplemented
toEnum Int
unmatched = String -> AvifResult
forall a. HasCallStack => String -> a
error (String
"AvifResult.toEnum: Cannot match " String -> ShowS
forall a. [a] -> [a] -> [a]
++ Int -> String
forall a. Show a => a -> String
show Int
unmatched)
{-# LINE 34 "src/Codec/Avif/FFI.chs" #-}
instance Exception AvifResult where
data AvifImage
data AvifEncoder
data AvifDecoder
data AvifRwData
data AvifRGBImage
type AvifEncoderPtr = C2HSImp.ForeignPtr (AvifEncoder)
{-# LINE 45 "src/Codec/Avif/FFI.chs" #-}
type AvifDecoderPtr = C2HSImp.ForeignPtr (AvifDecoder)
{-# LINE 46 "src/Codec/Avif/FFI.chs" #-}
avifImageCreate :: (CInt) -> (CInt) -> (CInt) -> (AvifPixelFormat) -> IO ((Ptr AvifImage))
avifImageCreate a1 a2 a3 a4 =
let {a1' = fromIntegral a1} in
let {a2' = fromIntegral a2} in
let {a3' = fromIntegral a3} in
let {a4' = (fromIntegral . fromEnum) a4} in
avifImageCreate'_ a1' a2' a3' a4' >>= \res ->
let {res' = castPtr res} in
return (res')
{-# LINE 48 "src/Codec/Avif/FFI.chs" #-}
avifImageCreateEmpty :: IO ((Ptr AvifImage))
avifImageCreateEmpty =
avifImageCreateEmpty'_ >>= \res ->
let {res' = castPtr res} in
return (res')
{-# LINE 49 "src/Codec/Avif/FFI.chs" #-}
avifImageDestroy :: (Ptr AvifImage) -> IO ()
avifImageDestroy a1 =
let {a1' = castPtr a1} in
avifImageDestroy'_ a1' >>
return ()
{-# LINE 50 "src/Codec/Avif/FFI.chs" #-}
avifEncoderCreate :: IO ((Ptr AvifEncoder))
avifEncoderCreate =
avifEncoderCreate'_ >>= \res ->
let {res' = castPtr res} in
return (res')
{-# LINE 52 "src/Codec/Avif/FFI.chs" #-}
avifEncoderWrite :: (AvifEncoderPtr) -> (Ptr AvifImage) -> (Ptr AvifRwData) -> IO ((AvifResult))
avifEncoderWrite a1 a2 a3 =
C2HSImp.withForeignPtr a1 $ \a1' ->
let {a2' = castPtr a2} in
let {a3' = castPtr a3} in
avifEncoderWrite'_ a1' a2' a3' >>= \res ->
let {res' = (toEnum . fromIntegral) res} in
return (res')
{-# LINE 53 "src/Codec/Avif/FFI.chs" #-}
avifDecoderCreate :: IO ((Ptr AvifDecoder))
avifDecoderCreate =
avifDecoderCreate'_ >>= \res ->
let {res' = castPtr res} in
return (res')
{-# LINE 55 "src/Codec/Avif/FFI.chs" #-}
avifDecoderReadMemory :: (AvifDecoderPtr) -> (Ptr AvifImage) -> (Ptr UInt8) -> (CSize) -> IO ((AvifResult))
avifDecoderReadMemory a1 a2 a3 a4 =
C2HSImp.withForeignPtr a1 $ \a1' ->
let {a2' = castPtr a2} in
let {a3' = castPtr a3} in
let {a4' = coerce a4} in
avifDecoderReadMemory'_ a1' a2' a3' a4' >>= \res ->
let {res' = (toEnum . fromIntegral) res} in
return (res')
{-# LINE 56 "src/Codec/Avif/FFI.chs" #-}
avifRGBImageSetDefaults :: (Ptr AvifRGBImage) -> (Ptr AvifImage) -> IO ()
avifRGBImageSetDefaults a1 a2 =
let {a1' = castPtr a1} in
let {a2' = castPtr a2} in
avifRGBImageSetDefaults'_ a1' a2' >>
return ()
{-# LINE 58 "src/Codec/Avif/FFI.chs" #-}
avifRGBImagePixelSize :: (Ptr AvifRGBImage) -> IO ((UInt32))
avifRGBImagePixelSize a1 =
let {a1' = castPtr a1} in
avifRGBImagePixelSize'_ a1' >>= \res ->
let {res' = id res} in
return (res')
{-# LINE 59 "src/Codec/Avif/FFI.chs" #-}
avifImageRGBToYUV :: (Ptr AvifImage) -> (Ptr AvifRGBImage) -> IO ((AvifResult))
avifImageRGBToYUV a1 a2 =
let {a1' = castPtr a1} in
let {a2' = castPtr a2} in
avifImageRGBToYUV'_ a1' a2' >>= \res ->
let {res' = (toEnum . fromIntegral) res} in
return (res')
{-# LINE 61 "src/Codec/Avif/FFI.chs" #-}
avifImageYUVToRGB :: (Ptr AvifImage) -> (Ptr AvifRGBImage) -> IO ((AvifResult))
avifImageYUVToRGB a1 a2 =
let {a1' = castPtr a1} in
let {a2' = castPtr a2} in
avifImageYUVToRGB'_ a1' a2' >>= \res ->
let {res' = (toEnum . fromIntegral) res} in
return (res')
{-# LINE 62 "src/Codec/Avif/FFI.chs" #-}
avifRGBImageAllocatePixels :: (Ptr AvifRGBImage) -> IO ()
avifRGBImageAllocatePixels a1 =
let {a1' = castPtr a1} in
avifRGBImageAllocatePixels'_ a1' >>
return ()
{-# LINE 64 "src/Codec/Avif/FFI.chs" #-}
avifRGBImageFreePixels :: (Ptr AvifRGBImage) -> IO ()
avifRGBImageFreePixels a1 =
let {a1' = castPtr a1} in
avifRGBImageFreePixels'_ a1' >>
return ()
{-# LINE 65 "src/Codec/Avif/FFI.chs" #-}
foreign import ccall "Codec/Avif/FFI.chs.h &avifEncoderDestroy"
avifEncoderDestroy :: C2HSImp.FinalizerPtr ()
foreign import ccall "Codec/Avif/FFI.chs.h &avifDecoderDestroy"
avifDecoderDestroy :: C2HSImp.FinalizerPtr ()
foreign import ccall safe "Codec/Avif/FFI.chs.h avifImageCreate"
avifImageCreate'_ :: (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (C2HSImp.CInt -> (IO (C2HSImp.Ptr ()))))))
foreign import ccall safe "Codec/Avif/FFI.chs.h avifImageCreateEmpty"
avifImageCreateEmpty'_ :: (IO (C2HSImp.Ptr ()))
foreign import ccall safe "Codec/Avif/FFI.chs.h avifImageDestroy"
avifImageDestroy'_ :: ((C2HSImp.Ptr ()) -> (IO ()))
foreign import ccall safe "Codec/Avif/FFI.chs.h avifEncoderCreate"
avifEncoderCreate'_ :: (IO (C2HSImp.Ptr (AvifEncoder)))
foreign import ccall safe "Codec/Avif/FFI.chs.h avifEncoderWrite"
avifEncoderWrite'_ :: ((C2HSImp.Ptr (AvifEncoder)) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt))))
foreign import ccall safe "Codec/Avif/FFI.chs.h avifDecoderCreate"
avifDecoderCreate'_ :: (IO (C2HSImp.Ptr (AvifDecoder)))
foreign import ccall safe "Codec/Avif/FFI.chs.h avifDecoderReadMemory"
avifDecoderReadMemory'_ :: ((C2HSImp.Ptr (AvifDecoder)) -> ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> (IO C2HSImp.CInt)))))
foreign import ccall safe "Codec/Avif/FFI.chs.h avifRGBImageSetDefaults"
avifRGBImageSetDefaults'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO ())))
foreign import ccall safe "Codec/Avif/FFI.chs.h avifRGBImagePixelSize"
avifRGBImagePixelSize'_ :: ((C2HSImp.Ptr ()) -> (IO C2HSImp.CUInt))
foreign import ccall safe "Codec/Avif/FFI.chs.h avifImageRGBToYUV"
avifImageRGBToYUV'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt)))
foreign import ccall safe "Codec/Avif/FFI.chs.h avifImageYUVToRGB"
avifImageYUVToRGB'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt)))
foreign import ccall safe "Codec/Avif/FFI.chs.h avifRGBImageAllocatePixels"
avifRGBImageAllocatePixels'_ :: ((C2HSImp.Ptr ()) -> (IO ()))
foreign import ccall safe "Codec/Avif/FFI.chs.h avifRGBImageFreePixels"
avifRGBImageFreePixels'_ :: ((C2HSImp.Ptr ()) -> (IO ()))