X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=src%2Fcodecs%2Fpcm.rs;h=46b19928b1436ec1496696356404570277917b28;hb=HEAD;hp=c5c3b5b1e118919dded9a1fe3e8c82db903586d9;hpb=3234da61c291704c7e9d928c4c50dd41f537e0c5;p=nihav.git diff --git a/src/codecs/pcm.rs b/src/codecs/pcm.rs deleted file mode 100644 index c5c3b5b..0000000 --- a/src/codecs/pcm.rs +++ /dev/null @@ -1,67 +0,0 @@ -use formats::*; -use super::*; - -struct PCMDecoder { chmap: NAChannelMap } - -impl PCMDecoder { - fn new() -> Self { - PCMDecoder { chmap: NAChannelMap::new() } - } -} - -const CHMAP_MONO: [NAChannelType; 1] = [NAChannelType::C]; -const CHMAP_STEREO: [NAChannelType; 2] = [NAChannelType::L, NAChannelType::R]; - -fn get_default_chmap(nch: u8) -> NAChannelMap { - let mut chmap = NAChannelMap::new(); - match nch { - 1 => chmap.add_channels(&CHMAP_MONO), - 2 => chmap.add_channels(&CHMAP_STEREO), - _ => (), - } - chmap -} - -fn get_duration(ainfo: &NAAudioInfo, duration: Option, data_size: usize) -> usize { -println!("pcm in {:?}, {}", duration, data_size); - if duration == None { - let size_bits = data_size * 8; - let blk_size = (ainfo.get_channels() as usize) * (ainfo.get_format().get_bits() as usize); - size_bits / blk_size - } else { - duration.unwrap() as usize - } -} - -impl NADecoder for PCMDecoder { - fn init(&mut self, info: Rc) -> DecoderResult<()> { - if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() { -println!("got info {}", ainfo); - self.chmap = get_default_chmap(ainfo.get_channels()); - if self.chmap.num_channels() == 0 { return Err(DecoderError::InvalidData); } - Ok(()) - } else { - Err(DecoderError::InvalidData) - } - } - fn decode(&mut self, pkt: &NAPacket) -> DecoderResult { - let info = pkt.get_stream().get_info(); - if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() { - let duration = get_duration(&ainfo, pkt.get_duration(), pkt.get_buffer().len()); -println!("duration = {}", duration); - let pktbuf = pkt.get_buffer(); - let mut buf: Vec = Vec::with_capacity(pktbuf.len()); - buf.clone_from(&pktbuf); - let abuf = NAAudioBuffer::new_from_buf(ainfo, Rc::new(RefCell::new(buf)), self.chmap.clone()); - let mut frm = NAFrame::new_from_pkt(pkt, info, NABufferType::AudioPacked(abuf)); - frm.set_keyframe(true); - Ok(Rc::new(RefCell::new(frm))) - } else { - Err(DecoderError::InvalidData) - } - } -} - -pub fn get_decoder() -> Box { - Box::new(PCMDecoder::new()) -}