add MPEG4AudioConfig Complete() func
This commit is contained in:
parent
02b80d86df
commit
f1628505e7
28
isom/isom.go
28
isom/isom.go
@ -181,6 +181,17 @@ func writeSampleRateIndex(w *bits.Writer, index uint) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (self MPEG4AudioConfig) Complete() (config MPEG4AudioConfig) {
|
||||
config = self
|
||||
if int(config.SampleRateIndex) < len(sampleRateTable) {
|
||||
config.SampleRate = sampleRateTable[config.SampleRateIndex]
|
||||
}
|
||||
if int(config.ChannelConfig) < len(chanConfigTable) {
|
||||
config.ChannelCount = chanConfigTable[config.ChannelConfig]
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// copied from libavcodec/mpeg4audio.c avpriv_mpeg4audio_get_config()
|
||||
func ReadMPEG4AudioConfig(r io.Reader) (config MPEG4AudioConfig, err error) {
|
||||
br := &bits.Reader{R: r}
|
||||
@ -191,15 +202,9 @@ func ReadMPEG4AudioConfig(r io.Reader) (config MPEG4AudioConfig, err error) {
|
||||
if config.SampleRateIndex, err = readSampleRateIndex(br); err != nil {
|
||||
return
|
||||
}
|
||||
if int(config.SampleRateIndex) < len(sampleRateTable) {
|
||||
config.SampleRate = sampleRateTable[config.SampleRateIndex]
|
||||
}
|
||||
if config.ChannelConfig, err = br.ReadBits(4); err != nil {
|
||||
return
|
||||
}
|
||||
if int(config.ChannelConfig) < len(chanConfigTable) {
|
||||
config.ChannelCount = chanConfigTable[config.ChannelConfig]
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
@ -432,6 +437,17 @@ func ReadElemStreamDesc(r io.Reader) (decConfig []byte, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func ReadElemStreamDescAAC(r io.Reader) (config MPEG4AudioConfig, err error) {
|
||||
var data []byte
|
||||
if data, err = ReadElemStreamDesc(r); err != nil {
|
||||
return
|
||||
}
|
||||
if config, err = ReadMPEG4AudioConfig(bytes.NewReader(data)); err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func WriteElemStreamDescAAC(w io.Writer, config MPEG4AudioConfig) (err error) {
|
||||
// MP4ESDescrTag(ESDesc MP4DecConfigDescrTag(objectId streamType bufSize avgBitrate MP4DecSpecificDescrTag(decConfig)))
|
||||
|
||||
|
@ -1,10 +1,9 @@
|
||||
|
||||
package isom
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"encoding/hex"
|
||||
"bytes"
|
||||
"encoding/hex"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestReadElemStreamDesc(t *testing.T) {
|
||||
@ -23,6 +22,7 @@ func TestReadElemStreamDesc(t *testing.T) {
|
||||
if aconfig, err = ReadMPEG4AudioConfig(bytes.NewReader(decConfig)); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
aconfig = aconfig.Complete()
|
||||
t.Logf("aconfig=%v", aconfig)
|
||||
|
||||
bw := &bytes.Buffer{}
|
||||
@ -46,4 +46,3 @@ func TestReadElemStreamDesc(t *testing.T) {
|
||||
objectType, sampleRateIndex, chanConfig, frameLength := ReadADTSHeader(data)
|
||||
t.Logf("objectType=%d sampleRateIndex=%d chanConfig=%d frameLength=%d", objectType, sampleRateIndex, chanConfig, frameLength)
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user