util/color: move color enums to their own module

This commit is contained in:
meh 2015-05-13 15:16:42 +02:00
parent 604c6549fb
commit 3a1af24d2f
9 changed files with 229 additions and 97 deletions

View File

@ -9,10 +9,9 @@ pub mod util;
pub use util::error::Error; pub use util::error::Error;
pub use util::dictionary::Dictionary; pub use util::dictionary::Dictionary;
pub use util::rational::Rational; pub use util::rational::Rational;
pub use util::color_space::ColorSpace;
pub use util::color_range::ColorRange;
pub use util::media; pub use util::media;
pub use util::picture; pub use util::picture;
pub use util::color;
pub use util::frame::{self, Frame}; pub use util::frame::{self, Frame};
pub mod format; pub mod format;

11
src/util/color/mod.rs Normal file
View File

@ -0,0 +1,11 @@
pub mod range;
pub use self::range::Range;
pub mod space;
pub use self::space::Space;
pub mod primaries;
pub use self::primaries::Primaries;
pub mod transfer_characteristic;
pub use self::transfer_characteristic::TransferCharacteristic;

View File

@ -0,0 +1,53 @@
use ffi::*;
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub enum Primaries {
Reserved0,
BT709,
Unspecified,
Reserved,
BT470M,
BT470BG,
SMPTE170M,
SMPTE240M,
Film,
BT2020,
}
impl From<AVColorPrimaries> for Primaries {
fn from(value: AVColorPrimaries) -> Primaries {
match value {
AVCOL_PRI_RESERVED0 => Primaries::Reserved0,
AVCOL_PRI_BT709 => Primaries::BT709,
AVCOL_PRI_UNSPECIFIED => Primaries::Unspecified,
AVCOL_PRI_RESERVED => Primaries::Reserved,
AVCOL_PRI_BT470M => Primaries::BT470M,
AVCOL_PRI_BT470BG => Primaries::BT470BG,
AVCOL_PRI_SMPTE170M => Primaries::SMPTE170M,
AVCOL_PRI_SMPTE240M => Primaries::SMPTE240M,
AVCOL_PRI_FILM => Primaries::Film,
AVCOL_PRI_BT2020 => Primaries::BT2020,
AVCOL_PRI_NB => Primaries::Reserved0
}
}
}
impl Into<AVColorPrimaries> for Primaries {
fn into(self) -> AVColorPrimaries {
match self {
Primaries::Reserved0 => AVCOL_PRI_RESERVED0,
Primaries::BT709 => AVCOL_PRI_BT709,
Primaries::Unspecified => AVCOL_PRI_UNSPECIFIED,
Primaries::Reserved => AVCOL_PRI_RESERVED,
Primaries::BT470M => AVCOL_PRI_BT470M,
Primaries::BT470BG => AVCOL_PRI_BT470BG,
Primaries::SMPTE170M => AVCOL_PRI_SMPTE170M,
Primaries::SMPTE240M => AVCOL_PRI_SMPTE240M,
Primaries::Film => AVCOL_PRI_FILM,
Primaries::BT2020 => AVCOL_PRI_BT2020,
}
}
}

29
src/util/color/range.rs Normal file
View File

@ -0,0 +1,29 @@
use ffi::*;
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub enum Range {
Unspecified,
MPEG,
JPEG,
}
impl From<AVColorRange> for Range {
fn from(value: AVColorRange) -> Self {
match value {
AVCOL_RANGE_UNSPECIFIED => Range::Unspecified,
AVCOL_RANGE_MPEG => Range::MPEG,
AVCOL_RANGE_JPEG => Range::JPEG,
AVCOL_RANGE_NB => Range::Unspecified
}
}
}
impl Into<AVColorRange> for Range {
fn into(self) -> AVColorRange {
match self {
Range::Unspecified => AVCOL_RANGE_UNSPECIFIED,
Range::MPEG => AVCOL_RANGE_MPEG,
Range::JPEG => AVCOL_RANGE_JPEG
}
}
}

66
src/util/color/space.rs Normal file
View File

