ffmpeg-the-third 5.0.0+ffmpeg-8.1

Safe FFmpeg wrapper (FFmpeg 5+ compatible fork of the ffmpeg crate)
Documentation
use crate::ffi::*;
use crate::utils;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};

#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Range {
    Unspecified,
    MPEG,
    JPEG,
}

impl Range {
    pub fn name(&self) -> Option<&'static str> {
        if *self == Range::Unspecified {
            return None;
        }
        unsafe {
            let ptr = av_color_range_name((*self).into());
            utils::optional_str_from_c_ptr(ptr)
        }
    }
}

impl From<AVColorRange> for Range {
    fn from(value: AVColorRange) -> Self {
        use AVColorRange as AV;

        match value {
            AV::UNSPECIFIED => Range::Unspecified,
            AV::MPEG => Range::MPEG,
            AV::JPEG => Range::JPEG,

            AV::NB => unreachable!(),
            _ => unimplemented!(),
        }
    }
}

impl From<Range> for AVColorRange {
    fn from(value: Range) -> AVColorRange {
        use AVColorRange as AV;

        match value {
            Range::Unspecified => AV::UNSPECIFIED,
            Range::MPEG => AV::MPEG,
            Range::JPEG => AV::JPEG,
        }
    }
}