make all codec crates export just register_all functions and document them
[nihav.git] / nihav-game / src / codecs / gremlinvideo.rs
index cf7f7b13c1ff23425d8fb47063e5e7c5c519d7af..096c7b614438323a23ec07fa43503b8a187d8594 100644 (file)
@@ -50,7 +50,7 @@ impl Bits32 {
         self.queue >>= nbits;
         self.fill   -= nbits;
         if self.fill <= 16 {
-            self.queue |= (br.read_u16le()? as u32) << self.fill;
+            self.queue |= u32::from(br.read_u16le()?) << self.fill;
             self.fill  += 16;
         }
         Ok(res)
@@ -371,12 +371,12 @@ impl GremlinVideoDecoder {
 }
 
 impl NADecoder for GremlinVideoDecoder {
-    fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
+    fn init(&mut self, _supp: &mut NADecoderSupport, info: NACodecInfoRef) -> DecoderResult<()> {
         if let NACodecTypeInfo::Video(vinfo) = info.get_properties() {
             let w = vinfo.get_width();
             let h = vinfo.get_height();
             if !vinfo.get_format().is_paletted() { return Err(DecoderError::NotImplemented); }
-            let fmt = formats::PAL8_FORMAT;
+            let fmt = PAL8_FORMAT;
             let myinfo = NACodecTypeInfo::Video(NAVideoInfo::new(w, h, false, fmt));
             self.info = NACodecInfo::new_ref(info.get_name(), myinfo, info.get_extradata()).into_ref();
 
@@ -393,7 +393,7 @@ impl NADecoder for GremlinVideoDecoder {
             for c in 0..256 {
                 for i in 0..3 {
                     let cc = edata[c * 3 + i];
-                    self.pal[c * 3 + (2 - i)] = (cc << 2) | (cc >> 4);
+                    self.pal[c * 3 + i] = (cc << 2) | (cc >> 4);
                 }
             }
             Ok(())
@@ -401,7 +401,7 @@ impl NADecoder for GremlinVideoDecoder {
             Err(DecoderError::InvalidData)
         }
     }
-    fn decode(&mut self, pkt: &NAPacket) -> DecoderResult<NAFrameRef> {
+    fn decode(&mut self, _supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult<NAFrameRef> {
         let src = pkt.get_buffer();
         let mut mr = MemoryReader::new_read(&src);
         let mut br = ByteReader::new(&mut mr);
@@ -420,7 +420,7 @@ impl NADecoder for GremlinVideoDecoder {
             for c in 0..256 {
                 for i in 0..3 {
                     let b = br.read_byte()?;
-                    self.pal[c * 3 + (2 - i)] = (b << 2) | (b >> 4);
+                    self.pal[c * 3 + i] = (b << 2) | (b >> 4);
                 }
             }
             if cmethod == 1 {
@@ -429,12 +429,12 @@ impl NADecoder for GremlinVideoDecoder {
             let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), NABufferType::None);
             frm.set_keyframe(false);
             frm.set_frame_type(FrameType::Skip);
-            return Ok(Rc::new(RefCell::new(frm)))
+            return Ok(frm.into_ref())
         } else if cmethod == 3 {
             let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), NABufferType::None);
             frm.set_keyframe(false);
             frm.set_frame_type(FrameType::Skip);
-            return Ok(Rc::new(RefCell::new(frm)))
+            return Ok(frm.into_ref())
         } else if cmethod == 2 {
             self.decode_method2(&mut br)?;
         } else if cmethod == 5 {
@@ -447,20 +447,20 @@ impl NADecoder for GremlinVideoDecoder {
             return Err(DecoderError::NotImplemented);
         }
 
-        let bufret = alloc_video_buffer(self.info.get_properties().get_video_info().unwrap(), 0);
-        if let Err(_) = bufret { return Err(DecoderError::InvalidData); }
-        let mut bufinfo = bufret.unwrap();
+        let mut bufinfo = alloc_video_buffer(self.info.get_properties().get_video_info().unwrap(), 0)?;
 
         self.output_frame(&mut bufinfo, w, h);
 
         let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
         frm.set_keyframe(is_intra);
         frm.set_frame_type(if is_intra { FrameType::I } else { FrameType::P });
-        Ok(Rc::new(RefCell::new(frm)))
+        Ok(frm.into_ref())
+    }
+    fn flush(&mut self) {
     }
 }
 
-pub fn get_decoder_video() -> Box<NADecoder> {
+pub fn get_decoder_video() -> Box<dyn NADecoder + Send> {
     Box::new(GremlinVideoDecoder::new())
 }
 
@@ -510,7 +510,7 @@ fn get_default_chmap(nch: u8) -> NAChannelMap {
 }
 
 impl NADecoder for GremlinAudioDecoder {
-    fn init(&mut self, info: NACodecInfoRef) -> DecoderResult<()> {
+    fn init(&mut self, _supp: &mut NADecoderSupport, info: NACodecInfoRef) -> DecoderResult<()> {
         if let NACodecTypeInfo::Audio(ainfo) = info.get_properties() {
             self.ainfo = NAAudioInfo::new(ainfo.get_sample_rate(), ainfo.get_channels(), formats::SND_S16P_FORMAT, ainfo.get_block_len());
             self.chmap = get_default_chmap(ainfo.get_channels());
@@ -520,7 +520,7 @@ impl NADecoder for GremlinAudioDecoder {
             Err(DecoderError::InvalidData)
         }
     }
-    fn decode(&mut self, pkt: &NAPacket) -> DecoderResult<NAFrameRef> {
+    fn decode(&mut self, _supp: &mut NADecoderSupport, pkt: &NAPacket) -> DecoderResult<NAFrameRef> {
         let info = pkt.get_stream().get_info();
         if let NACodecTypeInfo::Audio(_) = info.get_properties() {
             let pktbuf = pkt.get_buffer();
@@ -545,14 +545,16 @@ impl NADecoder for GremlinAudioDecoder {
             let mut frm = NAFrame::new_from_pkt(pkt, info, abuf);
             frm.set_duration(Some(samples as u64));
             frm.set_keyframe(false);
-            Ok(Rc::new(RefCell::new(frm)))
+            Ok(frm.into_ref())
         } else {
             Err(DecoderError::InvalidData)
         }
     }
+    fn flush(&mut self) {
+    }
 }
 
-pub fn get_decoder_audio() -> Box<NADecoder> {
+pub fn get_decoder_audio() -> Box<dyn NADecoder + Send> {
     Box::new(GremlinAudioDecoder::new())
 }
 
@@ -561,8 +563,8 @@ mod test {
     use nihav_core::codecs::RegisteredDecoders;
     use nihav_core::demuxers::RegisteredDemuxers;
     use nihav_core::test::dec_video::test_file_decoding;
-    use crate::codecs::game_register_all_codecs;
-    use crate::demuxers::game_register_all_demuxers;
+    use crate::game_register_all_codecs;
+    use crate::game_register_all_demuxers;
     #[test]
     fn test_gdv() {
         let mut dmx_reg = RegisteredDemuxers::new();