use new NAFrameRef
[nihav-tool.git] / src / main.rs
index 214427ec296889d9130a8dde15e7079a684bb258..e191e7a4087dc11e246bb4ecec0ec60a5f7e9592 100644 (file)
@@ -33,19 +33,22 @@ struct FrameOutput {
 }
 
 impl FrameOutput {
-    fn output_frame(&mut self, pkt: &NAPacket, frmref: NAFrameRef) {
-        let frm = frmref.borrow();
+    fn output_frame(&mut self, pkt: &NAPacket, frm: NAFrameRef) {
         if frm.get_frame_type() != FrameType::Skip {
             let pts = match self.nmode {
                     NumberMode::Counter => { self.frameno },
                     NumberMode::PktPTS  => { pkt.get_pts().unwrap() },
                     NumberMode::FrmPTS  => { if let Some(pt) = frm.get_pts() { pt } else { pkt.get_pts().unwrap() } },
                 };
-            let frmbuf = frm.get_buffer().get_vbuf().unwrap();
-            if frmbuf.get_info().get_format().is_paletted() {
+            let vinfo = frm.get_buffer().get_video_info().unwrap();
+            if vinfo.get_format().is_paletted() {
                 write_palppm(self.prefix, self.streamno, pts, frm);
-            } else {
+            } else if vinfo.get_format().get_model().is_yuv() {
                 write_pgmyuv(self.prefix, self.streamno, pts, frm);
+            } else if vinfo.get_format().get_model().is_rgb() {
+                write_ppm(self.prefix, self.streamno, pts, frm);
+            } else {
+panic!(" unknown format");
             }
         }
         self.frameno += 1;
@@ -61,10 +64,10 @@ impl AudioOutput {
     fn new(name: &String) -> Self { Self { wwr: WavWriter::new(name), wrote_header: false } }
     fn output_frame(&mut self, _pkt: &NAPacket, frm: NAFrameRef) {
         if !self.wrote_header {
-            self.wwr.write_header(frm.borrow().get_info().as_ref().get_properties().get_audio_info().unwrap()).unwrap();
+            self.wwr.write_header(frm.get_info().as_ref().get_properties().get_audio_info().unwrap()).unwrap();
             self.wrote_header = true;
         }
-        self.wwr.write_frame(frm.borrow().get_buffer()).unwrap();
+        self.wwr.write_frame(frm.get_buffer()).unwrap();
     }
 }