Avoid allocating MP4 decode memory on AAC, enable parallel tests again

This commit is contained in:
DataHoarder 2022-07-21 11:56:29 +02:00
parent 090c231e72
commit 5ca46a88b5
Signed by: DataHoarder
SSH key fingerprint: SHA256:OLTRf6Fl87G52SiR7sWLGNzlJt4WOX+tfI2yxo0z7xk
4 changed files with 28 additions and 11 deletions

View file

@ -116,9 +116,13 @@ func decodeFrameMP4(decoder *fdkaac.AacDecoder, demuxer *mp4Decoder) (result []i
func (f Format) Open(r io.ReadSeekCloser) (audio.Source, error) {
decoder := fdkaac.NewAacDecoder()
mp4Demuxer, err := tryDecodeMP4(r)
if err != nil { //try ADTS
r.Seek(0, io.SeekStart)
_, _, err := aac_adts.DecodeADTSHeader(r)
if err == nil { //try ADTS
_, err = r.Seek(0, io.SeekStart)
if err != nil {
return nil, err
}
err = decoder.InitAdts()
if err != nil {
return nil, err
@ -157,6 +161,14 @@ func (f Format) Open(r io.ReadSeekCloser) (audio.Source, error) {
return source, nil
} else {
return nil, fmt.Errorf("unsupported format mp4")
_, err = r.Seek(0, io.SeekStart)
if err != nil {
return nil, err
}
mp4Demuxer, err := tryDecodeMP4(r)
if err != nil {
return nil, err
}
err = decoder.InitRaw(mp4Demuxer.cookie)
if err != nil {
return nil, err
@ -434,7 +446,7 @@ func (f Format) Encode(source audio.Source, writer io.WriteCloser, options map[s
var seqNumber uint32
var packetsWritten uint64
var outputBuffer [][]byte
outputBuffer := make([][]byte, 0, 32)
segmentDuration := time.Millisecond * 1000
@ -457,7 +469,7 @@ func (f Format) Encode(source audio.Source, writer io.WriteCloser, options map[s
seg.Encode(writer)
seqNumber++
outputBuffer = nil
outputBuffer = make([][]byte, 0, 32)
}
if err := encodeSource(source, func(frame []byte) error {

View file

@ -3,6 +3,7 @@
package aac
import (
"git.gammaspectra.live/S.O.N.G/Kirika/audio"
"git.gammaspectra.live/S.O.N.G/Kirika/audio/format/flac"
"git.gammaspectra.live/S.O.N.G/Kirika/test"
"io"
@ -11,6 +12,7 @@ import (
)
func TestEncodeAAC(t *testing.T) {
t.Parallel()
fp, err := os.Open(test.TestSingleSample24)
if err != nil {
t.Error(err)
@ -46,6 +48,7 @@ func TestEncodeAAC(t *testing.T) {
}
func TestDecodeAAC(t *testing.T) {
t.Parallel()
fp, err := os.Open(test.TestSingleSample24)
if err != nil {
t.Error(err)
@ -88,13 +91,12 @@ func TestDecodeAAC(t *testing.T) {
}
//Decode
for range source.ToInt16().GetBlocks() {
}
audio.NewNullSink().Process(source)
}
/*
func TestDecodeAACMP4(t *testing.T) {
t.Parallel()
fp, err := os.Open(test.TestSingleSample24)
if err != nil {
t.Error(err)
@ -120,13 +122,12 @@ func TestDecodeAACMP4(t *testing.T) {
return
}
for range source.Blocks {
}
audio.NewNullSink().Process(source)
}
*/
func TestEncodeAACMP4(t *testing.T) {
t.Parallel()
fp, err := os.Open(test.TestSingleSample24)
if err != nil {
t.Error(err)
@ -163,6 +164,7 @@ func TestEncodeAACMP4(t *testing.T) {
}
func TestEncodeAACHEv2(t *testing.T) {
t.Parallel()
fp, err := os.Open(test.TestSingleSample24)
if err != nil {
t.Error(err)

View file

@ -11,6 +11,7 @@ import (
)
func TestEncodeALAC(t *testing.T) {
t.Parallel()
fp, err := os.Open(test.TestSingleSample24)
if err != nil {
t.Error(err)

View file

@ -9,6 +9,7 @@ import (
)
func TestEncodeFLAC(t *testing.T) {
t.Parallel()
fp, err := os.Open(test.TestSingleSample24)
if err != nil {
t.Error(err)
@ -41,6 +42,7 @@ func TestEncodeFLAC(t *testing.T) {
}
func TestEncodeFLACOgg(t *testing.T) {
t.Parallel()
fp, err := os.Open(test.TestSingleSample24)
if err != nil {
t.Error(err)