direct_play_nice 0.1.0-beta.3

CLI program that converts video files to direct-play-compatible formats.
Documentation
#![cfg(feature = "ffmpeg-cli-tests")]

use assert_cmd::prelude::*;
use predicates::str;
use std::ffi::CString;
use std::process::Command;
use tempfile::TempDir;

mod common;

use rsmpeg::avformat::AVFormatContextInput;
use rsmpeg::ffi;

#[test]
fn cli_sub_mode_skip_drops_all_subtitle_streams() -> Result<(), Box<dyn std::error::Error>> {
    common::ensure_ffmpeg_present();

    let tmp = TempDir::new()?;
    let (input, _dur_ms) = common::gen_problem_input(&tmp);
    let output = tmp.path().join("out_no_subs.mp4");

    let mut cmd = Command::new(assert_cmd::cargo::cargo_bin!("direct_play_nice"));
    cmd.arg("--sub-mode")
        .arg("skip")
        .arg("-s")
        .arg("chromecast_1st_gen,chromecast_2nd_gen,chromecast_ultra")
        .arg(&input)
        .arg(&output);
    cmd.assert().success().stdout(str::is_empty());

    let output_cstr = CString::new(output.to_string_lossy().to_string())?;
    let octx = AVFormatContextInput::open(output_cstr.as_c_str())?;

    let subtitle_count = octx
        .streams()
        .iter()
        .filter(|st| st.codecpar().codec_type == ffi::AVMEDIA_TYPE_SUBTITLE)
        .count();

    assert_eq!(subtitle_count, 0, "expected no subtitle streams in output");

    Ok(())
}