getOrCreateDecoder returns a cached decoder for the given session ID, creating one if it doesn't exist yet.
(sessionID string)
| 59 | // getOrCreateDecoder returns a cached decoder for the given session ID, |
| 60 | // creating one if it doesn't exist yet. |
| 61 | func (o *Opus) getOrCreateDecoder(sessionID string) (*cachedDecoder, error) { |
| 62 | o.decodersMu.Lock() |
| 63 | defer o.decodersMu.Unlock() |
| 64 | |
| 65 | if cd, ok := o.decoders[sessionID]; ok { |
| 66 | cd.lastUsed = time.Now() |
| 67 | return cd, nil |
| 68 | } |
| 69 | |
| 70 | dec, err := NewDecoder(opusSampleRate, opusChannels) |
| 71 | if err != nil { |
| 72 | return nil, err |
| 73 | } |
| 74 | cd := &cachedDecoder{dec: dec, lastUsed: time.Now()} |
| 75 | o.decoders[sessionID] = cd |
| 76 | return cd, nil |
| 77 | } |
| 78 | |
| 79 | func (o *Opus) AudioEncode(req *pb.AudioEncodeRequest) (*pb.AudioEncodeResult, error) { |
| 80 | enc, err := NewEncoder(opusSampleRate, opusChannels, ApplicationAudio) |
no test coverage detected