isobmff-builder-0.9.0.0: spec/DashSpec.hs
{-# LANGUAGE OverloadedStrings #-}
module DashSpec (spec) where
import Test.Hspec
import Data.ByteString.IsoBaseFileFormat.Brands.Dash
import qualified Data.ByteString.Lazy as BL
import Data.Text ()
spec :: Spec
spec =
do describe "minimalIsobmff version 0" $
do it "renders some output at all" $
do createionTime <- mp4CurrentTime
let ct :: Word32
ct = fromScalar createionTime
ct3 = (ct `shiftR` 24) .&. 255
ct2 = (ct `shiftR` 16) .&. 255
ct1 = (ct `shiftR` 8) .&. 255
ct0 = (ct `shiftR` 0) .&. 255
cts :: [Word8]
cts = fromIntegral <$> [ct3,ct2,ct1,ct0]
let args = exampleSingleTrackInit createionTime
doc = mkSingleTrackInit args
rendered = BL.unpack $ packMediaFile doc
expected =
[0
,0
,0
,32
,102
,116
,121
,112
,105
,115
,111
,53
,0
,0
,0
,0
,105
,115
,111
,109
,105
,115
,111
,53
,100
,97
,115
,104
,109
,112
,52
,50
,0
,0
,1
,73 -- Here
,109
,111
,111
,118
,0
,0
,0
,108
,109
,118
,104
,100
,0
,0
,0
,0] ++
cts ++
[0
,0
,0
,0
,0
,1
,95
,144
,0
,1
,95
,144
,0
,1
,0
,0
,1
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,1
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,1
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,64
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,255
,255
,255
,255
,0
,0
,0
,213 -- Here
,116
,114
,97
,107
,0
,0
,0
,92
,116
,107
,104
,100
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,1
,0
,0
,0
,0
,0
,1
,95
,144
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,1
,0
,0
,0
,0
,1
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,1
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,64
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0
,0,0,0,113 -- HERE
,109,100,105,97
,0,0,0,32,109,100,104,100,0,0,0,0
,0,0,0,0,0,0,0,0,0,1,95,144,0,0,0,0,16,181,0,0
,0,0,0,45 -- HERE
,104,100,108,114
,0,0,0,0,0,0,0,0,115,111,117,110,0,0,0,0,0,0,0,0,0,0,0,0
,72,101,108,108,111,32,119,111,114,108,100,33,0
,0,0,0,28 -- HERE
,109,105,110,102
,0,0,0,20 -- HERE
,115,109,104,100,0,0,0,0,0,0,0,0,0,0,0,0]
-- BL.writeFile "/tmp/xxx.mp4" (BL.pack rendered)
rendered `shouldBe`
expected
exampleSingleTrackInit :: U32 "creation_time" -> SingleTrackInit
exampleSingleTrackInit creationTime =
SingleTrackInit (MovieHeader $
V0 (creationTime :+ 0 :+ Default :+ durationFromSeconds Default 1) :+
def)
(TrackHeader $
V0 (0 :+ 0 :+ 1 :+ Constant :+ durationFromSeconds Default 1) :+
def)
(MediaHeader $ def)
(Handler $ def :+ AudioTrack :+ def :+ (Custom "Hello world!"))
(SoundMediaHeader def)