{-# 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); type UInt32 = (C2HSImp.CUInt)
{-# LINE 30 "src/Codec/Avif/FFI.chs" #-}
data AvifPixelFormat = AvifPixelFormatNone
| AvifPixelFormatYuv444
| AvifPixelFormatYuv422
| AvifPixelFormatYuv420
| AvifPixelFormatYuv400
| AvifPixelFormatCount
instance Enum AvifPixelFormat where
succ AvifPixelFormatNone = AvifPixelFormatYuv444
succ AvifPixelFormatYuv444 = AvifPixelFormatYuv422
succ AvifPixelFormatYuv422 = AvifPixelFormatYuv420
succ AvifPixelFormatYuv420 = AvifPixelFormatYuv400
succ AvifPixelFormatYuv400 = AvifPixelFormatCount
succ AvifPixelFormatCount = error "AvifPixelFormat.succ: AvifPixelFormatCount has no successor"
pred AvifPixelFormatYuv444 = AvifPixelFormatNone
pred AvifPixelFormatYuv422 = AvifPixelFormatYuv444
pred AvifPixelFormatYuv420 = AvifPixelFormatYuv422
pred AvifPixelFormatYuv400 = AvifPixelFormatYuv420
pred AvifPixelFormatCount = AvifPixelFormatYuv400
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 AvifPixelFormatCount
fromEnum AvifPixelFormatNone = 0
fromEnum AvifPixelFormatYuv444 = 1
fromEnum AvifPixelFormatYuv422 = 2
fromEnum AvifPixelFormatYuv420 = 3
fromEnum AvifPixelFormatYuv400 = 4
fromEnum AvifPixelFormatCount = 5
toEnum 0 = AvifPixelFormatNone
toEnum 1 = AvifPixelFormatYuv444
toEnum 2 = AvifPixelFormatYuv422
toEnum 3 = AvifPixelFormatYuv420
toEnum 4 = AvifPixelFormatYuv400
toEnum 5 = AvifPixelFormatCount
toEnum unmatched = error ("AvifPixelFormat.toEnum: Cannot match " ++ show unmatched)
{-# LINE 32 "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
| AvifResultOutOfMemory
| AvifResultCannotChangeSetting
| AvifResultIncompatibleImage
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 = AvifResultOutOfMemory
succ AvifResultOutOfMemory = AvifResultCannotChangeSetting
succ AvifResultCannotChangeSetting = AvifResultIncompatibleImage
succ AvifResultIncompatibleImage = error "AvifResult.succ: AvifResultIncompatibleImage has no successor"
pred :: AvifResult -> AvifResult
pred AvifResult
AvifResultUnknownError = AvifResult
AvifResultOk
pred AvifResultInvalidFtyp = AvifResultUnknownError
pred AvifResultNoContent = AvifResultInvalidFtyp
pred AvifResult
AvifResultNoYuvFormatSelected = AvifResult
AvifResultNoContent
pred AvifResultReformatFailed = AvifResultNoYuvFormatSelected
pred AvifResultUnsupportedDepth = AvifResultReformatFailed
pred AvifResult
AvifResultEncodeColorFailed = AvifResult
AvifResultUnsupportedDepth
pred AvifResultEncodeAlphaFailed = AvifResultEncodeColorFailed
pred AvifResultBmffParseFailed = AvifResultEncodeAlphaFailed
pred AvifResult
AvifResultNoAv1ItemsFound = AvifResult
AvifResultBmffParseFailed
pred AvifResultDecodeColorFailed = AvifResultNoAv1ItemsFound
pred AvifResult
AvifResultDecodeAlphaFailed = AvifResult
AvifResultDecodeColorFailed
pred AvifResult
AvifResultColorAlphaSizeMismatch = AvifResult
AvifResultDecodeAlphaFailed
pred AvifResult
AvifResultIspeSizeMismatch = AvifResult
AvifResultColorAlphaSizeMismatch
pred AvifResult
AvifResultNoCodecAvailable = AvifResult
AvifResultIspeSizeMismatch
pred AvifResult
AvifResultNoImagesRemaining = AvifResult
AvifResultNoCodecAvailable
pred AvifResult
AvifResultInvalidExifPayload = AvifResult
AvifResultNoImagesRemaining
pred AvifResult
AvifResultInvalidImageGrid = AvifResult
AvifResultInvalidExifPayload
pred AvifResult
AvifResultInvalidCodecSpecificOption = AvifResult
AvifResultInvalidImageGrid
pred AvifResult
AvifResultTruncatedData = AvifResult
AvifResultInvalidCodecSpecificOption
pred AvifResult
AvifResultIoNotSet = AvifResult
AvifResultTruncatedData
pred AvifResult
AvifResultIoError = AvifResult
AvifResultIoNotSet
pred AvifResult
AvifResultWaitingOnIo = AvifResult
AvifResultIoError
pred AvifResult
AvifResultInvalidArgument = AvifResult
AvifResultWaitingOnIo
pred AvifResult
AvifResultNotImplemented = AvifResult
AvifResultInvalidArgument
pred AvifResult
AvifResultOutOfMemory = AvifResult
AvifResultNotImplemented
pred AvifResult
AvifResultCannotChangeSetting = AvifResult
AvifResultOutOfMemory
pred AvifResult
AvifResultIncompatibleImage = AvifResult
AvifResultCannotChangeSetting
pred AvifResult
AvifResultOk = [Char] -> AvifResult
forall a. HasCallStack => [Char] -> a
error [Char]
"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
AvifResultIncompatibleImage
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
fromEnum AvifResult
AvifResultOutOfMemory = Int
26
fromEnum AvifResult
AvifResultCannotChangeSetting = Int
27
fromEnum AvifResult
AvifResultIncompatibleImage = Int
28
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
26 = AvifResult
AvifResultOutOfMemory
toEnum Int
27 = AvifResult
AvifResultCannotChangeSetting
toEnum Int
28 = AvifResult
AvifResultIncompatibleImage
toEnum Int
unmatched = [Char] -> AvifResult
forall a. HasCallStack => [Char] -> a
error ([Char]
"AvifResult.toEnum: Cannot match " [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
++ Int -> [Char]
forall a. Show a => a -> [Char]
show Int
unmatched)
{-# LINE 33 "src/Codec/Avif/FFI.chs" #-}
instance Exception AvifResult where
type AvifImagePtr = C2HSImp.ForeignPtr (AvifImage)
{-# LINE 37 "src/Codec/Avif/FFI.chs" #-}
data AvifImage; data AvifEncoder; data AvifDecoder; data AvifRwData; data AvifRGBImage
type AvifEncoderPtr = C2HSImp.ForeignPtr (AvifEncoder)
{-# LINE 41 "src/Codec/Avif/FFI.chs" #-}
type AvifDecoderPtr = C2HSImp.ForeignPtr (AvifDecoder)
{-# LINE 42 "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' = id res} in
return (res')
{-# LINE 44 "src/Codec/Avif/FFI.chs" #-}
avifImageCreateEmpty :: IO ((Ptr AvifImage))
avifImageCreateEmpty =
avifImageCreateEmpty'_ >>= \res ->
let {res' = id res} in
return (res')
{-# LINE 45 "src/Codec/Avif/FFI.chs" #-}
avifEncoderCreate :: IO ((Ptr AvifEncoder))
avifEncoderCreate =
avifEncoderCreate'_ >>= \res ->
let {res' = castPtr res} in
return (res')
{-# LINE 47 "src/Codec/Avif/FFI.chs" #-}
avifEncoderWrite :: (AvifEncoderPtr) -> (AvifImagePtr) -> (Ptr AvifRwData) -> IO ((AvifResult))
avifEncoderWrite a1 a2 a3 =
C2HSImp.withForeignPtr a1 $ \a1' ->
C2HSImp.withForeignPtr a2 $ \a2' ->
let {a3' = castPtr a3} in
avifEncoderWrite'_ a1' a2' a3' >>= \res ->
let {res' = (toEnum . fromIntegral) res} in
return (res')
{-# LINE 48 "src/Codec/Avif/FFI.chs" #-}
avifDecoderCreate :: IO ((Ptr AvifDecoder))
avifDecoderCreate =
avifDecoderCreate'_ >>= \res ->
let {res' = castPtr res} in
return (res')
{-# LINE 50 "src/Codec/Avif/FFI.chs" #-}
avifDecoderReadMemory :: (AvifDecoderPtr) -> (AvifImagePtr) -> (Ptr UInt8) -> (CSize) -> IO ((AvifResult))
avifDecoderReadMemory a1 a2 a3 a4 =
C2HSImp.withForeignPtr a1 $ \a1' ->
C2HSImp.withForeignPtr a2 $ \a2' ->
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 51 "src/Codec/Avif/FFI.chs" #-}
avifRGBImageSetDefaults :: (Ptr AvifRGBImage) -> (AvifImagePtr) -> IO ()
avifRGBImageSetDefaults a1 a2 =
let {a1' = castPtr a1} in
C2HSImp.withForeignPtr a2 $ \a2' ->
avifRGBImageSetDefaults'_ a1' a2' >>
return ()
{-# LINE 53 "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 54 "src/Codec/Avif/FFI.chs" #-}
avifImageRGBToYUV :: (AvifImagePtr) -> (Ptr AvifRGBImage) -> IO ((AvifResult))
avifImageRGBToYUV a1 a2 =
C2HSImp.withForeignPtr a1 $ \a1' ->
let {a2' = castPtr a2} in
avifImageRGBToYUV'_ a1' a2' >>= \res ->
let {res' = (toEnum . fromIntegral) res} in
return (res')
{-# LINE 56 "src/Codec/Avif/FFI.chs" #-}
avifImageYUVToRGB :: (AvifImagePtr) -> (Ptr AvifRGBImage) -> IO ((AvifResult))
avifImageYUVToRGB a1 a2 =
C2HSImp.withForeignPtr a1 $ \a1' ->
let {a2' = castPtr a2} in
avifImageYUVToRGB'_ a1' a2' >>= \res ->
let {res' = (toEnum . fromIntegral) res} in
return (res')
{-# LINE 57 "src/Codec/Avif/FFI.chs" #-}
avifRGBImageAllocatePixels :: (Ptr AvifRGBImage) -> IO ()
avifRGBImageAllocatePixels a1 =
let {a1' = castPtr a1} in
avifRGBImageAllocatePixels'_ a1' >>
return ()
{-# LINE 59 "src/Codec/Avif/FFI.chs" #-}
avifRGBImageFreePixels :: (Ptr AvifRGBImage) -> IO ()
avifRGBImageFreePixels a1 =
let {a1' = castPtr a1} in
avifRGBImageFreePixels'_ a1' >>
return ()
{-# LINE 60 "src/Codec/Avif/FFI.chs" #-}
foreign import ccall "Codec/Avif/FFI.chs.h &avifImageDestroy"
avifImageDestroy :: C2HSImp.FinalizerPtr ()
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.CUInt -> (C2HSImp.CUInt -> (C2HSImp.CUInt -> (C2HSImp.CInt -> (IO (C2HSImp.Ptr (AvifImage)))))))
foreign import ccall safe "Codec/Avif/FFI.chs.h avifImageCreateEmpty"
avifImageCreateEmpty'_ :: (IO (C2HSImp.Ptr (AvifImage)))
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 (AvifImage)) -> ((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 (AvifImage)) -> ((C2HSImp.Ptr C2HSImp.CUChar) -> (C2HSImp.CULong -> (IO C2HSImp.CInt)))))
foreign import ccall safe "Codec/Avif/FFI.chs.h avifRGBImageSetDefaults"
avifRGBImageSetDefaults'_ :: ((C2HSImp.Ptr ()) -> ((C2HSImp.Ptr (AvifImage)) -> (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 (AvifImage)) -> ((C2HSImp.Ptr ()) -> (IO C2HSImp.CInt)))
foreign import ccall safe "Codec/Avif/FFI.chs.h avifImageYUVToRGB"
avifImageYUVToRGB'_ :: ((C2HSImp.Ptr (AvifImage)) -> ((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 ()))