mxf 0.1.2

Library to read/write following SMPTE 377M (MXF) standard.
Documentation

extern crate mxf;

use std::io::BufReader;
use std::fs::File;
use std::{env, process};

use mxf::klv::klv::*;
use mxf::klv::klv_reader::*;
use mxf::klv::ul::*;

fn display_error() {
  println!("ERROR: missing filepath argument.");
  println!("usage:");
  println!("       dump [filepath.mxf]");
  process::exit(0x0f00);
}

fn main() {
  let mut filter_sound_wave = true;
  let mut filter_video_frame = true;

  let path =
    match env::args().count() {
      2 => {
        env::args().last().unwrap()
      },
      3 => {
        let arg1 = env::args().nth(1).unwrap();
        let arg2 = env::args().nth(2).unwrap();

        match (arg1.as_str(), arg2.as_str()) {
          ("-v", tmp_path) |
          (tmp_path, "-v") => {
            filter_video_frame = false;
            tmp_path.to_string()
          },
          ("-a", tmp_path) |
          (tmp_path, "-a") => {
            filter_sound_wave = false;
            tmp_path.to_string()
          },
          (_, _) => {
            display_error();
            panic!("unable to parse parameters");
          },
        }
      },
      4 => {
        let arg1 = env::args().nth(1).unwrap();
        let arg2 = env::args().nth(2).unwrap();
        let arg3 = env::args().nth(3).unwrap();

        match (arg1.as_str(), arg2.as_str(), arg3.as_str()) {
          ("-v", "-a", tmp_path) |
          ("-a", "-v", tmp_path) |
          ("-a", tmp_path, "-v") |
          ("-v", tmp_path, "-a") |
          (tmp_path, "-v", "-a") |
          (tmp_path, "-a", "-v") => {
            filter_video_frame = false;
            filter_sound_wave = false;
            tmp_path.to_string()
          },
          (_, _, _) => {
            display_error();
            panic!("unable to parse parameters");
          },
        }
      },
      _ => {
        display_error();
        panic!("Error");
      }
    };

  // println!("filter_video_frame {:?}", filter_video_frame);
  // println!("filter_sound_wave {:?}", filter_sound_wave);
  let file = File::open(path).unwrap();
  let stream = BufReader::new(file);

  let mut reader = KlvReader{
    stream: stream,
    elements: vec![]
  };

  loop {
    match next_klv(&mut reader) {
      Ok(maybe_klv) => {
        match maybe_klv {
          Some(klv) => {
            match (filter_video_frame, filter_sound_wave, klv.key.clone()) {
              (_, _, Ul::FillItem) |
              (_, _, Ul::FillItemAvid) |
              (_, _, Ul::IndexTableSegment) |
              (_, _, Ul::BodyPartition{..}) |
              (_, _, Ul::SystemItemSystemMetadataPack) |
              (_, _, Ul::SystemItemPackageMetadataSet) |
              (_, true, Ul::SoundItemWaveDataWrappedSoundElement) |
              (true, _, Ul::PictureItemMpegFrameWrappedPictureElement) |
              (true, _, Ul::Jpeg2000FrameWrapped) |
              (true, _, Ul::Jpeg2000ClipWrapped) => {
              },
              _ => {
                // println!("{:?}", klv);
                // if klv.value.elements.len() == 1 {
                //   match klv.value.elements[0].identifier {
                //     ContentData{..} => {
                //       println!("{:?}", klv);
                //     },
                //     _ => {}
                //   }
                // } else {
                //   // println!("{:?}", klv);
                // }
              },
            }
          },
          None => {
            break;
          },
        }
      },
      Err(msg) => {
        println!("ERROR: {:?}", msg);
        break;
      },
    }
    
  }
}