indeo2: swap chroma planes
[nihav.git] / nihav-indeo / src / codecs / indeo2.rs
index a022ec4af1a62d7781c72fbdf5d6819c99643219..089cd3598cd9275601e11f32992cb905e9ac603e 100644 (file)
@@ -335,7 +335,8 @@ impl NADecoder for Indeo2Decoder {
             let mut buf = bufinfo.get_vbuf().unwrap();
             for plane in 0..3 {
                 let tabidx = (if plane == 0 { luma_tab } else { chroma_tab }) as usize;
-                self.decode_plane_intra(&mut br, &mut buf, plane, tabidx)?;
+                let planeno = if plane == 0 { 0 } else { plane ^ 3 };
+                self.decode_plane_intra(&mut br, &mut buf, planeno, tabidx)?;
             }
             self.frmmgr.add_frame(buf);
             let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), bufinfo);
@@ -349,7 +350,8 @@ impl NADecoder for Indeo2Decoder {
 
             for plane in 0..3 {
                 let tabidx = (if plane == 0 { luma_tab } else { chroma_tab }) as usize;
-                self.decode_plane_inter(&mut br, &mut buf, plane, tabidx)?;
+                let planeno = if plane == 0 { 0 } else { plane ^ 3 };
+                self.decode_plane_inter(&mut br, &mut buf, planeno, tabidx)?;
             }
             let mut frm = NAFrame::new_from_pkt(pkt, self.info.clone(), NABufferType::Video(buf));
             frm.set_keyframe(false);
@@ -357,9 +359,12 @@ impl NADecoder for Indeo2Decoder {
             Ok(frm.into_ref())
         }
     }
+    fn flush(&mut self) {
+        self.frmmgr.clear();
+    }
 }
 
-pub fn get_decoder() -> Box<dyn NADecoder> {
+pub fn get_decoder() -> Box<dyn NADecoder + Send> {
     Box::new(Indeo2Decoder::new())
 }