{-# LANGUAGE UndecidableInstances #-}
module Data.ByteString.Mp4.Boxes.Mp4AudioSampleEntry where
import Data.ByteString.IsoBaseFileFormat.Box
import Data.ByteString.IsoBaseFileFormat.Boxes
import Data.ByteString.IsoBaseFileFormat.ReExports
import Data.ByteString.IsoBaseFileFormat.Util.BoxFields
import Data.ByteString.Mp4.Boxes.ElementaryStreamDescriptor
import Data.ByteString.Mp4.Boxes.DecoderSpecificInfo
import Data.ByteString.Mp4.Boxes.DecoderConfigDescriptor
import Data.ByteString.Mp4.Boxes.AudioSpecificConfig
audioSampleEntry
:: U16 "data_reference_index"
-> AudioSampleEntry AudioEsd
-> Box (SampleEntry (AudioSampleEntry AudioEsd))
audioSampleEntry drefIndex ase =
sampleEntry drefIndex ase
type instance BoxTypeSymbol AudioEsd = "mp4a"
aacAudioSampleEntrySimple
:: Bool
-> SamplingFreqTable
-> ChannelConfigTable
-> U16 "samplesize"
-> AudioSampleEntry AudioEsd
aacAudioSampleEntrySimple sbr sf cc sampleSize =
AudioSampleEntry
(Constant
:+ Custom (Scalar (channelConfigToNumber cc))
:+ Custom sampleSize
:+ 0
:+ Constant
:+ Custom (Scalar (sampleRateToNumber sf * 65536))
:+ mkAudioEsdAacLcOrHeAac sbr sf cc)
mkAudioEsdAacLcOrHeAac
:: Bool
-> SamplingFreqTable
-> ChannelConfigTable
-> AudioEsd
mkAudioEsdAacLcOrHeAac False sf cc =
AudioEsd
(esdBox
(Proxy @Mp4AacLcEsDescriptor)
False 0 0 0
(sampleRateToEnum sf)
(channelConfigToEnum cc))
mkAudioEsdAacLcOrHeAac True sf cc =
AudioEsd
(esdBox
(Proxy @Mp4HeAacEsDescriptor)
False 0 0 0
(sampleRateToEnum sf)
(channelConfigToEnum cc)
(sampleRateToEnum sf))
newtype AudioEsd =
AudioEsd EsdBox
deriving (IsBoxContent)
type Mp4AacLcEsDescriptor =
ESDescriptorMp4File DefaultEsId
(Mp4AacAudioDecoderConfigDescriptor
(AudioConfigAacLc
(EnumParam "samplingFreq" SamplingFreq)
(EnumParam "channelConfig" ChannelConfig)))
type Mp4HeAacEsDescriptor =
ESDescriptorMp4File DefaultEsId
(Mp4AacAudioDecoderConfigDescriptor
(AudioConfigHeAac
(EnumParam "samplingFreq" SamplingFreq)
(EnumParam "channelConfig" ChannelConfig)))
type Mp4AacAudioDecoderConfigDescriptor cfg =
DecoderConfigDescriptor
'AudioIso14496_3
'AudioStream
'[cfg]
'[]