rav1repl.rs 2.25 KB
Newer Older
1 2 3 4 5 6 7 8 9
// Copyright (c) 2017-2018, The rav1e contributors. All rights reserved
//
// This source code is subject to the terms of the BSD 2 Clause License and
// the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
// was not distributed with this source code in the LICENSE file, you can
// obtain it at www.aomedia.org/license/software. If the Alliance for Open
// Media Patent License 1.0 was not distributed with this source code in the
// PATENTS file, you can obtain it at www.aomedia.org/license/patent.

Guillaume Martres's avatar
Guillaume Martres committed
10 11 12 13 14 15 16 17 18 19
extern crate rustyline;
extern crate y4m;

extern crate rav1e;
use rav1e::*;

use rustyline::error::ReadlineError;
use rustyline::Editor;

fn main() {
Michael Bebenita's avatar
Michael Bebenita committed
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
  let mut files = EncoderConfig::from_cli();
  let mut y4m_dec = y4m::decode(&mut files.input_file).unwrap();
  let width = y4m_dec.get_width();
  let height = y4m_dec.get_height();
  let framerate = y4m_dec.get_framerate();
  let mut y4m_enc = match files.rec_file.as_mut() {
    Some(rec_file) => Some(
      y4m::encode(width, height, framerate).write_header(rec_file).unwrap()
    ),
    None => None
  };
  let mut fi =
    FrameInvariants::new(width, height, files.quantizer, files.speed);
  let sequence = Sequence::new();
  write_ivf_header(
    &mut files.output_file,
    fi.padded_w,
    fi.padded_h,
    framerate.num,
    framerate.den
  );
Guillaume Martres's avatar
Guillaume Martres committed
41

Michael Bebenita's avatar
Michael Bebenita committed
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
  let mut rl = Editor::<()>::new();
  let _ = rl.load_history(".rav1e-history");
  let mut last_rec: Option<Frame> = None;
  loop {
    let readline = rl.readline(">> ");
    match readline {
      Ok(line) => {
        rl.add_history_entry(&line);
        match line.split_whitespace().next() {
          Some("process_frame") => {
            process_frame(
              &sequence,
              &fi,
              &mut files.output_file,
              &mut y4m_dec,
              y4m_enc.as_mut(),
              &mut last_rec
            );
            fi.number += 1;
            if fi.number == files.limit {
              break;
            }
          }
          Some("quit") => break,
          Some("exit") => break,
          Some(cmd) => {
            println!("Unrecognized command: {:?}", cmd);
          }
          None => {}
Guillaume Martres's avatar
Guillaume Martres committed
71
        }
Michael Bebenita's avatar
Michael Bebenita committed
72 73 74
      }
      Err(ReadlineError::Eof) => break,
      _ => {}
Guillaume Martres's avatar
Guillaume Martres committed
75
    }
Michael Bebenita's avatar
Michael Bebenita committed
76 77
  }
  rl.save_history(".rav1e-history").unwrap();
Guillaume Martres's avatar
Guillaume Martres committed
78
}