{-# LINE 1 "src/Codec/Audio/Opus/Internal/Opus.hsc" #-}
{-# LANGUAGE CPP #-}
{-# LANGUAGE ForeignFunctionInterface #-}
module Codec.Audio.Opus.Internal.Opus where
import Foreign
import Foreign.C.Types
import Foreign.C.String
newtype ErrorCode = ErrorCode { ErrorCode -> CInt
unErrorCode :: CInt }
deriving (ErrorCode -> ErrorCode -> Bool
(ErrorCode -> ErrorCode -> Bool)
-> (ErrorCode -> ErrorCode -> Bool) -> Eq ErrorCode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ErrorCode -> ErrorCode -> Bool
== :: ErrorCode -> ErrorCode -> Bool
$c/= :: ErrorCode -> ErrorCode -> Bool
/= :: ErrorCode -> ErrorCode -> Bool
Eq, Int -> ErrorCode -> ShowS
[ErrorCode] -> ShowS
ErrorCode -> String
(Int -> ErrorCode -> ShowS)
-> (ErrorCode -> String)
-> ([ErrorCode] -> ShowS)
-> Show ErrorCode
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ErrorCode -> ShowS
showsPrec :: Int -> ErrorCode -> ShowS
$cshow :: ErrorCode -> String
show :: ErrorCode -> String
$cshowList :: [ErrorCode] -> ShowS
showList :: [ErrorCode] -> ShowS
Show)
instance Storable ErrorCode where
sizeOf :: ErrorCode -> Int
sizeOf (ErrorCode CInt
e) = CInt -> Int
forall a. Storable a => a -> Int
sizeOf CInt
e
alignment :: ErrorCode -> Int
alignment (ErrorCode CInt
e) = CInt -> Int
forall a. Storable a => a -> Int
alignment CInt
e
peek :: Ptr ErrorCode -> IO ErrorCode
peek Ptr ErrorCode
p = CInt -> ErrorCode
ErrorCode (CInt -> ErrorCode) -> IO CInt -> IO ErrorCode
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek (Ptr ErrorCode -> Ptr CInt
forall a b. Ptr a -> Ptr b
castPtr Ptr ErrorCode
p)
poke :: Ptr ErrorCode -> ErrorCode -> IO ()
poke Ptr ErrorCode
p = Ptr CInt -> CInt -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr ErrorCode -> Ptr CInt
forall a b. Ptr a -> Ptr b
castPtr Ptr ErrorCode
p) (CInt -> IO ()) -> (ErrorCode -> CInt) -> ErrorCode -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ErrorCode -> CInt
unErrorCode
opus_ok :: ErrorCode
opus_ok :: ErrorCode
opus_ok = CInt -> ErrorCode
ErrorCode (CInt
0)
{-# LINE 29 "src/Codec/Audio/Opus/Internal/Opus.hsc" #-}
opus_bad_arg :: ErrorCode
opus_bad_arg :: ErrorCode
opus_bad_arg = CInt -> ErrorCode
ErrorCode (-CInt
1)
{-# LINE 33 "src/Codec/Audio/Opus/Internal/Opus.hsc" #-}
opus_buffer_too_small :: ErrorCode
opus_buffer_too_small :: ErrorCode
opus_buffer_too_small = CInt -> ErrorCode
ErrorCode (-CInt
2)
{-# LINE 37 "src/Codec/Audio/Opus/Internal/Opus.hsc" #-}
opus_internal_error :: ErrorCode
opus_internal_error :: ErrorCode
opus_internal_error = CInt -> ErrorCode
ErrorCode (-CInt
3)
{-# LINE 41 "src/Codec/Audio/Opus/Internal/Opus.hsc" #-}
opus_invalid_packet :: ErrorCode
opus_invalid_packet :: ErrorCode
opus_invalid_packet = CInt -> ErrorCode
ErrorCode (-CInt
4)
{-# LINE 45 "src/Codec/Audio/Opus/Internal/Opus.hsc" #-}
opus_unimplemented :: ErrorCode
opus_unimplemented :: ErrorCode
opus_unimplemented = CInt -> ErrorCode
ErrorCode (-CInt
5)
{-# LINE 49 "src/Codec/Audio/Opus/Internal/Opus.hsc" #-}
opus_invalid_state :: ErrorCode
opus_invalid_state :: ErrorCode
opus_invalid_state = CInt -> ErrorCode
ErrorCode (-CInt
6)
{-# LINE 53 "src/Codec/Audio/Opus/Internal/Opus.hsc" #-}
opus_alloc_fail :: ErrorCode
opus_alloc_fail :: ErrorCode
opus_alloc_fail = CInt -> ErrorCode
ErrorCode (-CInt
7)
{-# LINE 57 "src/Codec/Audio/Opus/Internal/Opus.hsc" #-}
newtype CodingMode = CodingMode { CodingMode -> CInt
unCodingMode :: CInt }
deriving (CodingMode -> CodingMode -> Bool
(CodingMode -> CodingMode -> Bool)
-> (CodingMode -> CodingMode -> Bool) -> Eq CodingMode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: CodingMode -> CodingMode -> Bool
== :: CodingMode -> CodingMode -> Bool
$c/= :: CodingMode -> CodingMode -> Bool
/= :: CodingMode -> CodingMode -> Bool
Eq)
instance Show CodingMode where
show :: CodingMode -> String
show CodingMode
a
| CodingMode
app_voip CodingMode -> CodingMode -> Bool
forall a. Eq a => a -> a -> Bool
== CodingMode
a = String
"voip coding"
| CodingMode
app_audio CodingMode -> CodingMode -> Bool
forall a. Eq a => a -> a -> Bool
== CodingMode
a = String
"audio coding"
| CodingMode
app_lowdelay CodingMode -> CodingMode -> Bool
forall a. Eq a => a -> a -> Bool
== CodingMode
a = String
"lowdelay coding"
| Bool
otherwise = String
"unknown coding"
app_voip :: CodingMode
app_voip :: CodingMode
app_voip = CInt -> CodingMode
CodingMode (CInt
2048)
{-# LINE 74 "src/Codec/Audio/Opus/Internal/Opus.hsc" #-}
app_audio :: CodingMode
app_audio :: CodingMode
app_audio = CInt -> CodingMode
CodingMode (CInt
2049)
{-# LINE 79 "src/Codec/Audio/Opus/Internal/Opus.hsc" #-}
app_lowdelay :: CodingMode
app_lowdelay :: CodingMode
app_lowdelay = CInt -> CodingMode
CodingMode (CInt
2051)
{-# LINE 83 "src/Codec/Audio/Opus/Internal/Opus.hsc" #-}
newtype SamplingRate = SamplingRate { SamplingRate -> Int
unSamplingRate :: Int }
deriving (SamplingRate -> SamplingRate -> Bool
(SamplingRate -> SamplingRate -> Bool)
-> (SamplingRate -> SamplingRate -> Bool) -> Eq SamplingRate
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: SamplingRate -> SamplingRate -> Bool
== :: SamplingRate -> SamplingRate -> Bool
$c/= :: SamplingRate -> SamplingRate -> Bool
/= :: SamplingRate -> SamplingRate -> Bool
Eq)
instance Show SamplingRate where
show :: SamplingRate -> String
show (SamplingRate Int
r) = [String] -> String
forall a. Monoid a => [a] -> a
mconcat [Int -> String
forall a. Show a => a -> String
show (Int -> String) -> Int -> String
forall a b. (a -> b) -> a -> b
$ Int
r Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
1000, String
"kHz"]
opusSR8k :: SamplingRate
opusSR8k :: SamplingRate
opusSR8k = Int -> SamplingRate
SamplingRate Int
8000
opusSR12k :: SamplingRate
opusSR12k :: SamplingRate
opusSR12k = Int -> SamplingRate
SamplingRate Int
12000
opusSR16k :: SamplingRate
opusSR16k :: SamplingRate
opusSR16k = Int -> SamplingRate
SamplingRate Int
16000
opusSR24k :: SamplingRate
opusSR24k :: SamplingRate
opusSR24k = Int -> SamplingRate
SamplingRate Int
24000
opusSR48k :: SamplingRate
opusSR48k :: SamplingRate
opusSR48k = Int -> SamplingRate
SamplingRate Int
48000
data EncoderT
data DecoderT
foreign import ccall unsafe "opus.h opus_encoder_create"
c_opus_encoder_create
:: SamplingRate
-> Int32
-> CodingMode
-> Ptr ErrorCode
-> IO (Ptr EncoderT)
foreign import ccall unsafe "opus.h &opus_encoder_destroy"
cp_opus_encoder_destroy
:: FunPtr (Ptr EncoderT -> IO ())
foreign import ccall unsafe "opus.h opus_encode"
c_opus_encode
:: Ptr EncoderT
-> Ptr CShort
-> Int32
-> CString
-> Int32
-> IO Int32
foreign import ccall unsafe "opus.h opus_decoder_create"
c_opus_decoder_create
:: SamplingRate
-> Int32
-> Ptr ErrorCode
-> IO (Ptr DecoderT)
foreign import ccall unsafe "opus.h &opus_decoder_destroy"
cp_opus_decoder_destroy
:: FunPtr (Ptr DecoderT -> IO ())
foreign import ccall unsafe "opus.h opus_decode"
c_opus_decode
:: Ptr DecoderT
-> Ptr CChar
-> Int32
-> Ptr CShort
-> Int32
-> CInt
-> IO Int32