use std::collections::HashSet;
use std::fs::File;
use std::io::BufReader;
use std::process::ExitCode;
use clap::Parser;
use tracing::debug;
use tracing::info;
use ts_analyzer::reader::TsReader;
#[derive(Parser, Debug)]
#[command(version, about, long_about = None)]
struct Args {
#[arg(short, long)]
path: String,
}
fn main() -> ExitCode {
let args = Args::parse();
let video = &args.path;
info!("Starting laser video sorter");
let mut pids = HashSet::new();
let f = File::open(video).expect("Couldn't open file");
let buf_reader = BufReader::new(f);
let mut reader = TsReader::new(buf_reader)
.expect("Transport Stream file contains no SYNC bytes.");
loop {
let packet = match reader.next_packet() {
Ok(packet) => packet,
Err(e) => panic!("Could not get payload due to error: {}", e),
};
let Some(packet) = packet else {
debug!("Finished reading file [{}]", video);
break;
};
pids.insert(packet.header().pid());
}
let mut pids: Vec<u16> = Vec::from_iter(pids);
pids.sort();
println!("PIDs in video file [{}]:\n{:#?}", video, pids);
ExitCode::from(0)
}