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}