mirror of https://bitbucket.org/ausocean/av.git
alsa: refactor DataSize function
This commit is contained in:
parent
35e602748d
commit
1d67ab65a4
|
@ -156,7 +156,6 @@ func main() {
|
|||
uint(ac.parameters.channels),
|
||||
uint(ac.parameters.bits),
|
||||
float64(ac.parameters.period),
|
||||
0,
|
||||
)
|
||||
rbLen := rbDuration / ac.period
|
||||
ac.rb = ring.NewBuffer(int(rbLen), cs, rbTimeout)
|
||||
|
|
|
@ -40,5 +40,5 @@ const (
|
|||
|
||||
// IsValid recieves an int representing a codec and checks if it is valid.
|
||||
func IsValid(codec uint8) bool {
|
||||
return 0 <= codec && codec < numCodecs
|
||||
return 0 < codec && codec <= numCodecs
|
||||
}
|
||||
|
|
|
@ -32,8 +32,6 @@ import (
|
|||
"encoding/binary"
|
||||
"fmt"
|
||||
|
||||
"bitbucket.org/ausocean/av/codec/adpcm"
|
||||
"bitbucket.org/ausocean/av/codec/codecutil"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
|
@ -67,12 +65,9 @@ type Buffer struct {
|
|||
Data []byte
|
||||
}
|
||||
|
||||
// DataSize takes audio attributes describing audio data and returns the size of that data.
|
||||
func DataSize(rate, channels, bitDepth uint, period float64, codec uint8) int {
|
||||
// DataSize takes audio attributes describing PCM audio data and returns the size of that data.
|
||||
func DataSize(rate, channels, bitDepth uint, period float64) int {
|
||||
s := int(float64(channels) * float64(rate) * float64(bitDepth/8) * period)
|
||||
if codec == codecutil.ADPCM {
|
||||
s = adpcm.EncBytes(s)
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
|
|
|
@ -170,7 +170,7 @@ func (d *ALSA) Setup(c config.Config) error {
|
|||
}
|
||||
|
||||
// Create ring buffer with appropriate chunk size.
|
||||
cs := pcm.DataSize(d.SampleRate, d.Channels, d.BitDepth, d.RecPeriod, d.Codec)
|
||||
cs := d.DataSize()
|
||||
d.rb = ring.NewBuffer(rbLen, cs, rbTimeout)
|
||||
|
||||
// Start device in paused mode.
|
||||
|
@ -470,7 +470,11 @@ func (d *ALSA) formatBuffer() pcm.Buffer {
|
|||
// DataSize returns the size in bytes of the data ALSA device d will
|
||||
// output in the duration of a single recording period.
|
||||
func (d *ALSA) DataSize() int {
|
||||
return pcm.DataSize(d.SampleRate, d.Channels, d.BitDepth, d.RecPeriod, d.Codec)
|
||||
s := pcm.DataSize(d.SampleRate, d.Channels, d.BitDepth, d.RecPeriod)
|
||||
if d.Codec == codecutil.ADPCM {
|
||||
s = adpcm.EncBytes(s)
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
// nearestPowerOfTwo finds and returns the nearest power of two to the given integer.
|
||||
|
|
|
@ -34,7 +34,6 @@ import (
|
|||
"time"
|
||||
|
||||
"bitbucket.org/ausocean/av/codec/codecutil"
|
||||
"bitbucket.org/ausocean/av/codec/pcm"
|
||||
"bitbucket.org/ausocean/av/device"
|
||||
"bitbucket.org/ausocean/av/revid/config"
|
||||
"bitbucket.org/ausocean/utils/logger"
|
||||
|
@ -66,7 +65,7 @@ func TestDevice(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
cs := pcm.DataSize(c.SampleRate, c.Channels, c.BitDepth, c.RecPeriod, c.InputCodec)
|
||||
cs := ai.DataSize()
|
||||
lexer, err := codecutil.NewByteLexer(cs)
|
||||
go lexer.Lex(ioutil.Discard, ai, time.Duration(c.RecPeriod*float64(time.Second)))
|
||||
time.Sleep(time.Duration(c.RecPeriod*float64(time.Second)) * time.Duration(n))
|
||||
|
|
Loading…
Reference in New Issue