]> Sergey Matveev's repositories - go-opus.git/commitdiff
feat: add reset encoder method
authorIgor Ermakov <mjd2012@mail.ru>
Mon, 25 Sep 2023 10:53:27 +0000 (13:53 +0300)
committerHraban Luyat <hraban@0brg.net>
Mon, 25 Sep 2023 20:31:06 +0000 (16:31 -0400)
encoder.go
encoder_test.go
opus_test.go

index e87388781281152cb4b23886220f1a44bf9fd8b6..b88dc98fdaad53aeb8166162087014be3c6844b4 100644 (file)
@@ -98,6 +98,12 @@ bridge_encoder_get_packet_loss_perc(OpusEncoder *st, opus_int32 *loss_perc)
        return opus_encoder_ctl(st, OPUS_GET_PACKET_LOSS_PERC(loss_perc));
 }
 
+int
+bridge_encoder_reset_state(OpusEncoder *st)
+{
+       return opus_encoder_ctl(st, OPUS_RESET_STATE);
+}
+
 */
 import "C"
 
@@ -385,3 +391,12 @@ func (enc *Encoder) PacketLossPerc() (int, error) {
        }
        return int(lossPerc), nil
 }
+
+// Reset resets the codec state to be equivalent to a freshly initialized state.
+func (enc *Encoder) Reset() error {
+       res := C.bridge_encoder_reset_state(enc.p)
+       if res != C.OPUS_OK {
+               return Error(res)
+       }
+       return nil
+}
index 0795caecbfc55408fed51d5782b8bbe2d7b61579..56d1282bd2a861afce10c13ee3d7e37ddc261c94 100644 (file)
@@ -379,3 +379,15 @@ func TestEncoder_SetGetInvalidPacketLossPerc(t *testing.T) {
                }
        }
 }
+
+func TestEncoder_Reset(t *testing.T) {
+       enc, err := NewEncoder(48000, 1, AppVoIP)
+       if err != nil || enc == nil {
+               t.Errorf("Error creating new encoder: %v", err)
+       }
+       RunTestCodec(t, enc)
+       if err := enc.Reset(); err != nil {
+               t.Errorf("Error reset encoder: %v", err)
+       }
+       RunTestCodec(t, enc)
+}
index 82e30f0c04ff5259d5bddbc7105ac326f51e7466..2f3f3bfeb118417c9d643db875c952a9ce065c1e 100644 (file)
@@ -26,16 +26,21 @@ func TestOpusErrstr(t *testing.T) {
 }
 
 func TestCodec(t *testing.T) {
+       const SAMPLE_RATE = 48000
+       enc, err := NewEncoder(SAMPLE_RATE, 1, AppVoIP)
+       if err != nil || enc == nil {
+               t.Fatalf("Error creating new encoder: %v", err)
+       }
+       RunTestCodec(t, enc)
+}
+
+func RunTestCodec(t *testing.T, enc *Encoder) {
        // Create bogus input sound
        const G4 = 391.995
        const SAMPLE_RATE = 48000
        const FRAME_SIZE_MS = 60
        const FRAME_SIZE = SAMPLE_RATE * FRAME_SIZE_MS / 1000
        pcm := make([]int16, FRAME_SIZE)
-       enc, err := NewEncoder(SAMPLE_RATE, 1, AppVoIP)
-       if err != nil || enc == nil {
-               t.Fatalf("Error creating new encoder: %v", err)
-       }
        addSine(pcm, SAMPLE_RATE, G4)
        data := make([]byte, 1000)
        n, err := enc.Encode(pcm, data)