Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct Sample {
- pub v: Vec<u8>, pub channels: usize,
- }
- fn main() {
- let mut v=Sample{v: vec![0; 16],channels: 2};
- get_sample(&mut v, 1)[0]=-1i16;
- get_sample(&mut v, 3)[0]=1i16;
- get_sample(&mut v, 3)[1]=-1i16;
- assert_eq!(v.v,vec![0,0,0,0,255,255,0,0,0,0,0,0,1,0,255,255]) //ONLY on little endian!!
- }
- fn get_sample<'a>(buf: &'a mut Sample, pos: usize) -> &'a mut [i16] {
- let win=2*buf.channels;
- let pos=pos*win;
- assert!(pos>=0 && pos+win<=buf.v.len());
- let sl: &mut [u8] = &mut buf.v[pos..pos+win];
- let slp=sl.as_mut_ptr() as *mut i16;
- unsafe {std::slice::from_raw_parts_mut(slp,buf.channels)}
- }
Add Comment
Please, Sign In to add comment