scuffle_ffmpeg/enums/
av_rounding.rs

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