module Data.ByteString.IsoBaseFileFormat.Boxes.MetaDataSampleEntry where import Data.ByteString.IsoBaseFileFormat.Box import Data.ByteString.IsoBaseFileFormat.Util.BoxFields import Data.ByteString.IsoBaseFileFormat.Util.FullBox import Data.ByteString.IsoBaseFileFormat.Boxes.Handler import qualified Data.Text as T import qualified Data.ByteString as B import Data.Tagged () import Data.Default () import Data.ByteString.IsoBaseFileFormat.ReExports -- * Generat meta data sample entry type instance GetHandlerType (MetaDataCoding c) = 'TimedMetaDataTrack type instance BoxTypeSymbol (MetaDataCoding c) = c -- | A coproduct of meta data codings (XML, Text, ...) data family MetaDataCoding (c :: Symbol) -- * XML Meta Data -- | The xml meta data samples declaration newtype instance MetaDataCoding "metx" = XMLMetaDataSampleEntry ( Tagged "content_encoding" T.Text :+ Tagged "namespace" T.Text :+ Tagged "schema_location" T.Text :+ Maybe (Box BitRate)) deriving (IsBoxContent, Default) -- * Text Meta Data -- | The plain text meta data samples declaration newtype instance MetaDataCoding "mett" = TextMetaDataSampleEntry ( Tagged "content_encoding" T.Text :+ Tagged "mime_format" T.Text :+ Maybe (Box BitRate)) deriving (IsBoxContent, Default) -- * URI based meta data -- | The URI meta data samples declaration newtype instance MetaDataCoding "urim" = UriMetaDataSampleEntry ( Tagged "the_label" (Box Uri) :+ Tagged "init" (Maybe (Box UriInit)) :+ Maybe (Box BitRate)) deriving (IsBoxContent, Default) -- * Uri Box -- | Contents of a 'Uri' box. type Uri = FullBox UriField 0 -- | The URI that's inside the box newtype UriField = UriField (Tagged "theURI" T.Text) deriving (Default, IsBoxContent) -- | Make box with a UTF-8 URI. uriBox :: T.Text -> Box Uri uriBox t = fullBox 0 (UriField (Tagged t)) type instance BoxTypeSymbol UriField = "uri " instance IsBox UriField -- * Uri-Init Box -- | Opaque data for the applications processing 'Uri' meta data. newtype UriInitField = UriInitField (Tagged "uri_initialization_data" B.ByteString) deriving (Default, IsBoxContent) -- | A 'FullBox' an UriInitField. type UriInit = FullBox UriInitField 0 -- | Make box an 'UriInitField' uriInitBox :: B.ByteString -> Box UriInit uriInitBox = fullBox 0 . UriInitField . Tagged type instance BoxTypeSymbol UriInitField = "uriI" instance IsBox UriInitField -- * Bit Rate Box -- | Create a box for bit rates. Every 'SampleEntry' instance for meta data -- may contain this box at the end. bitRateBox :: BitRate -> Box BitRate bitRateBox = Box -- | Bitrate info for meta data samples newtype BitRate = BitRate (U32 "bufferSizeDB" :+ U32 "maxBitrate" :+ U32 "avgBitrate") deriving (Default, IsBoxContent) type instance BoxTypeSymbol BitRate = "btrt" instance IsBox BitRate