Add serialize support for enums

This commit is contained in:
Josh Holmer 2023-01-24 02:38:11 -05:00
parent 42448a8d45
commit fe89e158c0
35 changed files with 120 additions and 1 deletions

View File

@ -1,3 +1,7 @@
## Version 1.1.0
- Add `serialize` feature, off by default, which derives `serde::{Serialize, Deserialize}` for as many types as possible
## Version 1.0.1
- Remove the "ffmpeg4.x" features that were supposed to have been removed when ffmpeg5 was released.

View File

@ -1,6 +1,6 @@
[package]
name = "ffmpeg-the-third"
version = "1.0.1+ffmpeg-5.1.2"
version = "1.1.0+ffmpeg-5.1.2"
build = "build.rs"
authors = ["meh. <meh@schizofreni.co>", "Zhiming Wang <i@zhimingwang.org>"]
@ -31,6 +31,8 @@ build = ["static", "ffmpeg-sys-the-third/build"]
# mark enums in generated bindings as #[non_exhaustive]
non-exhaustive-enums = ["ffmpeg-sys-the-third/non-exhaustive-enums"]
serialize = ["serde"]
# licensing
build-license-gpl = ["ffmpeg-sys-the-third/build-license-gpl"]
build-license-nonfree = ["ffmpeg-sys-the-third/build-license-nonfree"]
@ -117,3 +119,8 @@ optional = true
[dependencies.ffmpeg-sys-the-third]
version = "1.0.0"
default-features = false
[dependencies.serde]
version = "1.0.152"
optional = true
features = ["derive"]

View File

