From a69a457e3a9095ac8c82fde8a3e2da25d6893e51 Mon Sep 17 00:00:00 2001 From: Zhiming Wang Date: Mon, 1 Jun 2020 14:15:33 +0800 Subject: [PATCH] Add FFmpeg 4.1 specific code --- Cargo.toml | 3 +- src/codec/id.rs | 60 +++++++++++++++++++++++++++++++++++ src/codec/packet/side_data.rs | 12 +++++++ src/util/format/pixel.rs | 30 ++++++++++++++++++ src/util/frame/side_data.rs | 9 ++++++ 5 files changed, 113 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 266a6cd..8e5aa35 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,8 +15,9 @@ keywords = ["ffmpeg", "multimedia", "video", "audio"] categories = ["multimedia"] [features] -default = ["ffmpeg4", "codec", "device", "filter", "format", "resampling", "software-resampling", "software-scaling"] +default = ["ffmpeg41", "codec", "device", "filter", "format", "resampling", "software-resampling", "software-scaling"] +ffmpeg41 = ["ffmpeg4"] ffmpeg4 = [] static = ["ffmpeg-sys-next/static"] diff --git a/src/codec/id.rs b/src/codec/id.rs index 976b484..8c59fe8 100644 --- a/src/codec/id.rs +++ b/src/codec/id.rs @@ -484,12 +484,32 @@ pub enum Id { FITS, GREMLIN_DPCM, DOLBY_E, + #[cfg(feature = "ffmpeg4")] APTX, #[cfg(feature = "ffmpeg4")] APTX_HD, #[cfg(feature = "ffmpeg4")] SBC, + + #[cfg(feature = "ffmpeg41")] + AVS2, + #[cfg(feature = "ffmpeg41")] + IMM4, + #[cfg(feature = "ffmpeg41")] + PROSUMER, + #[cfg(feature = "ffmpeg41")] + MWSC, + #[cfg(feature = "ffmpeg41")] + WCMV, + #[cfg(feature = "ffmpeg41")] + RASC, + #[cfg(feature = "ffmpeg41")] + PCM_VIDC, + #[cfg(feature = "ffmpeg41")] + ATRAC9, + #[cfg(feature = "ffmpeg41")] + TTML, } impl Id { @@ -976,12 +996,32 @@ impl From for Id { AV_CODEC_ID_FITS => Id::FITS, AV_CODEC_ID_GREMLIN_DPCM => Id::GREMLIN_DPCM, AV_CODEC_ID_DOLBY_E => Id::DOLBY_E, + #[cfg(feature = "ffmpeg4")] AV_CODEC_ID_APTX => Id::APTX, #[cfg(feature = "ffmpeg4")] AV_CODEC_ID_APTX_HD => Id::APTX_HD, #[cfg(feature = "ffmpeg4")] AV_CODEC_ID_SBC => Id::SBC, + + #[cfg(feature = "ffmpeg41")] + AV_CODEC_ID_AVS2 => Id::AVS2, + #[cfg(feature = "ffmpeg41")] + AV_CODEC_ID_IMM4 => Id::IMM4, + #[cfg(feature = "ffmpeg41")] + AV_CODEC_ID_PROSUMER => Id::PROSUMER, + #[cfg(feature = "ffmpeg41")] + AV_CODEC_ID_MWSC => Id::MWSC, + #[cfg(feature = "ffmpeg41")] + AV_CODEC_ID_WCMV => Id::WCMV, + #[cfg(feature = "ffmpeg41")] + AV_CODEC_ID_RASC => Id::RASC, + #[cfg(feature = "ffmpeg41")] + AV_CODEC_ID_PCM_VIDC => Id::PCM_VIDC, + #[cfg(feature = "ffmpeg41")] + AV_CODEC_ID_ATRAC9 => Id::ATRAC9, + #[cfg(feature = "ffmpeg41")] + AV_CODEC_ID_TTML => Id::TTML, } } } @@ -1465,12 +1505,32 @@ impl Into for Id { Id::FITS => AV_CODEC_ID_FITS, Id::GREMLIN_DPCM => AV_CODEC_ID_GREMLIN_DPCM, Id::DOLBY_E => AV_CODEC_ID_DOLBY_E, + #[cfg(feature = "ffmpeg4")] Id::APTX => AV_CODEC_ID_APTX, #[cfg(feature = "ffmpeg4")] Id::APTX_HD => AV_CODEC_ID_APTX_HD, #[cfg(feature = "ffmpeg4")] Id::SBC => AV_CODEC_ID_SBC, + + #[cfg(feature = "ffmpeg41")] + Id::AVS2 => AV_CODEC_ID_AVS2, + #[cfg(feature = "ffmpeg41")] + Id::IMM4 => AV_CODEC_ID_IMM4, + #[cfg(feature = "ffmpeg41")] + Id::PROSUMER => AV_CODEC_ID_PROSUMER, + #[cfg(feature = "ffmpeg41")] + Id::MWSC => AV_CODEC_ID_MWSC, + #[cfg(feature = "ffmpeg41")] + Id::WCMV => AV_CODEC_ID_WCMV, + #[cfg(feature = "ffmpeg41")] + Id::RASC => AV_CODEC_ID_RASC, + #[cfg(feature = "ffmpeg41")] + Id::PCM_VIDC => AV_CODEC_ID_PCM_VIDC, + #[cfg(feature = "ffmpeg41")] + Id::ATRAC9 => AV_CODEC_ID_ATRAC9, + #[cfg(feature = "ffmpeg41")] + Id::TTML => AV_CODEC_ID_TTML, } } } diff --git a/src/codec/packet/side_data.rs b/src/codec/packet/side_data.rs index 052b43d..b67a4a5 100644 --- a/src/codec/packet/side_data.rs +++ b/src/codec/packet/side_data.rs @@ -33,10 +33,14 @@ pub enum Type { ContentLightLevel, A53CC, + #[cfg(feature = "ffmpeg4")] EncryptionInitInfo, #[cfg(feature = "ffmpeg4")] EncryptionInfo, + + #[cfg(feature = "ffmpeg41")] + AFD, } impl From for Type { @@ -68,10 +72,14 @@ impl From for Type { AV_PKT_DATA_CONTENT_LIGHT_LEVEL => Type::ContentLightLevel, AV_PKT_DATA_A53_CC => Type::A53CC, + #[cfg(feature = "ffmpeg4")] AV_PKT_DATA_ENCRYPTION_INIT_INFO => Type::EncryptionInitInfo, #[cfg(feature = "ffmpeg4")] AV_PKT_DATA_ENCRYPTION_INFO => Type::EncryptionInfo, + + #[cfg(feature = "ffmpeg41")] + AV_PKT_DATA_AFD => Type::AFD, } } } @@ -105,10 +113,14 @@ impl Into for Type { Type::ContentLightLevel => AV_PKT_DATA_CONTENT_LIGHT_LEVEL, Type::A53CC => AV_PKT_DATA_A53_CC, + #[cfg(feature = "ffmpeg4")] Type::EncryptionInitInfo => AV_PKT_DATA_ENCRYPTION_INIT_INFO, #[cfg(feature = "ffmpeg4")] Type::EncryptionInfo => AV_PKT_DATA_ENCRYPTION_INFO, + + #[cfg(feature = "ffmpeg41")] + Type::AFD => AV_PKT_DATA_AFD, } } } diff --git a/src/util/format/pixel.rs b/src/util/format/pixel.rs index 4ccfe7b..c4c3d5e 100644 --- a/src/util/format/pixel.rs +++ b/src/util/format/pixel.rs @@ -308,8 +308,18 @@ pub enum Pixel { GBRAPF32BE, GBRAPF32LE, DRM_PRIME, + #[cfg(feature = "ffmpeg4")] OPENCL, + + #[cfg(feature = "ffmpeg41")] + GRAY14BE, + #[cfg(feature = "ffmpeg41")] + GRAY14LE, + #[cfg(feature = "ffmpeg41")] + GRAYF32BE, + #[cfg(feature = "ffmpeg41")] + GRAYF32LE, } #[derive(Clone, Copy, PartialEq, Eq)] @@ -596,8 +606,18 @@ impl From for Pixel { AV_PIX_FMT_GBRAPF32BE => Pixel::GBRAPF32BE, AV_PIX_FMT_GBRAPF32LE => Pixel::GBRAPF32LE, AV_PIX_FMT_DRM_PRIME => Pixel::DRM_PRIME, + #[cfg(feature = "ffmpeg4")] AV_PIX_FMT_OPENCL => Pixel::OPENCL, + + #[cfg(feature = "ffmpeg41")] + AV_PIX_FMT_GRAY14BE => Pixel::GRAY14BE, + #[cfg(feature = "ffmpeg41")] + AV_PIX_FMT_GRAY14LE => Pixel::GRAY14LE, + #[cfg(feature = "ffmpeg41")] + AV_PIX_FMT_GRAYF32BE => Pixel::GRAYF32BE, + #[cfg(feature = "ffmpeg41")] + AV_PIX_FMT_GRAYF32LE => Pixel::GRAYF32LE, } } } @@ -906,8 +926,18 @@ impl Into for Pixel { Pixel::GBRAPF32BE => AV_PIX_FMT_GBRAPF32BE, Pixel::GBRAPF32LE => AV_PIX_FMT_GBRAPF32LE, Pixel::DRM_PRIME => AV_PIX_FMT_DRM_PRIME, + #[cfg(feature = "ffmpeg4")] Pixel::OPENCL => AV_PIX_FMT_OPENCL, + + #[cfg(feature = "ffmpeg41")] + Pixel::GRAY14BE => AV_PIX_FMT_GRAY14BE, + #[cfg(feature = "ffmpeg41")] + Pixel::GRAY14LE => AV_PIX_FMT_GRAY14LE, + #[cfg(feature = "ffmpeg41")] + Pixel::GRAYF32BE => AV_PIX_FMT_GRAYF32BE, + #[cfg(feature = "ffmpeg41")] + Pixel::GRAYF32LE => AV_PIX_FMT_GRAYF32LE, } } } diff --git a/src/util/frame/side_data.rs b/src/util/frame/side_data.rs index 7c4289f..b5b3a4d 100644 --- a/src/util/frame/side_data.rs +++ b/src/util/frame/side_data.rs @@ -32,6 +32,9 @@ pub enum Type { QPTableProperties, #[cfg(feature = "ffmpeg4")] QPTableData, + + #[cfg(feature = "ffmpeg41")] + S12M_TIMECODE, } impl Type { @@ -69,6 +72,9 @@ impl From for Type { AV_FRAME_DATA_QP_TABLE_PROPERTIES => Type::QPTableProperties, #[cfg(feature = "ffmpeg4")] AV_FRAME_DATA_QP_TABLE_DATA => Type::QPTableData, + + #[cfg(feature = "ffmpeg41")] + AV_FRAME_DATA_S12M_TIMECODE => Type::S12M_TIMECODE, } } } @@ -99,6 +105,9 @@ impl Into for Type { Type::QPTableProperties => AV_FRAME_DATA_QP_TABLE_PROPERTIES, #[cfg(feature = "ffmpeg4")] Type::QPTableData => AV_FRAME_DATA_QP_TABLE_DATA, + + #[cfg(feature = "ffmpeg41")] + Type::S12M_TIMECODE => AV_FRAME_DATA_S12M_TIMECODE, } } }