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}