atm0s_media_server_codecs/
opus.rs1use opus_wrap::{Application, Channels};
2
3use crate::{AudioDecoder, AudioEncodder};
4
5#[allow(unused)]
6#[allow(clippy::redundant_field_names)]
7#[allow(clippy::len_zero)]
8#[allow(clippy::needless_lifetimes)]
9mod opus_wrap;
10
11pub struct OpusDecoder {
12 decoder: opus_wrap::Decoder,
13}
14
15impl Default for OpusDecoder {
16 fn default() -> Self {
17 let decoder = opus_wrap::Decoder::new(48000, Channels::Mono).expect("Should create opus decoder");
18 Self { decoder }
19 }
20}
21
22impl AudioDecoder for OpusDecoder {
23 fn decode(&mut self, in_buf: &[u8], out_buf: &mut [i16]) -> Option<usize> {
24 self.decoder.decode(in_buf, out_buf, false).ok()
26 }
27}
28
29pub struct OpusEncoder {
30 encoder: opus_wrap::Encoder,
31}
32
33impl Default for OpusEncoder {
34 fn default() -> Self {
35 let encoder = opus_wrap::Encoder::new(48000, Channels::Mono, Application::Voip).expect("Should create opus encoder");
36 Self { encoder }
37 }
38}
39
40impl AudioEncodder for OpusEncoder {
41 fn encode(&mut self, in_buf: &[i16], out_buf: &mut [u8]) -> Option<usize> {
42 self.encoder.encode(in_buf, out_buf).ok()
43 }
44}