package filter
This commit is contained in:
parent
aeb57b323f
commit
f681e62c61
|
@ -23,7 +23,7 @@ func init() {
|
|||
}
|
||||
|
||||
func main() {
|
||||
fmt.Fprintf(os.Stderr, "\r\nTTA1 lossless audio encoder/decoder, version %s{%d}\n\n", tta.Version, tta.BinaryVersion())
|
||||
fmt.Fprintf(os.Stderr, "\r\nTTA1 lossless audio encoder/decoder, version %s\n\n", tta.Version)
|
||||
flag.Parse()
|
||||
if help || flag.NArg() < 1 || (!decode && !encode) {
|
||||
fmt.Fprintf(os.Stderr, "\rUsage of gotta: [encode|decode] [passwd PASSWORD] INPUT_FILE OUTPUT_FILE\n\n")
|
||||
|
|
6
codec.go
6
codec.go
|
@ -1,5 +1,9 @@
|
|||
package tta
|
||||
|
||||
import (
|
||||
"github.com/zyxar/tta/filter"
|
||||
)
|
||||
|
||||
type Info struct {
|
||||
format uint32 // audio format
|
||||
nch uint32 // number of channels
|
||||
|
@ -23,7 +27,7 @@ func (a *adapter) init(k0, k1 uint32) {
|
|||
}
|
||||
|
||||
type codec struct {
|
||||
filter Filter
|
||||
filter filter.Filter
|
||||
adapter adapter
|
||||
prev int32
|
||||
}
|
||||
|
|
10
const.go
10
const.go
|
@ -17,7 +17,7 @@ const (
|
|||
formatEncrypted = 2
|
||||
|
||||
// Version of TTA lib
|
||||
Version = "0.0.1"
|
||||
Version = "0.0.2"
|
||||
)
|
||||
|
||||
var (
|
||||
|
@ -34,14 +34,6 @@ var (
|
|||
errPartialWritten = errors.New("partial written")
|
||||
)
|
||||
|
||||
const ( // CPU_ARCH_TYPE
|
||||
cpuArchUndefined = iota
|
||||
cpuArchIx86Sse2
|
||||
cpuArchIx86Sse3
|
||||
cpuArchIx86Sse4_1
|
||||
cpuArchIx86Sse4_2
|
||||
)
|
||||
|
||||
var bitMask = []uint32{
|
||||
0x00000000, 0x00000001, 0x00000003, 0x00000007,
|
||||
0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f,
|
||||
|
|
|
@ -4,6 +4,7 @@ import (
|
|||
"io"
|
||||
"os"
|
||||
|
||||
"github.com/zyxar/tta/filter"
|
||||
"github.com/zyxar/tta/wave"
|
||||
)
|
||||
|
||||
|
@ -226,7 +227,7 @@ func (d *Decoder) frameInit(frame uint32, seekNeeded bool) (err error) {
|
|||
d.flen = d.flenStd
|
||||
}
|
||||
for i := 0; i < d.channels; i++ {
|
||||
d.codecs[i].filter = NewCompatibleFilter(d.data, shift)
|
||||
d.codecs[i].filter = filter.New(d.data, shift)
|
||||
d.codecs[i].adapter.init(10, 10)
|
||||
d.codecs[i].prev = 0
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"io"
|
||||
"os"
|
||||
|
||||
"github.com/zyxar/tta/filter"
|
||||
"github.com/zyxar/tta/wave"
|
||||
)
|
||||
|
||||
|
@ -228,7 +229,7 @@ func (e *Encoder) frameInit(frame uint32) (err error) {
|
|||
}
|
||||
// init entropy encoder
|
||||
for i := 0; i < e.channels; i++ {
|
||||
e.codecs[i].filter = NewCompatibleFilter(e.data, shift)
|
||||
e.codecs[i].filter = filter.New(e.data, shift)
|
||||
e.codecs[i].adapter.init(10, 10)
|
||||
e.codecs[i].prev = 0
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package tta
|
||||
package filter
|
||||
|
||||
import (
|
||||
"github.com/klauspost/cpuid"
|
|
@ -1,4 +1,4 @@
|
|||
package tta
|
||||
package filter
|
||||
|
||||
// TODO: SSE4 optimization
|
||||
|
||||
|
@ -7,20 +7,20 @@ type Filter interface {
|
|||
Encode(*int32)
|
||||
}
|
||||
|
||||
type filterCompat struct {
|
||||
index int32
|
||||
error int32
|
||||
round int32
|
||||
shift uint32
|
||||
qm [8]int32
|
||||
dx [24]int32
|
||||
dl [24]int32
|
||||
type flt struct {
|
||||
index int32
|
||||
error int32
|
||||
round int32
|
||||
shift uint32
|
||||
qm [8]int32
|
||||
dx [24]int32
|
||||
dl [24]int32
|
||||
decode func(*int32)
|
||||
encode func(*int32)
|
||||
}
|
||||
|
||||
// type filterSse filterCompat
|
||||
|
||||
func NewCompatibleFilter(data [8]byte, shift uint32) Filter {
|
||||
t := filterCompat{}
|
||||
func New(data [8]byte, shift uint32) Filter {
|
||||
t := flt{}
|
||||
t.shift = shift
|
||||
t.round = 1 << uint32(shift-1)
|
||||
t.qm[0] = int32(int8(data[0]))
|
||||
|
@ -31,10 +31,20 @@ func NewCompatibleFilter(data [8]byte, shift uint32) Filter {
|
|||
t.qm[5] = int32(int8(data[5]))
|
||||
t.qm[6] = int32(int8(data[6]))
|
||||
t.qm[7] = int32(int8(data[7]))
|
||||
t.decode = t.DecodeCompat
|
||||
t.encode = t.EncodeCompat
|
||||
return &t
|
||||
}
|
||||
|
||||
func (t *filterCompat) Decode(in *int32) {
|
||||
func (f *flt) Decode(in *int32) {
|
||||
f.decode(in)
|
||||
}
|
||||
|
||||
func (f *flt) Encode(in *int32) {
|
||||
f.encode(in)
|
||||
}
|
||||
|
||||
func (t *flt) DecodeCompat(in *int32) {
|
||||
pa := t.dl[:]
|
||||
pb := t.qm[:]
|
||||
pm := t.dx[:]
|
||||
|
@ -84,7 +94,7 @@ func (t *filterCompat) Decode(in *int32) {
|
|||
pa[4] += pa[5]
|
||||
}
|
||||
|
||||
func (t *filterCompat) Encode(in *int32) {
|
||||
func (t *flt) EncodeCompat(in *int32) {
|
||||
pa := t.dl[:]
|
||||
pb := t.qm[:]
|
||||
pm := t.dx[:]
|
Loading…
Reference in a new issue