@ -0,0 +1,66 @@
use std::ffi::CStr;
use std::str::from_utf8_unchecked;
use ffi::*;
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub enum Space {
RGB,
BT709,
Unspecified,
Reserved,
FCC,
BT470BG,
SMPTE170M,
SMPTE240M,
YCOCG,
YCGCO,
BT2020NCL,
BT2020CL,
}
impl Space {
pub fn name(&self) -> &'static str {
unsafe {
from_utf8_unchecked(CStr::from_ptr(av_get_colorspace_name((*self).into())).to_bytes())
}
}
}
impl From<AVColorSpace> for Space {
fn from(value: AVColorSpace) -> Self {
match value {
AVCOL_SPC_RGB => Space::RGB,
AVCOL_SPC_BT709 => Space::BT709,
AVCOL_SPC_UNSPECIFIED => Space::Unspecified,
AVCOL_SPC_RESERVED => Space::Reserved,
AVCOL_SPC_FCC => Space::FCC,
AVCOL_SPC_BT470BG => Space::BT470BG,
AVCOL_SPC_SMPTE170M => Space::SMPTE170M,
AVCOL_SPC_SMPTE240M => Space::SMPTE240M,
AVCOL_SPC_YCOCG => Space::YCOCG,
AVCOL_SPC_BT2020_NCL => Space::BT2020NCL,
AVCOL_SPC_BT2020_CL => Space::BT2020CL,
AVCOL_SPC_NB => Space::Unspecified
}
}
}
impl Into<AVColorSpace> for Space {
fn into(self) -> AVColorSpace {
match self {
Space::RGB => AVCOL_SPC_RGB,
Space::BT709 => AVCOL_SPC_BT709,
Space::Unspecified => AVCOL_SPC_UNSPECIFIED,
Space::Reserved => AVCOL_SPC_RESERVED,
Space::FCC => AVCOL_SPC_FCC,
Space::BT470BG => AVCOL_SPC_BT470BG,
Space::SMPTE170M => AVCOL_SPC_SMPTE170M,
Space::SMPTE240M => AVCOL_SPC_SMPTE240M,
Space::YCOCG => AVCOL_SPC_YCOCG,
Space::YCGCO => AVCOL_SPC_YCGCO,
Space::BT2020NCL => AVCOL_SPC_BT2020_NCL,
Space::BT2020CL => AVCOL_SPC_BT2020_CL
}
}
}

View File

@ -0,0 +1,68 @@
use ffi::*;
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub enum TransferCharacteristic {
Reserved0,
BT709,
Unspecified,
Reserved,
GAMMA22,
GAMMA28,
SMPTE170M,
SMPTE240M,
Linear,
Log,
LogSqrt,
IEC61966_2_4,
BT1361_ECG,
IEC61966_2_1,
BT2020_10,
BT2020_12,
}
impl From<AVColorTransferCharacteristic> for TransferCharacteristic {
fn from(value: AVColorTransferCharacteristic) -> TransferCharacteristic {
match value {
AVCOL_TRC_RESERVED0 => TransferCharacteristic::Reserved0,
AVCOL_TRC_BT709 => TransferCharacteristic::BT709,
AVCOL_TRC_UNSPECIFIED => TransferCharacteristic::Unspecified,
AVCOL_TRC_RESERVED => TransferCharacteristic::Reserved,
AVCOL_TRC_GAMMA22 => TransferCharacteristic::GAMMA22,
AVCOL_TRC_GAMMA28 => TransferCharacteristic::GAMMA28,
AVCOL_TRC_SMPTE170M => TransferCharacteristic::SMPTE170M,
AVCOL_TRC_SMPTE240M => TransferCharacteristic::SMPTE240M,
AVCOL_TRC_LINEAR => TransferCharacteristic::Linear,
AVCOL_TRC_LOG => TransferCharacteristic::Log,
AVCOL_TRC_LOG_SQRT => TransferCharacteristic::LogSqrt,
AVCOL_TRC_IEC61966_2_4 => TransferCharacteristic::IEC61966_2_4,
AVCOL_TRC_BT1361_ECG => TransferCharacteristic::BT1361_ECG,
AVCOL_TRC_IEC61966_2_1 => TransferCharacteristic::IEC61966_2_1,
AVCOL_TRC_BT2020_10 => TransferCharacteristic::BT2020_10,
AVCOL_TRC_BT2020_12 => TransferCharacteristic::BT2020_12,
AVCOL_TRC_NB => TransferCharacteristic::Reserved0
}
}
}
impl Into<AVColorTransferCharacteristic> for TransferCharacteristic {
fn into(self) -> AVColorTransferCharacteristic {
match self {
TransferCharacteristic::Reserved0 => AVCOL_TRC_RESERVED0,
TransferCharacteristic::BT709 => AVCOL_TRC_BT709,
TransferCharacteristic::Unspecified => AVCOL_TRC_UNSPECIFIED,
TransferCharacteristic::Reserved => AVCOL_TRC_RESERVED,
TransferCharacteristic::GAMMA22 => AVCOL_TRC_GAMMA22,
TransferCharacteristic::GAMMA28 => AVCOL_TRC_GAMMA28,
TransferCharacteristic::SMPTE170M => AVCOL_TRC_SMPTE170M,
TransferCharacteristic::SMPTE240M => AVCOL_TRC_SMPTE240M,
TransferCharacteristic::Linear => AVCOL_TRC_LINEAR,
TransferCharacteristic::Log => AVCOL_TRC_LOG,
TransferCharacteristic::LogSqrt => AVCOL_TRC_LOG_SQRT,
TransferCharacteristic::IEC61966_2_4 => AVCOL_TRC_IEC61966_2_4,
TransferCharacteristic::BT1361_ECG => AVCOL_TRC_BT1361_ECG,
TransferCharacteristic::IEC61966_2_1 => AVCOL_TRC_IEC61966_2_1,
TransferCharacteristic::BT2020_10 => AVCOL_TRC_BT2020_10,
TransferCharacteristic::BT2020_12 => AVCOL_TRC_BT2020_12
}
}
}

