add MPEG4AudioConfig Complete() func

This commit is contained in:
nareix 2016-03-31 00:34:08 +08:00
parent 02b80d86df
commit f1628505e7
2 changed files with 25 additions and 10 deletions

View File

@ -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)))

View File

@ -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)
}