{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -fno-warn-redundant-constraints #-}
module Data.ByteString.Mp4.Boxes.ElementaryStreamDescriptor where
import Data.ByteString.IsoBaseFileFormat.Box
import Data.ByteString.IsoBaseFileFormat.Util.FullBox
import Data.ByteString.IsoBaseFileFormat.ReExports
import Data.ByteString.Mp4.Boxes.BaseDescriptor
import Data.ByteString.Mp4.Boxes.SyncLayerConfigDescriptor
type EsdBox = Box (FullBox Esd 0)
newtype Esd = Esd BuilderWithSize deriving (IsBoxContent)
instance IsBox Esd
type instance BoxTypeSymbol Esd = "esds"
esdBox :: forall (record :: Extends (Descriptor 'ES_Descr)) (rendered :: BitRecord) .
( HasFunctionBuilder BitBuilder (Proxy rendered)
, rendered ~ (RenderEsDescr record))
=> Proxy record -> ToFunction BitBuilder (Proxy rendered) EsdBox
esdBox =
toFunction
. esdBoxHoley
esdBoxHoley :: forall (record :: Extends (Descriptor 'ES_Descr)) r (rendered :: BitRecord) .
( HasFunctionBuilder BitBuilder (Proxy rendered)
, rendered ~ (RenderEsDescr record)
)
=> Proxy record -> FunctionBuilder EsdBox r (ToFunction BitBuilder (Proxy rendered) r)
esdBoxHoley _p =
mapAccumulator (fullBox 0 . Esd) $
builderBoxConstructor (Proxy @rendered)
type RenderEsDescr (d :: Extends (Descriptor 'ES_Descr)) =
BitRecordOfDescriptor $ (From d)
data ESDescriptor
:: Extends (FieldValue "esId" Nat)
-> Maybe (Extends (FieldValue "depEsId" Nat))
-> Maybe (Extends (BitRecordField ('MkFieldCustom :: BitField ASizedString ASizedString (urlSize :: Nat))))
-> Maybe (Extends (FieldValue "ocrEsId" Nat))
-> Extends (FieldValue "streamPrio" Nat)
-> Extends (Descriptor 'DecoderConfigDescr)
-> Extends (Descriptor 'SLConfigDescr)
-> Extends (Descriptor 'ES_Descr)
type ESDescriptorMp4File esId decConfigDescr =
ESDescriptor esId 'Nothing 'Nothing
'Nothing DefaultStreamPrio
decConfigDescr Mp4SyncLayerDescriptor
type DefaultEsId = StaticFieldValue "esId" 1
type DefaultStreamPrio = StaticFieldValue "streamPrio" 0
type instance
From (ESDescriptor esId depEsId url ocrEsId streamPrio decConfig slConfig) =
'MkDescriptor
("esId" @: FieldU16 :~ esId
.+: "depEsIdFlag" @: FlagJust depEsId
.+: "urlFlag" @: FlagJust url
.+: "ocrEsIdFlag" @: FlagJust ocrEsId
.+: "streamPriority" @: Field 5 :~ streamPrio
.+: ("depEsId" @: FieldU16 :+? depEsId)
:+: (From (OptionalRecordOf (Fun1 RecordField) url))
:+: ("ocrEsId" @: FieldU16 :+? ocrEsId)
:+: (BitRecordOfDescriptor $ From decConfig)
:+: (BitRecordOfDescriptor $ From slConfig)
)