1 use std::collections::HashMap;
13 pub const SND_U8_FORMAT: NASoniton = NASoniton { bits: 8, is_be: false, packed: false, planar: false, float: false };
15 pub const SND_S16_FORMAT: NASoniton = NASoniton { bits: 16, is_be: false, packed: false, planar: false, float: false };
18 pub struct NAAudioInfo {
26 pub fn new(sr: u32, ch: u8, fmt: NASoniton, bl: usize) -> Self {
27 NAAudioInfo { sample_rate: sr, channels: ch, format: fmt, block_len: bl }
41 pub struct NAPixelChromaton {
52 pub struct NAPixelFormaton {
55 comp_info: [Option<NAPixelChromaton>; 5],
61 macro_rules! chromaton {
62 ($hs: expr, $vs: expr, $pck: expr, $d: expr, $sh: expr, $co: expr, $ne: expr) => ({
63 Some(NAPixelChromaton{ h_ss: $hs, v_ss: $vs, is_packed: $pck, depth: $d, shift: $sh, comp_offs: $co, next_elem: $ne })
65 (yuv8; $hs: expr, $vs: expr, $co: expr) => ({
66 Some(NAPixelChromaton{ h_ss: $hs, v_ss: $vs, is_packed: false, depth: 8, shift: 0, comp_offs: $co, next_elem: 1 })
68 (pal8; $co: expr) => ({
69 Some(NAPixelChromaton{ h_ss: 0, v_ss: 0, is_packed: true, depth: 8, shift: 0, comp_offs: $co, next_elem: 3 })
74 pub const YUV420_FORMAT: NAPixelFormaton = NAPixelFormaton { model: ColorModel::YUV, components: 3,
76 chromaton!(0, 0, false, 8, 0, 0, 1),
77 chromaton!(yuv8; 1, 1, 1),
78 chromaton!(yuv8; 1, 1, 2),
80 elem_size: 0, has_alpha: false, is_palette: false };
83 pub const PAL8_FORMAT: NAPixelFormaton = NAPixelFormaton { model: ColorModel::RGB, components: 3,
89 elem_size: 1, has_alpha: false, is_palette: true };
93 pub struct NAVideoInfo {
97 format: NAPixelFormaton,
101 pub fn new(w: u32, h: u32, flip: bool, fmt: NAPixelFormaton) -> Self {
102 NAVideoInfo { width: w, height: h, flipped: flip, format: fmt }
106 pub enum NACodecTypeInfo {
113 pub struct NABuffer<'a> {
119 pub struct NACodecInfo<'a> {
120 properties: NACodecTypeInfo,
121 extradata: Option<&'a[u8]>,
124 impl<'a> NACodecInfo<'a> {
125 pub fn new(p: NACodecTypeInfo, edata: Option<&'a[u8]>) -> Self {
126 NACodecInfo { properties: p, extradata: edata }
130 pub trait NABufferAllocator {
131 fn alloc_buf(info: &NACodecInfo) -> NABuffer<'static>;
135 pub enum NAValue<'a> {
144 pub struct NAFrame<'a> {
147 duration: Option<u64>,
148 buffer: &'a mut NABuffer<'a>,
149 info: &'a NACodecInfo<'a>,
150 options: HashMap<String, NAValue<'a>>,
154 pub struct NACodecContext<'a> {
155 info: &'a NACodecInfo<'a>,