isobmff-builder-0.9.0.0: src/Data/ByteString/IsoBaseFileFormat/Boxes/SpecificMediaHeader.hs
-- | Media-independent properties of a tracks media content.
module Data.ByteString.IsoBaseFileFormat.Boxes.SpecificMediaHeader where
import Data.ByteString.IsoBaseFileFormat.Boxes.Box
import Data.ByteString.IsoBaseFileFormat.Boxes.BoxFields
import Data.ByteString.IsoBaseFileFormat.Boxes.FullBox
-- | Media header data box. The actual box type is determined by the claused
-- used to construct the record.
data SpecificMediaHeader where
VideoMediaHeader
:: Template (U16 "graphicsmode") 0
:+ Template (U16 "reserved") 0
-> SpecificMediaHeader
SoundMediaHeader
:: Template (I16 "balance") 0
:+ Constant (U16Arr "opcolor" 3) '[0,0,0]
-> SpecificMediaHeader
HintMediaHeader
:: U16 "maxPDUsize"
:+ U16 "avgPDUsize"
:+ U16 "maxbitrate"
:+ U16 "avgbitrate"
:+ U32 "reserved"
-> SpecificMediaHeader
NullMediaHeader
:: SpecificMediaHeader
-- | Create a 'SpecificMediaHeader' box.
specificMediaHeader
:: ValidBox brand SpecificMediaHeader
=> SpecificMediaHeader -> Box brand SpecificMediaHeader
specificMediaHeader h@(VideoMediaHeader _) = closedFullBox Default 1 h
specificMediaHeader h = closedFullBox Default 0 h
instance IsBoxType SpecificMediaHeader where
type BoxContent SpecificMediaHeader = FullBox 0 SpecificMediaHeader
toBoxType _ (FullBox _ _ (VideoMediaHeader _)) = StdType "vmhd"
toBoxType _ (FullBox _ _ (SoundMediaHeader _)) = StdType "smhd"
toBoxType _ (FullBox _ _ (HintMediaHeader _)) = StdType "hmhd"
toBoxType _ (FullBox _ _ NullMediaHeader) = StdType "nmhd"
instance IsBoxContent SpecificMediaHeader where
boxSize (VideoMediaHeader c) = boxSize c
boxSize (SoundMediaHeader c) = boxSize c
boxSize (HintMediaHeader c) = boxSize c
boxSize NullMediaHeader = boxSize ()
boxBuilder (VideoMediaHeader c) = boxBuilder c
boxBuilder (SoundMediaHeader c) = boxBuilder c
boxBuilder (HintMediaHeader c) = boxBuilder c
boxBuilder NullMediaHeader = boxBuilder ()