playa_ffmpeg/util/color/
range.rs

1use std::{ffi::CStr, str::from_utf8_unchecked};
2
3use crate::ffi::{AVColorRange::*, *};
4
5#[derive(Eq, PartialEq, Clone, Copy, Debug)]
6pub enum Range {
7    Unspecified,
8    MPEG,
9    JPEG,
10}
11
12impl Range {
13    pub fn name(&self) -> Option<&'static str> {
14        if *self == Range::Unspecified {
15            return None;
16        }
17        unsafe {
18            let ptr = av_color_range_name((*self).into());
19            ptr.as_ref().map(|ptr| from_utf8_unchecked(CStr::from_ptr(ptr).to_bytes()))
20        }
21    }
22}
23
24impl From<AVColorRange> for Range {
25    fn from(value: AVColorRange) -> Self {
26        match value {
27            AVCOL_RANGE_UNSPECIFIED => Range::Unspecified,
28            AVCOL_RANGE_MPEG => Range::MPEG,
29            AVCOL_RANGE_JPEG => Range::JPEG,
30            AVCOL_RANGE_NB => Range::Unspecified,
31        }
32    }
33}
34
35impl From<Range> for AVColorRange {
36    fn from(value: Range) -> AVColorRange {
37        match value {
38            Range::Unspecified => AVCOL_RANGE_UNSPECIFIED,
39            Range::MPEG => AVCOL_RANGE_MPEG,
40            Range::JPEG => AVCOL_RANGE_JPEG,
41        }
42    }
43}