avcodec: fix AVCodecContext::bit_rate field size by version inspection

This commit is contained in:
Andreas Sommer
2023-05-24 21:49:22 +02:00
committed by Till Höppner
parent 5ea07980f8
commit ac9129d2b6
2 changed files with 33 additions and 0 deletions
+29
View File
@@ -247,6 +247,20 @@ fn check_features(infos: &Vec<(&'static str, Option<&'static str>, &'static str)
main_code.push_str(&format!(r#"printf("[{var}]%d%d\n", {var}, {var}_is_defined);"#, var=var));
}
let version_check_info = [("avcodec", 56, 60, 0, 80)];
for &(lib, begin_version_major, end_version_major, begin_version_minor, end_version_minor) in version_check_info.iter() {
for version_major in begin_version_major..end_version_major {
for version_minor in begin_version_minor..end_version_minor {
main_code.push_str(&format!(r#"printf("[{lib}_version_greater_than_{version_major}_{version_minor}]%d\n", LIB{lib_uppercase}_VERSION_MAJOR > {version_major} || (LIB{lib_uppercase}_VERSION_MAJOR == {version_major} && LIB{lib_uppercase}_VERSION_MINOR > {version_minor}));"#,
lib=lib,
lib_uppercase=lib.to_uppercase(),
version_major=version_major,
version_minor=version_minor));
}
}
}
let out_dir = output();
write!(File::create(out_dir.join("check.c")).expect("Failed to create file"), r#"
@@ -303,6 +317,21 @@ fn check_features(infos: &Vec<(&'static str, Option<&'static str>, &'static str)
println!(r#"cargo:{}_is_defined=true"#, var.to_lowercase());
}
}
for &(lib, begin_version_major, end_version_major, begin_version_minor, end_version_minor) in version_check_info.iter() {
for version_major in begin_version_major..end_version_major {
for version_minor in begin_version_minor..end_version_minor {
let search_str = format!("[{lib}_version_greater_than_{version_major}_{version_minor}]",
version_major=version_major,
version_minor=version_minor,
lib=lib);
let pos = stdout.find(&search_str).expect("Variable not found in output") + search_str.len();
if &stdout[pos..pos+1] == "1" {
println!(r#"cargo:rustc-cfg=feature="{}""#, &search_str[1..(search_str.len() - 1)]);
}
}
}
}
}
fn main() {
+4
View File
@@ -932,6 +932,10 @@ pub struct AVCodecContext {
pub priv_data: *mut c_void,
pub internal: *mut AVCodecInternal,
pub opaque: *mut c_void,
// See https://github.com/FFmpeg/FFmpeg/commit/7404f3bdb90e6a5dcb59bc0a091e2c5c038e557d
#[cfg(feature="avcodec_version_greater_than_57_1")]
pub bit_rate: int64_t,
#[cfg(not(feature="avcodec_version_greater_than_57_1"))]
pub bit_rate: c_int,
pub bit_rate_tolerance: c_int,
pub global_quality: c_int,