scuffle_ffmpeg/enums/av_rounding.rs
1use nutype_enum::nutype_enum;
2
3use crate::ffi::*;
4
5const _: () = {
6 assert!(std::mem::size_of::<AVRounding>() == std::mem::size_of_val(&AV_ROUND_ZERO));
7};
8
9nutype_enum! {
10 /// Rounding methods used in FFmpeg's `av_rescale_rnd` function.
11 ///
12 /// These rounding modes determine how values are rounded during scaling operations.
13 ///
14 /// See the official FFmpeg documentation:
15 /// <https://ffmpeg.org/doxygen/trunk/group__lavu__math__rational.html>
16 pub enum AVRounding(i32) {
17 /// Round **toward zero** (truncate fractional part).
18 /// - **Example**: `2.9 -> 2`, `-2.9 -> -2`
19 /// - **Equivalent to**: `AV_ROUND_ZERO`
20 Zero = AV_ROUND_ZERO as _,
21
22 /// Round **away from zero**.
23 /// - **Example**: `2.1 -> 3`, `-2.1 -> -3`
24 /// - **Equivalent to**: `AV_ROUND_INF`
25 AwayFromZero = AV_ROUND_INF as _,
26
27 /// Round **toward negative infinity**.
28 /// - **Example**: `2.9 -> 2`, `-2.1 -> -3`
29 /// - **Equivalent to**: `AV_ROUND_DOWN`
30 Down = AV_ROUND_DOWN as _,
31
32 /// Round **toward positive infinity**.
33 /// - **Example**: `2.1 -> 3`, `-2.9 -> -2`
34 /// - **Equivalent to**: `AV_ROUND_UP`
35 Up = AV_ROUND_UP as _,
36
37 /// Round to the **nearest integer**, with halfway cases rounded **away from zero**.
38 /// - **Example**: `2.5 -> 3`, `-2.5 -> -3`
39 /// - **Equivalent to**: `AV_ROUND_NEAR_INF`
40 NearestAwayFromZero = AV_ROUND_NEAR_INF as _,
41
42 /// Pass `INT64_MIN` / `INT64_MAX` **unchanged** during rescaling.
43 ///
44 /// **Bitmask flag** (must be combined with another rounding mode).
45 ///
46 /// - **Example**:
47 /// ```c
48 /// av_rescale_rnd(3, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX);
49 /// ```
50 /// - **Equivalent to**: `AV_ROUND_PASS_MINMAX`
51 PassMinMax = AV_ROUND_PASS_MINMAX as _,
52 }
53}
54
55impl PartialEq<i32> for AVRounding {
56 fn eq(&self, other: &i32) -> bool {
57 self.0 == *other
58 }
59}
60
61impl From<u32> for AVRounding {
62 fn from(value: u32) -> Self {
63 AVRounding(value as _)
64 }
65}
66
67impl From<AVRounding> for u32 {
68 fn from(value: AVRounding) -> Self {
69 value.0 as u32
70 }
71}