#![allow(
dead_code,
clippy::needless_range_loop,
clippy::excessive_precision,
clippy::useless_vec,
clippy::too_many_arguments,
clippy::collapsible_if,
clippy::collapsible_else_if,
clippy::nonminimal_bool,
clippy::manual_range_contains,
clippy::needless_late_init,
clippy::needless_return,
clippy::let_unit_value,
clippy::needless_borrow,
unused_mut,
unused_variables,
unused_assignments,
clippy::unnecessary_cast,
clippy::manual_memcpy,
clippy::neg_multiply,
clippy::precedence
)]
pub mod decoder;
pub mod encoder;
pub mod header;
pub mod silk;
pub mod toc;
use oxideav_codec::{CodecInfo, CodecRegistry, Decoder, Encoder};
use oxideav_core::{CodecCapabilities, CodecId, CodecParameters, CodecTag, Result};
pub const CODEC_ID_STR: &str = "opus";
pub fn register(reg: &mut CodecRegistry) {
let caps = CodecCapabilities::audio("opus_sw")
.with_lossy(true)
.with_max_channels(2)
.with_max_sample_rate(48_000);
reg.register(
CodecInfo::new(CodecId::new(CODEC_ID_STR))
.capabilities(caps)
.decoder(make_decoder)
.encoder(make_encoder)
.tags([
CodecTag::wave_format(0x4F70),
CodecTag::wave_format(0x704F),
CodecTag::wave_format(0x7075),
]),
);
}
fn make_decoder(params: &CodecParameters) -> Result<Box<dyn Decoder>> {
decoder::make_decoder(params)
}
fn make_encoder(params: &CodecParameters) -> Result<Box<dyn Encoder>> {
encoder::make_encoder(params)
}
pub use header::{parse_opus_head, OpusHead};
pub use toc::{parse_packet, OpusBandwidth, OpusMode, OpusPacket, Toc};