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