Added get last packet duration in decoder ctls

This commit is contained in:
elinor 2018-03-26 07:54:20 +03:00
parent 01412cbea5
commit 5822db34bb
2 changed files with 52 additions and 0 deletions

View file

@ -12,6 +12,12 @@ import (
/*
#cgo pkg-config: opus
#include <opus.h>
int
bridge_decoder_get_last_packet_duration(OpusDecoder *st, opus_int32 *samples)
{
return opus_decoder_ctl(st, OPUS_GET_LAST_PACKET_DURATION(samples));
}
*/
import "C"
@ -105,3 +111,13 @@ func (dec *Decoder) DecodeFloat32(data []byte, pcm []float32) (int, error) {
}
return n, nil
}
// Gets the duration (in samples) of the last packet successfully decoded or concealed.
func (dec *Decoder) LastPacketDuration() (int,error){
var samples C.opus_int32
res := C.bridge_decoder_get_last_packet_duration(dec.p, &samples)
if res != C.OPUS_OK {
return 0, Error(res)
}
return int(samples), nil
}

View file

@ -30,3 +30,39 @@ func TestDecoderUnitialized(t *testing.T) {
t.Errorf("Expected \"unitialized decoder\" error: %v", err)
}
}
func TestDecoder_GetLastPacketDuration(t *testing.T) {
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)
if err != nil {
t.Fatalf("Couldn't encode data: %v", err)
}
data = data[:n]
dec, err := NewDecoder(SAMPLE_RATE, 1)
if err != nil || dec == nil {
t.Fatalf("Error creating new decoder: %v", err)
}
n, err = dec.Decode(data, pcm)
if err != nil {
t.Fatalf("Couldn't decode data: %v", err)
}
samples, err := dec.LastPacketDuration()
if err!=nil{
t.Fatalf("Couldn't get last packet duration: %v",err)
}
if samples!=n{
t.Fatalf("Wrong duration length. Expected %d. Got %d", n, samples)
}
}