-
Notifications
You must be signed in to change notification settings - Fork 251
Description
TL/DR: #155
First of all, thank you for this beautiful contribution. ❤️
I wanted to use rust-ffmpeg in one of my projects and it compiles on MAC without any problem. But when I try it on Windows 11 I get an error: 😢
error[E0004]: non-exhaustive patterns: sys::AVPixelFormat::AV_PIX_FMT_P212BE, sys::AVPixelFormat::AV_PIX_FMT_P212LE, sys::AVPixelFormat::AV_PIX_FMT_P412BE and 1 more not covered
error[E0004]: non-exhaustive patterns: sys::AVCodecID::AV_CODEC_ID_PDV sys::AVCodecID::AV_CODEC_ID_EVC, sys::AVCodecID::AV_CODEC_ID_RTV1 and 3 more not covered
I made the following implementations and my problem was solved: 🥳
src/util/format/pixel.rs
rust-ffmpeg/src/util/format/pixel.rs
Line 10 in 6b84927
| pub enum Pixel { |
I updated the Pixel enum to include all possible pixel formats like so:
#[derive(Eq, PartialEq, Copy, Clone, Debug)]
pub enum Pixel {
None,
P212BE,
P212LE,
P412BE,
P412LE,
//others...
}Then, I updated the implementation of From for Pixel and From for AVPixelFormat to include these new enumerations.
impl From<AVPixelFormat> for Pixel {
#[inline]
fn from(value: AVPixelFormat) -> Self {
match value {
AV_PIX_FMT_NONE => Pixel::None,
AV_PIX_FMT_P212BE => Pixel::P212BE,
AV_PIX_FMT_P212LE => Pixel::P212LE,
AV_PIX_FMT_P412BE => Pixel::P412BE,
AV_PIX_FMT_P412LE => Pixel::P412LE,
//others...
}
}
}impl From<Pixel> for AVPixelFormat {
#[inline]
fn from(value: Pixel) -> AVPixelFormat {
match value {
Pixel::None => AV_PIX_FMT_NONE,
Pixel::P212BE => AV_PIX_FMT_P212BE,
Pixel::P212LE => AV_PIX_FMT_P212LE,
Pixel::P412BE => AV_PIX_FMT_P412BE,
Pixel::P412LE => AV_PIX_FMT_P412LE,
//others...
}
}
}In the id.rs file, I updated the Id enum and did a similar update for the From for Id and From for AVCodecID implementations:
src/codec/id.rs
Line 10 in 6b84927
| pub enum Id { |
#[allow(non_camel_case_types)]
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub enum Id {
None,
PDV,
EVC,
RTV1,
VMIX,
AC4,
SMPTE2038,
//others...
}
impl From<AVCodecID> for Id {
fn from(value: AVCodecID) -> Self {
match value {
AV_CODEC_ID_NONE => Id::None,
AV_CODEC_ID_PDV => Id::PDV,
AV_CODEC_ID_EVC => Id::EVC,
AV_CODEC_ID_RTV1 => Id::RTV1,
AV_CODEC_ID_VMIX => Id::VMIX,
AV_CODEC_ID_AC4 => Id::AC4,
AV_CODEC_ID_SMPTE_2038 => Id::SMPTE2038,
//others...
}
}
}
impl From<Id> for AVCodecID {
fn from(value: Id) -> AVCodecID {
match value {
Id::None => AV_CODEC_ID_NONE,
Id::PDV => AV_CODEC_ID_PDV,
Id::EVC => AV_CODEC_ID_EVC,
Id::RTV1 => AV_CODEC_ID_RTV1,
Id::VMIX => AV_CODEC_ID_VMIX,
Id::AC4 => AV_CODEC_ID_AC4,
Id::SMPTE2038 => AV_CODEC_ID_SMPTE_2038,
//others...
}
}
}after these implementations, all is okay now
happy coding. 😸