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:
79eb70e
)
add an option to set the same timebase for as the first video stream
author
Kostya Shishkov
<kostya.shishkov@gmail.com>
Fri, 6 Oct 2023 16:47:40 +0000
(18:47 +0200)
committer
Kostya Shishkov
<kostya.shishkov@gmail.com>
Fri, 6 Oct 2023 16:47:40 +0000
(18:47 +0200)
src/main.rs
patch
|
blob
|
blame
|
history
diff --git
a/src/main.rs
b/src/main.rs
index 81993116df0b57c915dd5629443e7c2e98ad24be..9811584831950986053fb70e4d2de842133739c2 100644
(file)
--- a/
src/main.rs
+++ b/
src/main.rs
@@
-189,6
+189,7
@@
struct Transcoder {
calc_len: bool,
nframes: Vec<usize>,
calc_len: bool,
nframes: Vec<usize>,
+ global_tb: (u32, u32),
}
macro_rules! parse_and_apply_options {
}
macro_rules! parse_and_apply_options {
@@
-588,6
+589,10
@@
impl Transcoder {
_ => {},
};
}
_ => {},
};
}
+ if self.global_tb != (0, 0) {
+ oopts.enc_params.tb_num = self.global_tb.0;
+ oopts.enc_params.tb_den = self.global_tb.1;
+ }
if oopts.enc_params.tb_num == 0 {
oopts.enc_params.tb_num = istr.tb_num;
oopts.enc_params.tb_den = istr.tb_den;
if oopts.enc_params.tb_num == 0 {
oopts.enc_params.tb_num = istr.tb_num;
oopts.enc_params.tb_den = istr.tb_den;
@@
-674,8
+679,13
@@
println!("encoder {} is not supported by output (expected {})", istr.id, istr.ge
}
let mut encoder = (enc_create.unwrap())();
oopts.enc_params.format = istr.get_info().get_properties();
}
let mut encoder = (enc_create.unwrap())();
oopts.enc_params.format = istr.get_info().get_properties();
- oopts.enc_params.tb_num = istr.tb_num;
- oopts.enc_params.tb_den = istr.tb_den;
+ if self.global_tb != (0, 0) {
+ oopts.enc_params.tb_num = self.global_tb.0;
+ oopts.enc_params.tb_den = self.global_tb.1;
+ } else {
+ oopts.enc_params.tb_num = istr.tb_num;
+ oopts.enc_params.tb_den = istr.tb_den;
+ }
let ret_eparams = encoder.negotiate_format(&oopts.enc_params);
if ret_eparams.is_err() {
println!("cannot negotiate encoding parameters");
let ret_eparams = encoder.negotiate_format(&oopts.enc_params);
if ret_eparams.is_err() {
println!("cannot negotiate encoding parameters");
@@
-1022,6
+1032,7
@@
fn main() {
let full_reg = FullRegister::new();
let mut transcoder = Transcoder::new();
let full_reg = FullRegister::new();
let mut transcoder = Transcoder::new();
+ let mut use_video_tb = false;
let mut arg_idx = 1;
let mut printed_info = false;
let mut arg_idx = 1;
let mut printed_info = false;
@@
-1173,6
+1184,9
@@
fn main() {
"--calc-len" => {
transcoder.calc_len = true;
},
"--calc-len" => {
transcoder.calc_len = true;
},
+ "--use-video-tb" => {
+ use_video_tb = true;
+ },
"--verbose" | "-v" => transcoder.verbose = 1,
"-vv" => transcoder.verbose = 2,
"-v-" => transcoder.verbose = 0,
"--verbose" | "-v" => transcoder.verbose = 1,
"-vv" => transcoder.verbose = 2,
"-v-" => transcoder.verbose = 0,
@@
-1258,6
+1272,9
@@
fn main() {
let max_id = sm.iter().fold(0u32, |id, strm| id.max(strm.id));
for stream in sm.iter() {
let mut newstream = (*stream).clone();
let max_id = sm.iter().fold(0u32, |id, strm| id.max(strm.id));
for stream in sm.iter() {
let mut newstream = (*stream).clone();
+ if use_video_tb && transcoder.global_tb == (0, 0) && newstream.get_media_type() == StreamType::Video {
+ transcoder.global_tb = newstream.get_timebase();
+ }
newstream.id += start;
ism.add_stream(newstream);
}
newstream.id += start;
ism.add_stream(newstream);
}