View File

@ -1,29 +0,0 @@
use ffi::*;
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub enum ColorRange {
Unspecified,
MPEG,
JPEG,
}
impl From<AVColorRange> for ColorRange {
fn from(value: AVColorRange) -> Self {
match value {
AVCOL_RANGE_UNSPECIFIED => ColorRange::Unspecified,
AVCOL_RANGE_MPEG => ColorRange::MPEG,
AVCOL_RANGE_JPEG => ColorRange::JPEG,
AVCOL_RANGE_NB => ColorRange::Unspecified
}
}
}
impl Into<AVColorRange> for ColorRange {
fn into(self) -> AVColorRange {
match self {
ColorRange::Unspecified => AVCOL_RANGE_UNSPECIFIED,
ColorRange::MPEG => AVCOL_RANGE_MPEG,
ColorRange::JPEG => AVCOL_RANGE_JPEG
}
}
}

View File

@ -1,64 +0,0 @@
use std::ffi::CStr;
use std::str::from_utf8_unchecked;
use ffi::*;
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub enum ColorSpace {
RGB,
BT709,
Unspecified,
Reserved,
FCC,
BT470BG,
SMPTE170M,
SMPTE240M,
YCOCG,
BT2020NCL,
BT2020CL,
}
impl ColorSpace {
pub fn name(&self) -> &'static str {
unsafe {
from_utf8_unchecked(CStr::from_ptr(av_get_colorspace_name((*self).into())).to_bytes())
}
}
}
impl From<AVColorSpace> for ColorSpace {
fn from(value: AVColorSpace) -> Self {
match value {
AVCOL_SPC_RGB => ColorSpace::RGB,
AVCOL_SPC_BT709 => ColorSpace::BT709,
AVCOL_SPC_UNSPECIFIED => ColorSpace::Unspecified,
AVCOL_SPC_RESERVED => ColorSpace::Reserved,
AVCOL_SPC_FCC => ColorSpace::FCC,
AVCOL_SPC_BT470BG => ColorSpace::BT470BG,
AVCOL_SPC_SMPTE170M => ColorSpace::SMPTE170M,
AVCOL_SPC_SMPTE240M => ColorSpace::SMPTE240M,
AVCOL_SPC_YCOCG => ColorSpace::YCOCG,
AVCOL_SPC_BT2020_NCL => ColorSpace::BT2020NCL,
AVCOL_SPC_BT2020_CL => ColorSpace::BT2020CL,
AVCOL_SPC_NB => ColorSpace::Unspecified
}
}
}
impl Into<AVColorSpace> for ColorSpace {
fn into(self) -> AVColorSpace {
match self {
ColorSpace::RGB => AVCOL_SPC_RGB,
ColorSpace::BT709 => AVCOL_SPC_BT709,
ColorSpace::Unspecified => AVCOL_SPC_UNSPECIFIED,
ColorSpace::Reserved => AVCOL_SPC_RESERVED,
ColorSpace::FCC => AVCOL_SPC_FCC,
ColorSpace::BT470BG => AVCOL_SPC_BT470BG,
ColorSpace::SMPTE170M => AVCOL_SPC_SMPTE170M,
ColorSpace::SMPTE240M => AVCOL_SPC_SMPTE240M,
ColorSpace::YCOCG => AVCOL_SPC_YCOCG,
ColorSpace::BT2020NCL => AVCOL_SPC_BT2020_NCL,
ColorSpace::BT2020CL => AVCOL_SPC_BT2020_CL
}
}
}

View File

@ -3,8 +3,7 @@ pub mod error;
pub mod rational; pub mod rational;
pub mod media; pub mod media;
pub mod picture; pub mod picture;
pub mod color_space; pub mod color;
pub mod color_range;
pub mod sample_format; pub mod sample_format;
pub mod pixel_format; pub mod pixel_format;
pub mod frame; pub mod frame;