1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
use AVRational; use libc::{c_double, c_int}; #[inline(always)] pub unsafe fn av_make_q(num: c_int, den: c_int) -> AVRational { AVRational { num: num, den: den } } #[inline(always)] pub unsafe fn av_cmp_q(a: AVRational, b: AVRational) -> c_int { let tmp = i64::from(a.num) * i64::from(b.den) - i64::from(b.num) * i64::from(a.den); if tmp != 0 { (((tmp ^ i64::from(a.den) ^ i64::from(b.den)) >> 63) | 1) as c_int } else if b.den != 0 && a.den != 0 { 0 } else if a.num != 0 && b.num != 0 { ((i64::from(a.num) >> 31) - (i64::from(b.num) >> 31)) as c_int } else { c_int::min_value() } } #[inline(always)] pub unsafe fn av_q2d(a: AVRational) -> c_double { f64::from(a.num) / f64::from(a.den) } #[inline(always)] pub unsafe fn av_inv_q(q: AVRational) -> AVRational { AVRational { num: q.den, den: q.num, } }