From fcca68ae5eff425362b759f4bc58bb825aa7533a Mon Sep 17 00:00:00 2001 From: Zhiming Wang Date: Mon, 1 Jun 2020 14:42:39 +0800 Subject: [PATCH] Add FFmpeg 4.2 specific code --- Cargo.toml | 3 ++- src/codec/id.rs | 51 +++++++++++++++++++++++++++++++++++++ src/util/format/pixel.rs | 39 ++++++++++++++++++++++++++++ src/util/frame/side_data.rs | 15 +++++++++++ 4 files changed, 107 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 8e5aa35..c012b3f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,8 +15,9 @@ keywords = ["ffmpeg", "multimedia", "video", "audio"] categories = ["multimedia"] [features] -default = ["ffmpeg41", "codec", "device", "filter", "format", "resampling", "software-resampling", "software-scaling"] +default = ["ffmpeg42", "codec", "device", "filter", "format", "resampling", "software-resampling", "software-scaling"] +ffmpeg42 = ["ffmpeg41"] ffmpeg41 = ["ffmpeg4"] ffmpeg4 = [] diff --git a/src/codec/id.rs b/src/codec/id.rs index 8c59fe8..fada50c 100644 --- a/src/codec/id.rs +++ b/src/codec/id.rs @@ -510,6 +510,23 @@ pub enum Id { ATRAC9, #[cfg(feature = "ffmpeg41")] TTML, + + #[cfg(feature = "ffmpeg42")] + HYMT, + #[cfg(feature = "ffmpeg42")] + ARBC, + #[cfg(feature = "ffmpeg42")] + AGM, + #[cfg(feature = "ffmpeg42")] + LSCR, + #[cfg(feature = "ffmpeg42")] + VP4, + #[cfg(feature = "ffmpeg42")] + ADPCM_AGM, + #[cfg(feature = "ffmpeg42")] + HCOM, + #[cfg(feature = "ffmpeg42")] + ARIB_CAPTION, } impl Id { @@ -1022,6 +1039,23 @@ impl From for Id { AV_CODEC_ID_ATRAC9 => Id::ATRAC9, #[cfg(feature = "ffmpeg41")] AV_CODEC_ID_TTML => Id::TTML, + + #[cfg(feature = "ffmpeg42")] + AV_CODEC_ID_HYMT => Id::HYMT, + #[cfg(feature = "ffmpeg42")] + AV_CODEC_ID_ARBC => Id::ARBC, + #[cfg(feature = "ffmpeg42")] + AV_CODEC_ID_AGM => Id::AGM, + #[cfg(feature = "ffmpeg42")] + AV_CODEC_ID_LSCR => Id::LSCR, + #[cfg(feature = "ffmpeg42")] + AV_CODEC_ID_VP4 => Id::VP4, + #[cfg(feature = "ffmpeg42")] + AV_CODEC_ID_ADPCM_AGM => Id::ADPCM_AGM, + #[cfg(feature = "ffmpeg42")] + AV_CODEC_ID_HCOM => Id::HCOM, + #[cfg(feature = "ffmpeg42")] + AV_CODEC_ID_ARIB_CAPTION => Id::ARIB_CAPTION, } } } @@ -1531,6 +1565,23 @@ impl Into for Id { Id::ATRAC9 => AV_CODEC_ID_ATRAC9, #[cfg(feature = "ffmpeg41")] Id::TTML => AV_CODEC_ID_TTML, + + #[cfg(feature = "ffmpeg42")] + Id::HYMT => AV_CODEC_ID_HYMT, + #[cfg(feature = "ffmpeg42")] + Id::ARBC => AV_CODEC_ID_ARBC, + #[cfg(feature = "ffmpeg42")] + Id::AGM => AV_CODEC_ID_AGM, + #[cfg(feature = "ffmpeg42")] + Id::LSCR => AV_CODEC_ID_LSCR, + #[cfg(feature = "ffmpeg42")] + Id::VP4 => AV_CODEC_ID_VP4, + #[cfg(feature = "ffmpeg42")] + Id::ADPCM_AGM => AV_CODEC_ID_ADPCM_AGM, + #[cfg(feature = "ffmpeg42")] + Id::HCOM => AV_CODEC_ID_HCOM, + #[cfg(feature = "ffmpeg42")] + Id::ARIB_CAPTION => AV_CODEC_ID_ARIB_CAPTION, } } } diff --git a/src/util/format/pixel.rs b/src/util/format/pixel.rs index c4c3d5e..93cc863 100644 --- a/src/util/format/pixel.rs +++ b/src/util/format/pixel.rs @@ -320,6 +320,19 @@ pub enum Pixel { GRAYF32BE, #[cfg(feature = "ffmpeg41")] GRAYF32LE, + + #[cfg(feature = "ffmpeg42")] + YUVA422P12BE, + #[cfg(feature = "ffmpeg42")] + YUVA422P12LE, + #[cfg(feature = "ffmpeg42")] + YUVA444P12BE, + #[cfg(feature = "ffmpeg42")] + YUVA444P12LE, + #[cfg(feature = "ffmpeg42")] + NV24, + #[cfg(feature = "ffmpeg42")] + NV42, } #[derive(Clone, Copy, PartialEq, Eq)] @@ -618,6 +631,19 @@ impl From for Pixel { AV_PIX_FMT_GRAYF32BE => Pixel::GRAYF32BE, #[cfg(feature = "ffmpeg41")] AV_PIX_FMT_GRAYF32LE => Pixel::GRAYF32LE, + + #[cfg(feature = "ffmpeg42")] + AV_PIX_FMT_YUVA422P12BE => Pixel::YUVA422P12BE, + #[cfg(feature = "ffmpeg42")] + AV_PIX_FMT_YUVA422P12LE => Pixel::YUVA422P12LE, + #[cfg(feature = "ffmpeg42")] + AV_PIX_FMT_YUVA444P12BE => Pixel::YUVA444P12BE, + #[cfg(feature = "ffmpeg42")] + AV_PIX_FMT_YUVA444P12LE => Pixel::YUVA444P12LE, + #[cfg(feature = "ffmpeg42")] + AV_PIX_FMT_NV24 => Pixel::NV24, + #[cfg(feature = "ffmpeg42")] + AV_PIX_FMT_NV42 => Pixel::NV42, } } } @@ -938,6 +964,19 @@ impl Into for Pixel { Pixel::GRAYF32BE => AV_PIX_FMT_GRAYF32BE, #[cfg(feature = "ffmpeg41")] Pixel::GRAYF32LE => AV_PIX_FMT_GRAYF32LE, + + #[cfg(feature = "ffmpeg42")] + Pixel::YUVA422P12BE => AV_PIX_FMT_YUVA422P12BE, + #[cfg(feature = "ffmpeg42")] + Pixel::YUVA422P12LE => AV_PIX_FMT_YUVA422P12LE, + #[cfg(feature = "ffmpeg42")] + Pixel::YUVA444P12BE => AV_PIX_FMT_YUVA444P12BE, + #[cfg(feature = "ffmpeg42")] + Pixel::YUVA444P12LE => AV_PIX_FMT_YUVA444P12LE, + #[cfg(feature = "ffmpeg42")] + Pixel::NV24 => AV_PIX_FMT_NV24, + #[cfg(feature = "ffmpeg42")] + Pixel::NV42 => AV_PIX_FMT_NV42, } } } diff --git a/src/util/frame/side_data.rs b/src/util/frame/side_data.rs index b5b3a4d..3dcf5e0 100644 --- a/src/util/frame/side_data.rs +++ b/src/util/frame/side_data.rs @@ -35,6 +35,11 @@ pub enum Type { #[cfg(feature = "ffmpeg41")] S12M_TIMECODE, + + #[cfg(feature = "ffmpeg42")] + DYNAMIC_HDR_PLUS, + #[cfg(feature = "ffmpeg42")] + REGIONS_OF_INTEREST, } impl Type { @@ -75,6 +80,11 @@ impl From for Type { #[cfg(feature = "ffmpeg41")] AV_FRAME_DATA_S12M_TIMECODE => Type::S12M_TIMECODE, + + #[cfg(feature = "ffmpeg42")] + AV_FRAME_DATA_DYNAMIC_HDR_PLUS => Type::DYNAMIC_HDR_PLUS, + #[cfg(feature = "ffmpeg42")] + AV_FRAME_DATA_REGIONS_OF_INTEREST => Type::REGIONS_OF_INTEREST, } } } @@ -108,6 +118,11 @@ impl Into for Type { #[cfg(feature = "ffmpeg41")] Type::S12M_TIMECODE => AV_FRAME_DATA_S12M_TIMECODE, + + #[cfg(feature = "ffmpeg42")] + Type::DYNAMIC_HDR_PLUS => AV_FRAME_DATA_DYNAMIC_HDR_PLUS, + #[cfg(feature = "ffmpeg42")] + Type::REGIONS_OF_INTEREST => AV_FRAME_DATA_REGIONS_OF_INTEREST, } } }