packages feed

isobmff-builder-0.11.2.0: spec/Mp4AudioSegmentSpec.hs

{-# LANGUAGE OverloadedStrings #-}
module Mp4AudioSegmentSpec (spec) where

import qualified Data.ByteString                             as BS
import           Data.ByteString.IsoBaseFileFormat.ReExports
import qualified Data.ByteString.Lazy                        as BL
import           Data.ByteString.Mp4.AudioStreaming
import           Data.Text                                   ()
import           Test.Hspec

spec :: Spec
spec =
  describe "AacMp4TrackFragment" $
   do let args = moof
          doc = buildAacMp4TrackFragment args
          rendered = BL.unpack $ toLazyByteString $ doc
          dataOffset = 120
          expected =
                     [
                      -- styp box
                       0,0,0,24
                     ,115,116,121,112
                     ,109,115,100,104,0,0,0,0
                     ,109,115,100,104
                     ,100,97,115,104
                     -- moov box [offset here: 32]
                     ,0,0,0,112
                     ,109,111,111,102
                     -- mfhd box
                     ,0,0,0,16
                     ,109,102,104,100
                     ,0,0,0,0,0,0,0,13
                     -- traf
                     ,0,0,0,88
                     ,116,114,97,102
                     -- tfhd
                     ,0,0,0,16
                     ,116,102,104,100
                     ,0,2,0,0,0,0,0,1
                     -- tfdt
                     ,0,0,0,20
                     ,116,102,100,116
                     ,1,0,0,0,0,0,0,0,0,0,0,37
                     -- trun
                     ,0,0,0,44
                     ,116,114,117,110
                     ,0,0,7,1
                     ,0,0,0,2
                     ,0,0,0,dataOffset
                     -- sample 1
                     ,0,0,0,23 -- duration
                     ,0,0,0,192 -- length
                     ,2,0,0,0 -- flags
                     -- sample 2
                     ,0,0,0,23
                     ,0,0,0,192
                     ,2,0,0,0
                     -- mdat
                     ,0,0,1,136
                     ,109,100,97,116]
                     -- sample 1
                     ++ [0..191]
                     -- sample 2
                     ++ [0..191]
      it "renders the exact expectected output" $ do
#ifdef COMPLEXTESTS
        BL.writeFile "/tmp/isobmff-test-case-dash-spec.m4s" (BL.pack rendered)
#endif
        rendered `shouldBe` expected
      it "calculates the data-offset correctly" $
        drop ((fromIntegral dataOffset) + 12 * 2) rendered
        `shouldBe` ([0..191] ++ [0..191])

moof :: AacMp4TrackFragment
moof = AacMp4TrackFragment 13 37 (replicate 2 (23, BS.pack [0..191]))