From 15e4c8e6f889d3426ad79b31adae39b1abc05eda Mon Sep 17 00:00:00 2001 From: WeebDataHoarder <57538841+WeebDataHoarder@users.noreply.github.com> Date: Sat, 10 Sep 2022 16:20:51 +0200 Subject: [PATCH] Updated fdk-aac, fix tests on systems without AAC SBR/PS encoder --- audio/format/aac/libfdk-aac_test.go | 6 ++- audio/packetizer/adts.go | 5 ++- audio/packetizer/adts_hev2_test.go | 65 +++++++++++++++++++++++++++++ go.mod | 4 +- go.sum | 8 ++-- 5 files changed, 79 insertions(+), 9 deletions(-) create mode 100644 audio/packetizer/adts_hev2_test.go diff --git a/audio/format/aac/libfdk-aac_test.go b/audio/format/aac/libfdk-aac_test.go index 6fe334f..f86f226 100644 --- a/audio/format/aac/libfdk-aac_test.go +++ b/audio/format/aac/libfdk-aac_test.go @@ -6,6 +6,7 @@ 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" + "git.gammaspectra.live/S.O.N.G/go-fdkaac/fdkaac" "io" "os" "testing" @@ -165,6 +166,9 @@ func TestEncodeAACMP4(t *testing.T) { func TestEncodeAACHEv2(t *testing.T) { t.Parallel() + if !fdkaac.EncoderCapabilities().PS { + return + } fp, err := os.Open(test.TestSingleSample24) if err != nil { t.Error(err) @@ -190,7 +194,7 @@ func TestEncodeAACHEv2(t *testing.T) { }() options := make(map[string]interface{}) - options["bitrate"] = "256k" + options["bitrate"] = 32 options["mode"] = "hev2" err = NewFormat().Encode(source, target, options) diff --git a/audio/packetizer/adts.go b/audio/packetizer/adts.go index 6873b99..64ab0b7 100644 --- a/audio/packetizer/adts.go +++ b/audio/packetizer/adts.go @@ -6,6 +6,7 @@ import ( "io" ) +// adtsAACFrameSamples TODO: LC has 1024, others 2048? const adtsAACFrameSamples = 1024 type AdtsPacketizer struct { @@ -52,9 +53,9 @@ func NewAdtsPacketizer(reader io.Reader) *AdtsPacketizer { func (o *AdtsPacketizer) GetPacket() Packet { packet := &AdtsPacket{} - header, _, err := aac_adts.DecodeADTSHeader(o.reader) + header, offset, err := aac_adts.DecodeADTSHeader(o.reader) - if err != nil { + if err != nil || offset != 0 { return nil } diff --git a/audio/packetizer/adts_hev2_test.go b/audio/packetizer/adts_hev2_test.go new file mode 100644 index 0000000..041f834 --- /dev/null +++ b/audio/packetizer/adts_hev2_test.go @@ -0,0 +1,65 @@ +//go:build !disable_format_aac && !disable_codec_libfdk_aac && cgo + +package packetizer + +import ( + "git.gammaspectra.live/S.O.N.G/Kirika/audio/format/aac" + "git.gammaspectra.live/S.O.N.G/Kirika/audio/format/flac" + "git.gammaspectra.live/S.O.N.G/Kirika/test" + "git.gammaspectra.live/S.O.N.G/go-fdkaac/fdkaac" + "io" + "os" + "testing" +) + +func TestPacketizeADTSHEv2(t *testing.T) { + t.Parallel() + if !fdkaac.EncoderCapabilities().PS { + return + } + fp, err := os.Open(test.TestSingleSample24) + if err != nil { + t.Error(err) + return + } + defer fp.Close() + source, err := flac.NewFormat().Open(fp) + if err != nil { + t.Error(err) + return + } + + reader, writer := io.Pipe() + + go func() { + defer writer.Close() + + options := make(map[string]interface{}) + options["mode"] = "hev2" + options["bitrate"] = 32 + err = aac.NewFormat().Encode(source, writer, options) + if err != nil { + t.Error(err) + return + } + }() + + pipePacketizer := NewAdtsPacketizer(reader) + packetCount := 0 + packetBytes := 0 + for { + packet := pipePacketizer.GetPacket() + if packet == nil { + break + } + packetCount++ + packetBytes += len(packet.GetData()) + } + + if packetCount != 8463 { + t.Errorf("Wrong Packet Count %d != %d", packetCount, 8463) + } + if packetBytes < 1400000 { + t.Errorf("Wrong Packet Bytes %d < %d", packetBytes, 1400000) + } +} diff --git a/go.mod b/go.mod index 0b5884b..4508a05 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( git.gammaspectra.live/S.O.N.G/flacgo v0.0.0-20220726151057-28f458bc5391 git.gammaspectra.live/S.O.N.G/go-alac v0.0.0-20220421115623-d0b3bfe57e0f git.gammaspectra.live/S.O.N.G/go-ebur128 v0.0.0-20220720163421-db0c1911921d - git.gammaspectra.live/S.O.N.G/go-fdkaac v0.0.0-20220515171305-ffb0aafe2a61 + git.gammaspectra.live/S.O.N.G/go-fdkaac v0.0.0-20220910135048-823922bd661a git.gammaspectra.live/S.O.N.G/go-pus v0.0.0-20220721130634-3d5460c48ab6 git.gammaspectra.live/S.O.N.G/go-tta v0.2.1-0.20220226150007-096de1072bd6 git.gammaspectra.live/S.O.N.G/go-vorbis v0.0.0-20220728124510-303b3425eec0 @@ -30,5 +30,5 @@ require ( github.com/klauspost/cpuid/v2 v2.1.1 // indirect github.com/mewkiz/pkg v0.0.0-20220820102221-bbbca16e2a6c // indirect github.com/youpy/go-wav v0.3.2 // indirect - golang.org/x/sys v0.0.0-20220829200755-d48e67d00261 // indirect + golang.org/x/sys v0.0.0-20220909162455-aba9fc2a8ff2 // indirect ) diff --git a/go.sum b/go.sum index f194a60..24c5919 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,8 @@ git.gammaspectra.live/S.O.N.G/go-alac v0.0.0-20220421115623-d0b3bfe57e0f h1:CxN7 git.gammaspectra.live/S.O.N.G/go-alac v0.0.0-20220421115623-d0b3bfe57e0f/go.mod h1:f1+h7KOnuM9zcEQp7ri4UaVvgX4m1NFFIXgReIyjGMA= git.gammaspectra.live/S.O.N.G/go-ebur128 v0.0.0-20220720163421-db0c1911921d h1:3M0GZgm2H1tBkDxCwvQdRvnYhF0/velekO9uhVZsbP0= git.gammaspectra.live/S.O.N.G/go-ebur128 v0.0.0-20220720163421-db0c1911921d/go.mod h1:5H4eVW9uknpn8REFr+C3ejhvXdncgm/pbGqKGC43gFY= -git.gammaspectra.live/S.O.N.G/go-fdkaac v0.0.0-20220515171305-ffb0aafe2a61 h1:YufhSTCS59H5CStqokGMb60RnSsqrp+GoZvzmC29wm4= -git.gammaspectra.live/S.O.N.G/go-fdkaac v0.0.0-20220515171305-ffb0aafe2a61/go.mod h1:pkWt//S9hLVEQaJDPu/cHHPk8vPpo/0+zHy0me4LIP4= +git.gammaspectra.live/S.O.N.G/go-fdkaac v0.0.0-20220910135048-823922bd661a h1:JQaryqLtNZn1jydhVc7CzcAvO8ZNB4jeZ1B5gJbHWUU= +git.gammaspectra.live/S.O.N.G/go-fdkaac v0.0.0-20220910135048-823922bd661a/go.mod h1:pkWt//S9hLVEQaJDPu/cHHPk8vPpo/0+zHy0me4LIP4= git.gammaspectra.live/S.O.N.G/go-pus v0.0.0-20220721130634-3d5460c48ab6 h1:xWv02pzrOrQDtNGgcjDw9ZZvJCAuxLbZ6+h5QVVyqvk= git.gammaspectra.live/S.O.N.G/go-pus v0.0.0-20220721130634-3d5460c48ab6/go.mod h1:vkoHSHVM9p6vAUmXAik0gvaLcIfiQYrD6bQqVpOulUk= git.gammaspectra.live/S.O.N.G/go-tta v0.2.1-0.20220226150007-096de1072bd6 h1:ITVVisbHPnUclp3PBkCbXFeBhOCBcOjPdgjJ9wRH3TI= @@ -74,8 +74,8 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190429190828-d89cdac9e872/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220829200755-d48e67d00261 h1:v6hYoSR9T5oet+pMXwUWkbiVqx/63mlHjefrHmxwfeY= -golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220909162455-aba9fc2a8ff2 h1:wM1k/lXfpc5HdkJJyW9GELpd8ERGdnh8sMGL6Gzq3Ho= +golang.org/x/sys v0.0.0-20220909162455-aba9fc2a8ff2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=