module Data.ByteString.IsoBaseFileFormat.Brands.Dash
(Dash, SingleAudioTrackInit(..), mkSingleTrackInit, module X) where
import Data.ByteString.IsoBaseFileFormat.Brands.Types
import Data.ByteString.IsoBaseFileFormat.Boxes as X hiding (All)
import Data.Kind (Type, Constraint)
import Control.Lens
import Data.Promotion.Prelude.List
import Data.Singletons
data Dash (version :: Nat)
dash :: Proxy (Dash 0)
dash = Proxy
instance IsBrand (Dash v) where
type BoxLayout (Dash v) =
Boxes
'[ OM_ FileType
, OM Movie
'[ OM_ (MovieHeader v)
, SM Track
'[ OM_ (TrackHeader v)
, OM Media
'[ OM_ (MediaHeader v)
, OM_ Handler
, OM MediaInformation
'[ OneOf '[ OM_ VideoMediaHeader
, OM_ SoundMediaHeader
, OM_ HintMediaHeader
, OM_ NullMediaHeader]
, OM DataInformation
'[ OM DataReference
'[ OneOf '[ OM_ DataEntryUrl
, OM_ DataEntryUrn]
, SomeOptionalX
(OneOf '[ OM_ DataEntryUrl
, OM_ DataEntryUrn])]]
]
]
]
]
, SO_ Skip
]
data SingleAudioTrackInit =
SingleAudioTrackInit {_mvhd :: MovieHeader 0
,_tkhd :: TrackHeader 0
,_mdhd :: MediaHeader 0
,_hdlr :: Handler
,_smhd :: SoundMediaHeader}
makeLenses ''SingleAudioTrackInit
mkSingleTrackInit
:: SingleAudioTrackInit -> Builder
mkSingleTrackInit doc = mediaBuilder dash $
fileTypeBox (FileType "dash" 0 ["isom","iso5","mp42"])
:|
movie (movieHeader (doc ^. mvhd) :|
track (trackHeader (doc ^. tkhd) :|
media (mediaHeader (doc ^. mdhd) :. handler (doc ^. hdlr) :|
mediaInformation
(soundMediaHeader (doc ^. smhd) :| dataInformation $: localMediaDataReference ))))