]> git.nihav.org Git - nihav.git/blobdiff - nihav-core/src/test/dec_video.rs
use chromaton offsets when writing paletted image
[nihav.git] / nihav-core / src / test / dec_video.rs
index 4a181917ebeae8b75c676f06aa133b7bf38ccc89..21c3f1aaa4f5f18af36b60996a5a137d908e7c6d 100644 (file)
@@ -3,7 +3,7 @@ use std::io::prelude::*;
 use crate::frame::*;
 use crate::codecs::*;
 use crate::demuxers::*;
-use crate::io::byteio::*;
+//use crate::io::byteio::*;
 use super::wavwriter::WavWriter;
 
 fn write_pgmyuv(pfx: &str, strno: usize, num: u64, frmref: NAFrameRef) {
@@ -77,6 +77,11 @@ fn write_palppm(pfx: &str, strno: usize, num: u64, frmref: NAFrameRef) {
     ofile.write_all(hdr.as_bytes()).unwrap();
     let dta = buf.get_data();
     let ls = buf.get_stride(0);
+    let offs: [usize; 3] = [
+            buf.get_info().get_format().get_chromaton(0).unwrap().get_offset() as usize,
+            buf.get_info().get_format().get_chromaton(1).unwrap().get_offset() as usize,
+            buf.get_info().get_format().get_chromaton(2).unwrap().get_offset() as usize
+        ];
     let mut idx  = 0;
     let mut line: Vec<u8> = Vec::with_capacity(w * 3);
     line.resize(w * 3, 0);
@@ -84,9 +89,9 @@ fn write_palppm(pfx: &str, strno: usize, num: u64, frmref: NAFrameRef) {
         let src = &dta[idx..(idx+w)];
         for x in 0..w {
             let pix = src[x] as usize;
-            line[x * 3 + 0] = dta[paloff + pix * 3 + 2];
-            line[x * 3 + 1] = dta[paloff + pix * 3 + 1];
-            line[x * 3 + 2] = dta[paloff + pix * 3 + 0];
+            line[x * 3 + 0] = dta[paloff + pix * 3 + offs[0]];
+            line[x * 3 + 1] = dta[paloff + pix * 3 + offs[1]];
+            line[x * 3 + 2] = dta[paloff + pix * 3 + offs[2]];
         }
         ofile.write_all(line.as_slice()).unwrap();
         idx  += ls;
@@ -103,8 +108,9 @@ fn write_palppm(pfx: &str, strno: usize, num: u64, frmref: NAFrameRef) {
 
 pub fn test_file_decoding(demuxer: &str, name: &str, limit: Option<u64>,
                           decode_video: bool, decode_audio: bool,
-                          video_pfx: Option<&str>) {
-    let dmx_f = find_demuxer(demuxer).unwrap();
+                          video_pfx: Option<&str>,
+                          dmx_reg: &RegisteredDemuxers, dec_reg: &RegisteredDecoders) {
+    let dmx_f = dmx_reg.find_demuxer(demuxer).unwrap();
     let mut file = File::open(name).unwrap();
     let mut fr = FileReader::new_read(&mut file);
     let mut br = ByteReader::new(&mut fr);
@@ -114,7 +120,7 @@ pub fn test_file_decoding(demuxer: &str, name: &str, limit: Option<u64>,
     for i in 0..dmx.get_num_streams() {
         let s = dmx.get_stream(i).unwrap();
         let info = s.get_info();
-        let decfunc = find_decoder(info.get_name());
+        let decfunc = dec_reg.find_decoder(info.get_name());
         if let Some(df) = decfunc {
             if (decode_video && info.is_video()) || (decode_audio && info.is_audio()) {
                 let mut dec = (df)();
@@ -154,8 +160,9 @@ pub fn test_file_decoding(demuxer: &str, name: &str, limit: Option<u64>,
     }
 }
 
-pub fn test_decode_audio(demuxer: &str, name: &str, limit: Option<u64>, audio_pfx: &str) {
-    let dmx_f = find_demuxer(demuxer).unwrap();
+pub fn test_decode_audio(demuxer: &str, name: &str, limit: Option<u64>, audio_pfx: &str,
+                         dmx_reg: &RegisteredDemuxers, dec_reg: &RegisteredDecoders) {
+    let dmx_f = dmx_reg.find_demuxer(demuxer).unwrap();
     let mut file = File::open(name).unwrap();
     let mut fr = FileReader::new_read(&mut file);
     let mut br = ByteReader::new(&mut fr);
@@ -165,7 +172,7 @@ pub fn test_decode_audio(demuxer: &str, name: &str, limit: Option<u64>, audio_pf
     for i in 0..dmx.get_num_streams() {
         let s = dmx.get_stream(i).unwrap();
         let info = s.get_info();
-        let decfunc = find_decoder(info.get_name());
+        let decfunc = dec_reg.find_decoder(info.get_name());
         if let Some(df) = decfunc {
             if info.is_audio() {
                 let mut dec = (df)();