projects
/
nihav-encoder.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
b267d37
)
add commands for setting start and end time of input to process
author
Kostya Shishkov
<kostya.shishkov@gmail.com>
Thu, 9 Jul 2020 09:05:48 +0000
(11:05 +0200)
committer
Kostya Shishkov
<kostya.shishkov@gmail.com>
Thu, 9 Jul 2020 09:05:48 +0000
(11:05 +0200)
src/main.rs
patch
|
blob
|
blame
|
history
diff --git
a/src/main.rs
b/src/main.rs
index 8261d6abca0d08768460fb1b7bd3caf5ef52918d..787a6b29295a933ae9a630578e09a5e3be6a67aa 100644
(file)
--- a/
src/main.rs
+++ b/
src/main.rs
@@
-75,6
+75,8
@@
struct Transcoder {
encoders: Vec<OutputMode>,
no_video: bool,
no_audio: bool,
encoders: Vec<OutputMode>,
no_video: bool,
no_audio: bool,
+ start: NATimePoint,
+ end: NATimePoint,
}
macro_rules! parse_and_apply_options {
}
macro_rules! parse_and_apply_options {
@@
-697,6
+699,26
@@
fn main() {
"--no-audio" => {
transcoder.no_audio = true;
},
"--no-audio" => {
transcoder.no_audio = true;
},
+ "--start" => {
+ next_arg!(args, arg_idx);
+ let ret = args[arg_idx].parse::<NATimePoint>();
+ if let Ok(val) = ret {
+ transcoder.start = val;
+ } else {
+ println!("invalid start time");
+ return;
+ }
+ },
+ "--end" => {
+ next_arg!(args, arg_idx);
+ let ret = args[arg_idx].parse::<NATimePoint>();
+ if let Ok(val) = ret {
+ transcoder.end = val;
+ } else {
+ println!("invalid start time");
+ return;
+ }
+ },
"--muxer-options" => {
next_arg!(args, arg_idx);
if !transcoder.parse_muxer_options(&args[arg_idx], &mux_reg) {
"--muxer-options" => {
next_arg!(args, arg_idx);
if !transcoder.parse_muxer_options(&args[arg_idx], &mux_reg) {
@@
-792,6
+814,12
@@
println!("stream {} - {} {}", i, s, info.get_name());
transcoder.decoders.push(None);
}
}
transcoder.decoders.push(None);
}
}
+ if transcoder.start != NATimePoint::None {
+ let ret = dmx.seek(transcoder.start);
+ if ret.is_err() {
+ println!(" failed to seek to {} error {:?}", transcoder.start, ret.err().unwrap());
+ }
+ }
let output_fmt = if let Some(ref str) = transcoder.output_fmt {
str
let output_fmt = if let Some(ref str) = transcoder.output_fmt {
str
@@
-838,7
+866,7
@@
println!("stream {} - {} {}", i, s, info.get_name());
println!(" #{}: {} {}", ostr.get_num(), ostr, ostr.get_info().get_name());
}
println!(" #{}: {} {}", ostr.get_num(), ostr, ostr.get_info().get_name());
}
- loop {
+
'main_loop:
loop {
let pktres = dmx.get_frame();
if let Err(DemuxerError::EOF) = pktres { break; }
if pktres.is_err() {
let pktres = dmx.get_frame();
if let Err(DemuxerError::EOF) = pktres { break; }
if pktres.is_err() {
@@
-852,6
+880,7
@@
println!("stream {} - {} {}", i, s, info.get_name());
OutputMode::Copy(dst_id) => {
let dstr = mux.get_stream(dst_id as usize).unwrap();
pkt.reassign(dstr, pkt.get_time_information());
OutputMode::Copy(dst_id) => {
let dstr = mux.get_stream(dst_id as usize).unwrap();
pkt.reassign(dstr, pkt.get_time_information());
+ if transcoder.end != NATimePoint::None && !pkt.ts.less_than(transcoder.end) { break 'main_loop; }
if mux.mux_frame(pkt).is_err() {
println!("error muxing packet");
break;
if mux.mux_frame(pkt).is_err() {
println!("error muxing packet");
break;
@@
-899,6
+928,7
@@
println!("stream {} - {} {}", i, s, info.get_name());
let cfrm = NAFrame::new(frm.get_time_information(), frm.frame_type, frm.key, frm.get_info(), cbuf);
encoder.encode(&cfrm).unwrap();
while let Ok(Some(pkt)) = encoder.get_packet() {
let cfrm = NAFrame::new(frm.get_time_information(), frm.frame_type, frm.key, frm.get_info(), cbuf);
encoder.encode(&cfrm).unwrap();
while let Ok(Some(pkt)) = encoder.get_packet() {
+ if transcoder.end != NATimePoint::None && !pkt.ts.less_than(transcoder.end) { break 'main_loop; }
mux.mux_frame(pkt).unwrap();
}
} else {
mux.mux_frame(pkt).unwrap();
}
} else {