#cgo pkg-config: opus
#include <opus/opus.h>
-void
+int
bridge_encoder_set_dtx(OpusEncoder *st, opus_int32 use_dtx)
{
- opus_encoder_ctl(st, OPUS_SET_DTX(use_dtx));
+ return opus_encoder_ctl(st, OPUS_SET_DTX(use_dtx));
}
-opus_int32
-bridge_encoder_get_dtx(OpusEncoder *st)
+int
+bridge_encoder_get_dtx(OpusEncoder *st, opus_int32 *dtx)
{
- opus_int32 dtx = 0;
- opus_encoder_ctl(st, OPUS_GET_DTX(&dtx));
- return dtx;
+ return opus_encoder_ctl(st, OPUS_GET_DTX(dtx));
}
-opus_int32
-bridge_encoder_get_sample_rate(OpusEncoder *st)
+int
+bridge_encoder_get_sample_rate(OpusEncoder *st, opus_int32 *sample_rate)
{
- opus_int32 sample_rate = 0;
- int ret = opus_encoder_ctl(st, OPUS_GET_SAMPLE_RATE(&sample_rate));
- return sample_rate;
+ return opus_encoder_ctl(st, OPUS_GET_SAMPLE_RATE(sample_rate));
}
}
// UseDTX configures the encoder's use of discontinuous transmission (DTX).
-func (enc *Encoder) UseDTX(use bool) {
+func (enc *Encoder) UseDTX(use bool) error {
dtx := 0
if use {
dtx = 1
}
- C.bridge_encoder_set_dtx(enc.p, C.opus_int32(dtx))
+ res := C.bridge_encoder_set_dtx(enc.p, C.opus_int32(dtx))
+ if res != C.OPUS_OK {
+ return Error(res)
+ }
+ return nil
}
// DTX reports whether this encoder is configured to use discontinuous
// transmission (DTX).
-func (enc *Encoder) DTX() bool {
- dtx := C.bridge_encoder_get_dtx(enc.p)
- return dtx != 0
+func (enc *Encoder) DTX() (bool, error) {
+ var dtx C.opus_int32
+ res := C.bridge_encoder_get_dtx(enc.p, &dtx)
+ if res != C.OPUS_OK {
+ return false, Error(res)
+ }
+ return dtx != 0, nil
}
// SampleRate returns the encoder sample rate in Hz.
-func (enc *Encoder) SampleRate() int {
- return int(C.bridge_encoder_get_sample_rate(enc.p))
+func (enc *Encoder) SampleRate() (int, error) {
+ var sr C.opus_int32
+ res := C.bridge_encoder_get_sample_rate(enc.p, &sr)
+ if res != C.OPUS_OK {
+ return 0, Error(res)
+ }
+ return int(sr), nil
}
// SetBitrate sets the bitrate of the Encoder
}
vals := []bool{true, false}
for _, dtx := range vals {
- enc.UseDTX(dtx)
- gotv := enc.DTX()
+ err := enc.UseDTX(dtx)
+ if err != nil {
+ t.Fatalf("Error setting DTX to %t: %v", dtx, err)
+ }
+ gotv, err := enc.DTX()
+ if err != nil {
+ t.Fatalf("Error getting DTX (%t): %v", dtx, err)
+ }
if gotv != dtx {
t.Errorf("Error set dtx: expect dtx=%v, got dtx=%v", dtx, gotv)
}
if err != nil || enc == nil {
t.Fatalf("Error creating new encoder with sample_rate %d Hz: %v", f, err)
}
- f2 := enc.SampleRate()
+ f2, err := enc.SampleRate()
+ if err != nil {
+ t.Fatalf("Error getting sample rate (%d Hz): %v", f, err)
+ }
if f != f2 {
t.Errorf("Unexpected sample rate reported by %d Hz encoder: %d", f, f2)
}