@ -1,7 +1,10 @@
use ffi::AVAudioServiceType::*;
use ffi::*;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum AudioService {
Main,
Effects,

View File

@ -1,7 +1,10 @@
use ffi::*;
use libc::c_int;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Compliance {
VeryStrict,
Strict,

View File

@ -1,7 +1,10 @@
use ffi::AVDiscard::*;
use ffi::*;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Discard {
None,
Default,

View File

@ -1,7 +1,10 @@
use ffi::*;
use libc::c_int;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Comparison {
SAD,
SSE,

View File

@ -1,7 +1,10 @@
use ffi::*;
use libc::c_int;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Decision {
Simple,
Bits,

View File

@ -1,6 +1,9 @@
use libc::c_int;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum MotionEstimation {
Zero,
Full,

View File

@ -1,7 +1,10 @@
use ffi::*;
use libc::c_int;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Prediction {
Left,
Plane,

View File

@ -1,7 +1,10 @@
use ffi::AVFieldOrder::*;
use ffi::*;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum FieldOrder {
Unknown,
Progressive,

View File

@ -3,10 +3,13 @@ use std::str::from_utf8_unchecked;
use ffi::AVCodecID::*;
use ffi::*;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
use util::media;
#[allow(non_camel_case_types)]
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Id {
None,

View File

@ -4,8 +4,11 @@ use std::slice;
use super::Packet;
use ffi::AVPacketSideDataType::*;
use ffi::*;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Copy, Clone, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Type {
Palette,
NewExtraData,

View File

@ -1,9 +1,12 @@
use super::Id;
use ffi::*;
use libc::c_int;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[allow(non_camel_case_types)]
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Profile {
Unknown,
Reserved,
@ -21,6 +24,7 @@ pub enum Profile {
#[allow(non_camel_case_types)]
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum AAC {
Main,
Low,
@ -37,6 +41,7 @@ pub enum AAC {
#[allow(non_camel_case_types)]
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum DTS {
Default,
ES,
@ -48,6 +53,7 @@ pub enum DTS {
#[allow(non_camel_case_types)]
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum MPEG2 {
_422,
High,
@ -59,6 +65,7 @@ pub enum MPEG2 {
#[allow(non_camel_case_types)]
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum H264 {
Constrained,
Intra,
@ -79,6 +86,7 @@ pub enum H264 {
#[allow(non_camel_case_types)]
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum VC1 {
Simple,
Main,
@ -88,6 +96,7 @@ pub enum VC1 {
#[allow(non_camel_case_types)]
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum MPEG4 {
Simple,
SimpleScalable,
@ -109,6 +118,7 @@ pub enum MPEG4 {
#[allow(non_camel_case_types)]
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum JPEG2000 {
CStreamRestriction0,
CStreamRestriction1,
@ -119,6 +129,7 @@ pub enum JPEG2000 {
#[allow(non_camel_case_types)]
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum HEVC {
Main,
Main10,
@ -128,6 +139,7 @@ pub enum HEVC {
#[allow(non_camel_case_types)]
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum VP9 {
_0,
_1,

View File

@ -13,8 +13,11 @@ use std::mem;
use ffi::AVSubtitleType::*;
use ffi::*;
use libc::{c_uint, size_t};
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Type {
None,
Bitmap,

View File

@ -1,5 +1,7 @@
use ffi::*;
use libc::c_int;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
pub struct Config {
@ -42,6 +44,7 @@ impl Default for Config {
}
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Type {
None,
Frame,

View File

@ -1,6 +1,9 @@
use ffi::*;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Copy, Clone, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Mode {
Input,
Output,

View File

@ -9,6 +9,8 @@ pub extern crate ffmpeg_sys_the_third as sys;
#[cfg(feature = "image")]
extern crate image;
extern crate libc;
#[cfg(feature = "serialize")]
extern crate serde;
pub use sys as ffi;

View File

@ -1,7 +1,10 @@
use ffi::SwrDitherType::*;
use ffi::*;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Copy, Clone, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Dither {
None,
Rectangular,

View File

@ -1,7 +1,10 @@
use ffi::*;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
use sys::SwrEngine::*;
#[derive(Eq, PartialEq, Copy, Clone, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Engine {
Software,
SoundExchange,

View File

@ -1,7 +1,10 @@
use ffi::SwrFilterType::*;
use ffi::*;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Copy, Clone, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Filter {
Cubic,
BlackmanNuttall,

View File

@ -1,7 +1,10 @@
use ffi::*;
use libc::c_int;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum ColorSpace {
Default,

View File

@ -1,7 +1,10 @@
use ffi::AVChromaLocation::*;
use ffi::*;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Location {
Unspecified,
Left,

View File

@ -3,8 +3,11 @@ use std::str::from_utf8_unchecked;
use ffi::AVColorPrimaries::*;
use ffi::*;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Primaries {
Reserved0,
BT709,

View File

@ -3,8 +3,11 @@ use std::str::from_utf8_unchecked;
use ffi::AVColorRange::*;
use ffi::*;
#[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,

View File

@ -3,8 +3,11 @@ use std::str::from_utf8_unchecked;
use ffi::AVColorSpace::*;
use ffi::*;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Space {
RGB,
BT709,

View File

@ -3,8 +3,11 @@ use std::str::from_utf8_unchecked;
use ffi::AVColorTransferCharacteristic::*;
use ffi::*;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum TransferCharacteristic {
Reserved0,
BT709,

View File

@ -6,6 +6,8 @@ use std::str::from_utf8_unchecked;
use ffi::*;
use libc::{c_char, c_int};
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
// Export POSIX error codes so that users can do something like
//
@ -25,6 +27,7 @@ pub use libc::{
};
#[derive(Copy, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Error {
Bug,
Bug2,

View File

@ -5,8 +5,11 @@ use std::str::{from_utf8_unchecked, FromStr};
use ffi::AVPixelFormat::*;
use ffi::*;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Copy, Clone, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Pixel {
None,

View File

@ -7,8 +7,11 @@ use std::str::from_utf8_unchecked;
use ffi::AVSampleFormat::*;
use ffi::*;
use libc::{c_int, c_void};
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Copy, Clone, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Sample {
None,
@ -21,6 +24,7 @@ pub enum Sample {
}
#[derive(Eq, PartialEq, Copy, Clone, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Type {
Packed,
Planar,

View File

@ -6,9 +6,12 @@ use std::str::from_utf8_unchecked;
use super::Frame;
use ffi::AVFrameSideDataType::*;
use ffi::*;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
use DictionaryRef;
#[derive(Eq, PartialEq, Copy, Clone, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Type {
PanScan,
A53CC,

View File

@ -2,8 +2,11 @@ use std::convert::TryFrom;
use ffi::*;
use libc::c_int;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Level {
Quiet,
Panic,

View File

@ -1,7 +1,10 @@
use ffi::AVRounding::*;
use ffi::*;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Rounding {
Zero,
Infinity,

View File

@ -1,7 +1,10 @@
use ffi::AVMediaType::*;
use ffi::*;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Type {
Unknown,
Video,

View File

@ -3,8 +3,11 @@ pub use self::traits::{Gettable, Iterable, Settable, Target};
use ffi::AVOptionType::*;
use ffi::*;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(PartialEq, Eq, Copy, Clone, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Type {
Flags,
Int,

View File

@ -1,7 +1,10 @@
use ffi::AVPictureType::*;
use ffi::*;
#[cfg(feature = "serialize")]
use serde::{Deserialize, Serialize};
#[derive(Eq, PartialEq, Clone, Copy, Debug)]
#[cfg_attr(feature = "serialize", derive(Serialize, Deserialize))]
pub enum Type {
None,
I,