use std::{io::Cursor, panic};
use wasm_bindgen::prelude::*;
use crate::remuxer::{
Remuxer,
ogg_to_ogg::{OggToOgg as OggToOggRemuxer, OggVorbisStreamPassthroughMangler}
};
#[cfg(all(target_arch = "wasm32", not(target_feature = "atomics")))]
#[global_allocator]
static GLOBAL_ALLOCATOR: rlsf::SmallGlobalTlsf = rlsf::SmallGlobalTlsf::new();
#[wasm_bindgen(start)]
fn main() {
#[cfg(feature = "wasm-web-bindings")]
{
panic::set_hook(Box::new(|hook_info| {
web_sys::console::error_1(&web_sys::js_sys::Error::new(&hook_info.to_string()).into());
}));
console_log::init().ok();
}
}
#[wasm_bindgen]
pub struct OggToOgg {
inner: OggToOggRemuxer<OggVorbisStreamPassthroughMangler>
}
#[wasm_bindgen]
impl OggToOgg {
#[wasm_bindgen(constructor)]
pub fn new_with_defaults() -> Self {
Self {
inner: OggToOggRemuxer::new_with_defaults()
}
}
pub fn remux(&self, buf: &[u8]) -> Result<Box<[u8]>, String> {
let mut sink = Vec::with_capacity(buf.len() / 2);
self.inner
.remux(Cursor::new(buf), &mut sink)
.map_err(|err| err.to_string())?;
Ok(sink.into_boxed_slice())
}
}