fix pad filter, simpler source validation

This commit is contained in:
jb-alvarado 2022-05-31 13:58:38 +02:00
parent a9dae4ee5b
commit 1af055dcfd
4 changed files with 17 additions and 33 deletions

View File

@ -74,23 +74,13 @@ fn deinterlace(field_order: &Option<String>, chain: &mut Filters) {
fn pad(aspect: f64, chain: &mut Filters, config: &GlobalConfig) {
if !is_close(aspect, config.processing.aspect, 0.03) {
if aspect < config.processing.aspect {
chain.add_filter(
&format!(
"pad=ih*{}/{}/sar:ih:(ow-iw)/2:(oh-ih)/2",
"pad=max(iw\\,ih*({0}/{1})):ow/({0}/{1}):(ow-iw)/2:(oh-ih)/2",
config.processing.width, config.processing.height
),
"video",
)
} else if aspect > config.processing.aspect {
chain.add_filter(
&format!(
"pad=iw:iw*{}/{}/sar:(ow-iw)/2:(oh-ih)/2",
config.processing.width, config.processing.height
),
"video",
)
}
}
}

View File

@ -12,7 +12,7 @@ use simplelog::*;
use crate::utils::{
check_sync, gen_dummy, get_delta, get_sec, is_close, json_serializer::read_json, modified_time,
seek_and_length, validate_source, GlobalConfig, Media, PlayoutStatus, DUMMY_LEN,
seek_and_length, valid_source, GlobalConfig, Media, PlayoutStatus, DUMMY_LEN,
};
/// Struct for current playlist.
@ -430,7 +430,7 @@ fn timed_source(
/// Generate the source CMD, or when clip not exist, get a dummy.
fn gen_source(config: &GlobalConfig, mut node: Media) -> Media {
if validate_source(&node.source) {
if valid_source(&node.source) {
node.add_probe();
node.cmd = Some(seek_and_length(
node.source.clone(),
@ -440,13 +440,13 @@ fn gen_source(config: &GlobalConfig, mut node: Media) -> Media {
));
node.add_filter(config);
} else {
if node.source.chars().count() == 0 {
if node.source.is_empty() {
warn!(
"Generate filler with <yellow>{:.2}</> seconds length!",
node.out - node.seek
);
} else {
error!("File not found: <b><magenta>{}</></b>", node.source);
error!("Source not found: <b><magenta>{}</></b>", node.source);
}
let (source, cmd) = gen_dummy(config, node.out - node.seek);
node.source = source;

View File

@ -5,7 +5,7 @@ use std::sync::{
use simplelog::*;
use crate::utils::{sec_to_time, validate_source, GlobalConfig, MediaProbe, Playlist};
use crate::utils::{sec_to_time, valid_source, GlobalConfig, MediaProbe, Playlist};
/// Validate a given playlist, to check if:
///
@ -28,7 +28,7 @@ pub fn validate_playlist(playlist: Playlist, is_terminated: Arc<AtomicBool>, con
return;
}
if validate_source(&item.source) {
if valid_source(&item.source) {
let probe = MediaProbe::new(&item.source);
if probe.format.is_none() {
@ -40,7 +40,7 @@ pub fn validate_playlist(playlist: Playlist, is_terminated: Arc<AtomicBool>, con
}
} else {
error!(
"File on position <yellow>{}</> not exists: <b><magenta>{}</></b>",
"Source on position <yellow>{}</> not exists: <b><magenta>{}</></b>",
sec_to_time(begin),
item.source
);

View File

@ -432,17 +432,11 @@ pub fn prepare_output_cmd(
/// Validate input
///
/// Check if input is a remote source, or from storage and see if it exists.
pub fn validate_source(source: &str) -> bool {
pub fn valid_source(source: &str) -> bool {
let re = Regex::new(r"^https?://.*").unwrap();
if re.is_match(source) {
match MediaProbe::new(source).video_streams {
Some(_) => return true,
None => {
error!("Remote file not exist: {source}");
return false;
}
}
if re.is_match(source) && MediaProbe::new(source).video_streams.is_some() {
return true;
}
Path::new(&source).is_file()