encoder.go | 28 ++++++++++++++++++++++------ encoder_test.go | 16 +++++++++++++++- diff --git a/encoder.go b/encoder.go index 3690bc1b64e43ce01d0c003e833158be391d1404..21696da6a53ea57c8344f1fa90382d0efbf0f35a 100644 --- a/encoder.go +++ b/encoder.go @@ -13,14 +13,26 @@ /* #cgo pkg-config: opus #include -int bridge_set_dtx(OpusEncoder *st, int use_dtx) { - return opus_encoder_ctl(st, OPUS_SET_DTX(use_dtx)); +void +bridge_encoder_set_dtx(OpusEncoder *st, opus_int32 use_dtx) +{ + opus_encoder_ctl(st, OPUS_SET_DTX(use_dtx)); } -int bridge_get_dtx(OpusEncoder *st) { - int dtx = 0; +opus_int32 +bridge_encoder_get_dtx(OpusEncoder *st) +{ + opus_int32 dtx = 0; opus_encoder_ctl(st, OPUS_GET_DTX(&dtx)); return dtx; +} + +opus_int32 +bridge_encoder_get_sample_rate(OpusEncoder *st) +{ + opus_int32 sample_rate = 0; + opus_encoder_ctl(st, OPUS_GET_SAMPLE_RATE(&sample_rate)); + return sample_rate; } */ import "C" @@ -124,10 +136,14 @@ dtx := 0 if use { dtx = 1 } - C.bridge_set_dtx(enc.p, C.int(dtx)) + C.bridge_encoder_set_dtx(enc.p, C.opus_int32(dtx)) } func (enc *Encoder) DTX() bool { - dtx := C.bridge_get_dtx(enc.p) + dtx := C.bridge_encoder_get_dtx(enc.p) return dtx != 0 } + +func (enc *Encoder) SampleRate() int { + return int(C.bridge_encoder_get_sample_rate(enc.p)) +} diff --git a/encoder_test.go b/encoder_test.go index 69aa5e1e3c5fd3b35e013b817edb71394d87f396..b37489f8c6e15d34a6cf21276cbfd9e527910e38 100644 --- a/encoder_test.go +++ b/encoder_test.go @@ -6,7 +6,7 @@ package opus import "testing" -func TestUseDTX(t *testing.T) { +func TestEncoderDTX(t *testing.T) { enc, err := NewEncoder(8000, 1, APPLICATION_VOIP) if err != nil || enc == nil { t.Errorf("Error creating new encoder: %v", err) @@ -20,3 +20,17 @@ t.Errorf("Error set dtx: expect dtx=%v, got dtx=%v", dtx, gotv) } } } + +func TestEncoderSampleRate(t *testing.T) { + sample_rates := []int{8000, 12000, 16000, 24000, 48000} + for _, f := range sample_rates { + enc, err := NewEncoder(f, 1, APPLICATION_VOIP) + if err != nil || enc == nil { + t.Fatalf("Error creating new encoder with sample_rate %d Hz: %v", f, err) + } + f2 := enc.SampleRate() + if f != f2 { + t.Errorf("Unexpected sample rate reported by %d Hz encoder: %d", f, f2) + } + } +}