util: move SampleFormat and PixelFormat to util::format
This commit is contained in:
5
src/util/format/mod.rs
Normal file
5
src/util/format/mod.rs
Normal file
@ -0,0 +1,5 @@
|
||||
pub mod sample;
|
||||
pub use self::sample::Sample;
|
||||
|
||||
pub mod pixel;
|
||||
pub use self::pixel::Pixel;
|
718
src/util/format/pixel.rs
Normal file
718
src/util/format/pixel.rs
Normal file
@ -0,0 +1,718 @@
|
||||
use ffi::*;
|
||||
|
||||
#[derive(Eq, PartialEq, Copy, Clone, Debug)]
|
||||
pub enum Pixel {
|
||||
None,
|
||||
|
||||
YUV420P,
|
||||
YUYV422,
|
||||
RGB24,
|
||||
BGR24,
|
||||
YUV422P,
|
||||
YUV444P,
|
||||
YUV410P,
|
||||
YUV411P,
|
||||
GRAY8,
|
||||
MonoWhite,
|
||||
MonoBlack,
|
||||
PAL8,
|
||||
YUVJ420P,
|
||||
YUVJ422P,
|
||||
YUVJ444P,
|
||||
XVMC_MPEG2_MC,
|
||||
XVMC_MPEG2_IDCT,
|
||||
UYVY422,
|
||||
UYYVYY411,
|
||||
BGR8,
|
||||
BGR4,
|
||||
BGR4_BYTE,
|
||||
RGB8,
|
||||
RGB4,
|
||||
RGB4_BYTE,
|
||||
NV12,
|
||||
NV21,
|
||||
|
||||
ARGB,
|
||||
RGBA,
|
||||
ABGR,
|
||||
BGRA,
|
||||
|
||||
GRAY16BE,
|
||||
GRAY16LE,
|
||||
YUV440P,
|
||||
YUVJ440P,
|
||||
YUVA420P,
|
||||
VDPAU_H264,
|
||||
VDPAU_MPEG1,
|
||||
VDPAU_MPEG2,
|
||||
VDPAU_WMV3,
|
||||
VDPAU_VC1,
|
||||
RGB48BE,
|
||||
RGB48LE,
|
||||
|
||||
RGB565BE,
|
||||
RGB565LE,
|
||||
RGB555BE,
|
||||
RGB555LE,
|
||||
|
||||
BGR565BE,
|
||||
BGR565LE,
|
||||
BGR555BE,
|
||||
BGR555LE,
|
||||
|
||||
VAAPI_MOCO,
|
||||
VAAPI_IDCT,
|
||||
VAAPI_VLD,
|
||||
|
||||
YUV420P16LE,
|
||||
YUV420P16BE,
|
||||
YUV422P16LE,
|
||||
YUV422P16BE,
|
||||
YUV444P16LE,
|
||||
YUV444P16BE,
|
||||
VDPAU_MPEG4,
|
||||
DXVA2_VLD,
|
||||
|
||||
RGB444LE,
|
||||
RGB444BE,
|
||||
BGR444LE,
|
||||
BGR444BE,
|
||||
YA8,
|
||||
|
||||
BGR48BE,
|
||||
BGR48LE,
|
||||
|
||||
YUV420P9BE,
|
||||
YUV420P9LE,
|
||||
YUV420P10BE,
|
||||
YUV420P10LE,
|
||||
YUV422P10BE,
|
||||
YUV422P10LE,
|
||||
YUV444P9BE,
|
||||
YUV444P9LE,
|
||||
YUV444P10BE,
|
||||
YUV444P10LE,
|
||||
YUV422P9BE,
|
||||
YUV422P9LE,
|
||||
VDA_VLD,
|
||||
|
||||
GBRP,
|
||||
GBRP9BE,
|
||||
GBRP9LE,
|
||||
GBRP10BE,
|
||||
GBRP10LE,
|
||||
GBRP16BE,
|
||||
GBRP16LE,
|
||||
|
||||
YUVA422P_LIBAV,
|
||||
YUVA444P_LIBAV,
|
||||
|
||||
YUVA420P9BE,
|
||||
YUVA420P9LE,
|
||||
YUVA422P9BE,
|
||||
YUVA422P9LE,
|
||||
YUVA444P9BE,
|
||||
YUVA444P9LE,
|
||||
YUVA420P10BE,
|
||||
YUVA420P10LE,
|
||||
YUVA422P10BE,
|
||||
YUVA422P10LE,
|
||||
YUVA444P10BE,
|
||||
YUVA444P10LE,
|
||||
YUVA420P16BE,
|
||||
YUVA420P16LE,
|
||||
YUVA422P16BE,
|
||||
YUVA422P16LE,
|
||||
YUVA444P16BE,
|
||||
YUVA444P16LE,
|
||||
|
||||
VDPAU,
|
||||
|
||||
XYZ12LE,
|
||||
XYZ12BE,
|
||||
NV16,
|
||||
NV20LE,
|
||||
NV20BE,
|
||||
|
||||
RGBA64BE_LIBAV,
|
||||
RGBA64LE_LIBAV,
|
||||
BGRA64BE_LIBAV,
|
||||
BGRA64LE_LIBAV,
|
||||
|
||||
YVYU422,
|
||||
|
||||
VDA,
|
||||
|
||||
YA16BE,
|
||||
YA16LE,
|
||||
|
||||
GBRAP_LIBAV,
|
||||
GBRAP16BE_LIBAV,
|
||||
GBRAP16LE_LIBAV,
|
||||
QSV,
|
||||
|
||||
ZRGB,
|
||||
RGBZ,
|
||||
ZBGR,
|
||||
BGRZ,
|
||||
YUVA444P,
|
||||
YUVA422P,
|
||||
|
||||
YUV420P12BE,
|
||||
YUV420P12LE,
|
||||
YUV420P14BE,
|
||||
YUV420P14LE,
|
||||
YUV422P12BE,
|
||||
YUV422P12LE,
|
||||
YUV422P14BE,
|
||||
YUV422P14LE,
|
||||
YUV444P12BE,
|
||||
YUV444P12LE,
|
||||
YUV444P14BE,
|
||||
YUV444P14LE,
|
||||
GBRP12BE,
|
||||
GBRP12LE,
|
||||
GBRP14BE,
|
||||
GBRP14LE,
|
||||
GBRAP,
|
||||
GBRAP16BE,
|
||||
GBRAP16LE,
|
||||
YUVJ411P,
|
||||
|
||||
BAYER_BGGR8,
|
||||
BAYER_RGGB8,
|
||||
BAYER_GBRG8,
|
||||
BAYER_GRBG8,
|
||||
BAYER_BGGR16LE,
|
||||
BAYER_BGGR16BE,
|
||||
BAYER_RGGB16LE,
|
||||
BAYER_RGGB16BE,
|
||||
BAYER_GBRG16LE,
|
||||
BAYER_GBRG16BE,
|
||||
BAYER_GRBG16LE,
|
||||
BAYER_GRBG16BE,
|
||||
|
||||
// --- defaults
|
||||
XVMC,
|
||||
Y400A,
|
||||
GRAY8A,
|
||||
GBR24P,
|
||||
|
||||
RGB32,
|
||||
RGB32_1,
|
||||
BGR32,
|
||||
BGR32_1,
|
||||
ZRGB32,
|
||||
ZBGR32,
|
||||
|
||||
GRAY16,
|
||||
YA16,
|
||||
RGB48,
|
||||
RGB565,
|
||||
RGB555,
|
||||
RGB444,
|
||||
BGR48,
|
||||
BGR565,
|
||||
BGR555,
|
||||
BGR444,
|
||||
|
||||
YUV420P9,
|
||||
YUV422P9,
|
||||
YUV444P9,
|
||||
YUV420P10,
|
||||
YUV422P10,
|
||||
YUV444P10,
|
||||
YUV420P12,
|
||||
YUV422P12,
|
||||
YUV444P12,
|
||||
YUV420P14,
|
||||
YUV422P14,
|
||||
YUV444P14,
|
||||
YUV420P16,
|
||||
YUV422P16,
|
||||
YUV444P16,
|
||||
|
||||
GBRP9,
|
||||
GBRP10,
|
||||
GBRP12,
|
||||
GBRP14,
|
||||
GBRP16,
|
||||
GBRAP16,
|
||||
|
||||
BAYER_BGGR16,
|
||||
BAYER_RGGB16,
|
||||
BAYER_GBRG16,
|
||||
BAYER_GRBG16,
|
||||
|
||||
YUVA420P9,
|
||||
YUVA422P9,
|
||||
YUVA444P9,
|
||||
YUVA420P10,
|
||||
YUVA422P10,
|
||||
YUVA444P10,
|
||||
YUVA420P16,
|
||||
YUVA422P16,
|
||||
YUVA444P16,
|
||||
|
||||
XYZ12,
|
||||
NV20,
|
||||
}
|
||||
|
||||
impl From<AVPixelFormat> for Pixel {
|
||||
fn from(value: AVPixelFormat) -> Self {
|
||||
match value {
|
||||
AV_PIX_FMT_NONE => Pixel::None,
|
||||
|
||||
AV_PIX_FMT_YUV420P => Pixel::YUV420P,
|
||||
AV_PIX_FMT_YUYV422 => Pixel::YUYV422,
|
||||
AV_PIX_FMT_RGB24 => Pixel::RGB24,
|
||||
AV_PIX_FMT_BGR24 => Pixel::BGR24,
|
||||
AV_PIX_FMT_YUV422P => Pixel::YUV422P,
|
||||
AV_PIX_FMT_YUV444P => Pixel::YUV444P,
|
||||
AV_PIX_FMT_YUV410P => Pixel::YUV410P,
|
||||
AV_PIX_FMT_YUV411P => Pixel::YUV411P,
|
||||
AV_PIX_FMT_GRAY8 => Pixel::GRAY8,
|
||||
AV_PIX_FMT_MONOWHITE => Pixel::MonoWhite,
|
||||
AV_PIX_FMT_MONOBLACK => Pixel::MonoBlack,
|
||||
AV_PIX_FMT_PAL8 => Pixel::PAL8,
|
||||
AV_PIX_FMT_YUVJ420P => Pixel::YUVJ420P,
|
||||
AV_PIX_FMT_YUVJ422P => Pixel::YUVJ422P,
|
||||
AV_PIX_FMT_YUVJ444P => Pixel::YUVJ444P,
|
||||
AV_PIX_FMT_XVMC_MPEG2_MC => Pixel::XVMC_MPEG2_MC,
|
||||
AV_PIX_FMT_XVMC_MPEG2_IDCT => Pixel::XVMC_MPEG2_IDCT,
|
||||
AV_PIX_FMT_UYVY422 => Pixel::UYVY422,
|
||||
AV_PIX_FMT_UYYVYY411 => Pixel::UYYVYY411,
|
||||
AV_PIX_FMT_BGR8 => Pixel::BGR8,
|
||||
AV_PIX_FMT_BGR4 => Pixel::BGR4,
|
||||
AV_PIX_FMT_BGR4_BYTE => Pixel::BGR4_BYTE,
|
||||
AV_PIX_FMT_RGB8 => Pixel::RGB8,
|
||||
AV_PIX_FMT_RGB4 => Pixel::RGB4,
|
||||
AV_PIX_FMT_RGB4_BYTE => Pixel::RGB4_BYTE,
|
||||
AV_PIX_FMT_NV12 => Pixel::NV12,
|
||||
AV_PIX_FMT_NV21 => Pixel::NV21,
|
||||
|
||||
AV_PIX_FMT_ARGB => Pixel::ARGB,
|
||||
AV_PIX_FMT_RGBA => Pixel::RGBA,
|
||||
AV_PIX_FMT_ABGR => Pixel::ABGR,
|
||||
AV_PIX_FMT_BGRA => Pixel::BGRA,
|
||||
|
||||
AV_PIX_FMT_GRAY16BE => Pixel::GRAY16BE,
|
||||
AV_PIX_FMT_GRAY16LE => Pixel::GRAY16LE,
|
||||
AV_PIX_FMT_YUV440P => Pixel::YUV440P,
|
||||
AV_PIX_FMT_YUVJ440P => Pixel::YUVJ440P,
|
||||
AV_PIX_FMT_YUVA420P => Pixel::YUVA420P,
|
||||
AV_PIX_FMT_VDPAU_H264 => Pixel::VDPAU_H264,
|
||||
AV_PIX_FMT_VDPAU_MPEG1 => Pixel::VDPAU_MPEG1,
|
||||
AV_PIX_FMT_VDPAU_MPEG2 => Pixel::VDPAU_MPEG2,
|
||||
AV_PIX_FMT_VDPAU_WMV3 => Pixel::VDPAU_WMV3,
|
||||
AV_PIX_FMT_VDPAU_VC1 => Pixel::VDPAU_VC1,
|
||||
AV_PIX_FMT_RGB48BE => Pixel::RGB48BE,
|
||||
AV_PIX_FMT_RGB48LE => Pixel::RGB48LE,
|
||||
|
||||
AV_PIX_FMT_RGB565BE => Pixel::RGB565BE,
|
||||
AV_PIX_FMT_RGB565LE => Pixel::RGB565LE,
|
||||
AV_PIX_FMT_RGB555BE => Pixel::RGB555BE,
|
||||
AV_PIX_FMT_RGB555LE => Pixel::RGB555LE,
|
||||
|
||||
AV_PIX_FMT_BGR565BE => Pixel::BGR565BE,
|
||||
AV_PIX_FMT_BGR565LE => Pixel::BGR565LE,
|
||||
AV_PIX_FMT_BGR555BE => Pixel::BGR555BE,
|
||||
AV_PIX_FMT_BGR555LE => Pixel::BGR555LE,
|
||||
|
||||
AV_PIX_FMT_VAAPI_MOCO => Pixel::VAAPI_MOCO,
|
||||
AV_PIX_FMT_VAAPI_IDCT => Pixel::VAAPI_IDCT,
|
||||
AV_PIX_FMT_VAAPI_VLD => Pixel::VAAPI_VLD,
|
||||
|
||||
AV_PIX_FMT_YUV420P16LE => Pixel::YUV420P16LE,
|
||||
AV_PIX_FMT_YUV420P16BE => Pixel::YUV420P16BE,
|
||||
AV_PIX_FMT_YUV422P16LE => Pixel::YUV422P16LE,
|
||||
AV_PIX_FMT_YUV422P16BE => Pixel::YUV422P16BE,
|
||||
AV_PIX_FMT_YUV444P16LE => Pixel::YUV444P16LE,
|
||||
AV_PIX_FMT_YUV444P16BE => Pixel::YUV444P16BE,
|
||||
AV_PIX_FMT_VDPAU_MPEG4 => Pixel::VDPAU_MPEG4,
|
||||
AV_PIX_FMT_DXVA2_VLD => Pixel::DXVA2_VLD,
|
||||
|
||||
AV_PIX_FMT_RGB444LE => Pixel::RGB444LE,
|
||||
AV_PIX_FMT_RGB444BE => Pixel::RGB444BE,
|
||||
AV_PIX_FMT_BGR444LE => Pixel::BGR444LE,
|
||||
AV_PIX_FMT_BGR444BE => Pixel::BGR444BE,
|
||||
AV_PIX_FMT_YA8 => Pixel::YA8,
|
||||
|
||||
AV_PIX_FMT_BGR48BE => Pixel::BGR48BE,
|
||||
AV_PIX_FMT_BGR48LE => Pixel::BGR48LE,
|
||||
|
||||
AV_PIX_FMT_YUV420P9BE => Pixel::YUV420P9BE,
|
||||
AV_PIX_FMT_YUV420P9LE => Pixel::YUV420P9LE,
|
||||
AV_PIX_FMT_YUV420P10BE => Pixel::YUV420P10BE,
|
||||
AV_PIX_FMT_YUV420P10LE => Pixel::YUV420P10LE,
|
||||
AV_PIX_FMT_YUV422P10BE => Pixel::YUV422P10BE,
|
||||
AV_PIX_FMT_YUV422P10LE => Pixel::YUV422P10LE,
|
||||
AV_PIX_FMT_YUV444P9BE => Pixel::YUV444P9BE,
|
||||
AV_PIX_FMT_YUV444P9LE => Pixel::YUV444P9LE,
|
||||
AV_PIX_FMT_YUV444P10BE => Pixel::YUV444P10BE,
|
||||
AV_PIX_FMT_YUV444P10LE => Pixel::YUV444P10LE,
|
||||
AV_PIX_FMT_YUV422P9BE => Pixel::YUV422P9BE,
|
||||
AV_PIX_FMT_YUV422P9LE => Pixel::YUV422P9LE,
|
||||
AV_PIX_FMT_VDA_VLD => Pixel::VDA_VLD,
|
||||
|
||||
AV_PIX_FMT_GBRP => Pixel::GBRP,
|
||||
AV_PIX_FMT_GBRP9BE => Pixel::GBRP9BE,
|
||||
AV_PIX_FMT_GBRP9LE => Pixel::GBRP9LE,
|
||||
AV_PIX_FMT_GBRP10BE => Pixel::GBRP10BE,
|
||||
AV_PIX_FMT_GBRP10LE => Pixel::GBRP10LE,
|
||||
AV_PIX_FMT_GBRP16BE => Pixel::GBRP16BE,
|
||||
AV_PIX_FMT_GBRP16LE => Pixel::GBRP16LE,
|
||||
|
||||
AV_PIX_FMT_YUVA422P_LIBAV => Pixel::YUVA422P_LIBAV,
|
||||
AV_PIX_FMT_YUVA444P_LIBAV => Pixel::YUVA444P_LIBAV,
|
||||
|
||||
AV_PIX_FMT_YUVA420P9BE => Pixel::YUVA420P9BE,
|
||||
AV_PIX_FMT_YUVA420P9LE => Pixel::YUVA420P9LE,
|
||||
AV_PIX_FMT_YUVA422P9BE => Pixel::YUVA422P9BE,
|
||||
AV_PIX_FMT_YUVA422P9LE => Pixel::YUVA422P9LE,
|
||||
AV_PIX_FMT_YUVA444P9BE => Pixel::YUVA444P9BE,
|
||||
AV_PIX_FMT_YUVA444P9LE => Pixel::YUVA444P9LE,
|
||||
AV_PIX_FMT_YUVA420P10BE => Pixel::YUVA420P10BE,
|
||||
AV_PIX_FMT_YUVA420P10LE => Pixel::YUVA420P10LE,
|
||||
AV_PIX_FMT_YUVA422P10BE => Pixel::YUVA422P10BE,
|
||||
AV_PIX_FMT_YUVA422P10LE => Pixel::YUVA422P10LE,
|
||||
AV_PIX_FMT_YUVA444P10BE => Pixel::YUVA444P10BE,
|
||||
AV_PIX_FMT_YUVA444P10LE => Pixel::YUVA444P10LE,
|
||||
AV_PIX_FMT_YUVA420P16BE => Pixel::YUVA420P16BE,
|
||||
AV_PIX_FMT_YUVA420P16LE => Pixel::YUVA420P16LE,
|
||||
AV_PIX_FMT_YUVA422P16BE => Pixel::YUVA422P16BE,
|
||||
AV_PIX_FMT_YUVA422P16LE => Pixel::YUVA422P16LE,
|
||||
AV_PIX_FMT_YUVA444P16BE => Pixel::YUVA444P16BE,
|
||||
AV_PIX_FMT_YUVA444P16LE => Pixel::YUVA444P16LE,
|
||||
|
||||
AV_PIX_FMT_VDPAU => Pixel::VDPAU,
|
||||
|
||||
AV_PIX_FMT_XYZ12LE => Pixel::XYZ12LE,
|
||||
AV_PIX_FMT_XYZ12BE => Pixel::XYZ12BE,
|
||||
AV_PIX_FMT_NV16 => Pixel::NV16,
|
||||
AV_PIX_FMT_NV20LE => Pixel::NV20LE,
|
||||
AV_PIX_FMT_NV20BE => Pixel::NV20BE,
|
||||
|
||||
AV_PIX_FMT_RGBA64BE_LIBAV => Pixel::RGBA64BE_LIBAV,
|
||||
AV_PIX_FMT_RGBA64LE_LIBAV => Pixel::RGBA64LE_LIBAV,
|
||||
AV_PIX_FMT_BGRA64BE_LIBAV => Pixel::BGRA64BE_LIBAV,
|
||||
AV_PIX_FMT_BGRA64LE_LIBAV => Pixel::BGRA64LE_LIBAV,
|
||||
|
||||
AV_PIX_FMT_YVYU422 => Pixel::YVYU422,
|
||||
|
||||
AV_PIX_FMT_VDA => Pixel::VDA,
|
||||
|
||||
AV_PIX_FMT_YA16BE => Pixel::YA16BE,
|
||||
AV_PIX_FMT_YA16LE => Pixel::YA16LE,
|
||||
|
||||
AV_PIX_FMT_GBRAP_LIBAV => Pixel::GBRAP_LIBAV,
|
||||
AV_PIX_FMT_GBRAP16BE_LIBAV => Pixel::GBRAP16BE_LIBAV,
|
||||
AV_PIX_FMT_GBRAP16LE_LIBAV => Pixel::GBRAP16LE_LIBAV,
|
||||
AV_PIX_FMT_QSV => Pixel::QSV,
|
||||
|
||||
AV_PIX_FMT_0RGB => Pixel::ZRGB,
|
||||
AV_PIX_FMT_RGB0 => Pixel::RGBZ,
|
||||
AV_PIX_FMT_0BGR => Pixel::ZBGR,
|
||||
AV_PIX_FMT_BGR0 => Pixel::BGRZ,
|
||||
AV_PIX_FMT_YUVA444P => Pixel::YUVA444P,
|
||||
AV_PIX_FMT_YUVA422P => Pixel::YUVA422P,
|
||||
|
||||
AV_PIX_FMT_YUV420P12BE => Pixel::YUV420P12BE,
|
||||
AV_PIX_FMT_YUV420P12LE => Pixel::YUV420P12LE,
|
||||
AV_PIX_FMT_YUV420P14BE => Pixel::YUV420P14BE,
|
||||
AV_PIX_FMT_YUV420P14LE => Pixel::YUV420P14LE,
|
||||
AV_PIX_FMT_YUV422P12BE => Pixel::YUV422P12BE,
|
||||
AV_PIX_FMT_YUV422P12LE => Pixel::YUV422P12LE,
|
||||
AV_PIX_FMT_YUV422P14BE => Pixel::YUV422P14BE,
|
||||
AV_PIX_FMT_YUV422P14LE => Pixel::YUV422P14LE,
|
||||
AV_PIX_FMT_YUV444P12BE => Pixel::YUV444P12BE,
|
||||
AV_PIX_FMT_YUV444P12LE => Pixel::YUV444P12LE,
|
||||
AV_PIX_FMT_YUV444P14BE => Pixel::YUV444P14BE,
|
||||
AV_PIX_FMT_YUV444P14LE => Pixel::YUV444P14LE,
|
||||
AV_PIX_FMT_GBRP12BE => Pixel::GBRP12BE,
|
||||
AV_PIX_FMT_GBRP12LE => Pixel::GBRP12LE,
|
||||
AV_PIX_FMT_GBRP14BE => Pixel::GBRP14BE,
|
||||
AV_PIX_FMT_GBRP14LE => Pixel::GBRP14LE,
|
||||
AV_PIX_FMT_GBRAP => Pixel::GBRAP,
|
||||
AV_PIX_FMT_GBRAP16BE => Pixel::GBRAP16BE,
|
||||
AV_PIX_FMT_GBRAP16LE => Pixel::GBRAP16LE,
|
||||
AV_PIX_FMT_YUVJ411P => Pixel::YUVJ411P,
|
||||
|
||||
AV_PIX_FMT_BAYER_BGGR8 => Pixel::BAYER_BGGR8,
|
||||
AV_PIX_FMT_BAYER_RGGB8 => Pixel::BAYER_RGGB8,
|
||||
AV_PIX_FMT_BAYER_GBRG8 => Pixel::BAYER_GBRG8,
|
||||
AV_PIX_FMT_BAYER_GRBG8 => Pixel::BAYER_GRBG8,
|
||||
AV_PIX_FMT_BAYER_BGGR16LE => Pixel::BAYER_BGGR16LE,
|
||||
AV_PIX_FMT_BAYER_BGGR16BE => Pixel::BAYER_BGGR16BE,
|
||||
AV_PIX_FMT_BAYER_RGGB16LE => Pixel::BAYER_RGGB16LE,
|
||||
AV_PIX_FMT_BAYER_RGGB16BE => Pixel::BAYER_RGGB16BE,
|
||||
AV_PIX_FMT_BAYER_GBRG16LE => Pixel::BAYER_GBRG16LE,
|
||||
AV_PIX_FMT_BAYER_GBRG16BE => Pixel::BAYER_GBRG16BE,
|
||||
AV_PIX_FMT_BAYER_GRBG16LE => Pixel::BAYER_GRBG16LE,
|
||||
AV_PIX_FMT_BAYER_GRBG16BE => Pixel::BAYER_GRBG16BE,
|
||||
|
||||
AV_PIX_FMT_NB => Pixel::None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Into<AVPixelFormat> for Pixel {
|
||||
fn into(self) -> AVPixelFormat {
|
||||
match self {
|
||||
Pixel::None => AV_PIX_FMT_NONE,
|
||||
|
||||
Pixel::YUV420P => AV_PIX_FMT_YUV420P,
|
||||
Pixel::YUYV422 => AV_PIX_FMT_YUYV422,
|
||||
Pixel::RGB24 => AV_PIX_FMT_RGB24,
|
||||
Pixel::BGR24 => AV_PIX_FMT_BGR24,
|
||||
Pixel::YUV422P => AV_PIX_FMT_YUV422P,
|
||||
Pixel::YUV444P => AV_PIX_FMT_YUV444P,
|
||||
Pixel::YUV410P => AV_PIX_FMT_YUV410P,
|
||||
Pixel::YUV411P => AV_PIX_FMT_YUV411P,
|
||||
Pixel::GRAY8 => AV_PIX_FMT_GRAY8,
|
||||
Pixel::MonoWhite => AV_PIX_FMT_MONOWHITE,
|
||||
Pixel::MonoBlack => AV_PIX_FMT_MONOBLACK,
|
||||
Pixel::PAL8 => AV_PIX_FMT_PAL8,
|
||||
Pixel::YUVJ420P => AV_PIX_FMT_YUVJ420P,
|
||||
Pixel::YUVJ422P => AV_PIX_FMT_YUVJ422P,
|
||||
Pixel::YUVJ444P => AV_PIX_FMT_YUVJ444P,
|
||||
Pixel::XVMC_MPEG2_MC => AV_PIX_FMT_XVMC_MPEG2_MC,
|
||||
Pixel::XVMC_MPEG2_IDCT => AV_PIX_FMT_XVMC_MPEG2_IDCT,
|
||||
Pixel::UYVY422 => AV_PIX_FMT_UYVY422,
|
||||
Pixel::UYYVYY411 => AV_PIX_FMT_UYYVYY411,
|
||||
Pixel::BGR8 => AV_PIX_FMT_BGR8,
|
||||
Pixel::BGR4 => AV_PIX_FMT_BGR4,
|
||||
Pixel::BGR4_BYTE => AV_PIX_FMT_BGR4_BYTE,
|
||||
Pixel::RGB8 => AV_PIX_FMT_RGB8,
|
||||
Pixel::RGB4 => AV_PIX_FMT_RGB4,
|
||||
Pixel::RGB4_BYTE => AV_PIX_FMT_RGB4_BYTE,
|
||||
Pixel::NV12 => AV_PIX_FMT_NV12,
|
||||
Pixel::NV21 => AV_PIX_FMT_NV21,
|
||||
|
||||
Pixel::ARGB => AV_PIX_FMT_ARGB,
|
||||
Pixel::RGBA => AV_PIX_FMT_RGBA,
|
||||
Pixel::ABGR => AV_PIX_FMT_ABGR,
|
||||
Pixel::BGRA => AV_PIX_FMT_BGRA,
|
||||
|
||||
Pixel::GRAY16BE => AV_PIX_FMT_GRAY16BE,
|
||||
Pixel::GRAY16LE => AV_PIX_FMT_GRAY16LE,
|
||||
Pixel::YUV440P => AV_PIX_FMT_YUV440P,
|
||||
Pixel::YUVJ440P => AV_PIX_FMT_YUVJ440P,
|
||||
Pixel::YUVA420P => AV_PIX_FMT_YUVA420P,
|
||||
Pixel::VDPAU_H264 => AV_PIX_FMT_VDPAU_H264,
|
||||
Pixel::VDPAU_MPEG1 => AV_PIX_FMT_VDPAU_MPEG1,
|
||||
Pixel::VDPAU_MPEG2 => AV_PIX_FMT_VDPAU_MPEG2,
|
||||
Pixel::VDPAU_WMV3 => AV_PIX_FMT_VDPAU_WMV3,
|
||||
Pixel::VDPAU_VC1 => AV_PIX_FMT_VDPAU_VC1,
|
||||
Pixel::RGB48BE => AV_PIX_FMT_RGB48BE,
|
||||
Pixel::RGB48LE => AV_PIX_FMT_RGB48LE,
|
||||
|
||||
Pixel::RGB565BE => AV_PIX_FMT_RGB565BE,
|
||||
Pixel::RGB565LE => AV_PIX_FMT_RGB565LE,
|
||||
Pixel::RGB555BE => AV_PIX_FMT_RGB555BE,
|
||||
Pixel::RGB555LE => AV_PIX_FMT_RGB555LE,
|
||||
|
||||
Pixel::BGR565BE => AV_PIX_FMT_BGR565BE,
|
||||
Pixel::BGR565LE => AV_PIX_FMT_BGR565LE,
|
||||
Pixel::BGR555BE => AV_PIX_FMT_BGR555BE,
|
||||
Pixel::BGR555LE => AV_PIX_FMT_BGR555LE,
|
||||
|
||||
Pixel::VAAPI_MOCO => AV_PIX_FMT_VAAPI_MOCO,
|
||||
Pixel::VAAPI_IDCT => AV_PIX_FMT_VAAPI_IDCT,
|
||||
Pixel::VAAPI_VLD => AV_PIX_FMT_VAAPI_VLD,
|
||||
|
||||
Pixel::YUV420P16LE => AV_PIX_FMT_YUV420P16LE,
|
||||
Pixel::YUV420P16BE => AV_PIX_FMT_YUV420P16BE,
|
||||
Pixel::YUV422P16LE => AV_PIX_FMT_YUV422P16LE,
|
||||
Pixel::YUV422P16BE => AV_PIX_FMT_YUV422P16BE,
|
||||
Pixel::YUV444P16LE => AV_PIX_FMT_YUV444P16LE,
|
||||
Pixel::YUV444P16BE => AV_PIX_FMT_YUV444P16BE,
|
||||
Pixel::VDPAU_MPEG4 => AV_PIX_FMT_VDPAU_MPEG4,
|
||||
Pixel::DXVA2_VLD => AV_PIX_FMT_DXVA2_VLD,
|
||||
|
||||
Pixel::RGB444LE => AV_PIX_FMT_RGB444LE,
|
||||
Pixel::RGB444BE => AV_PIX_FMT_RGB444BE,
|
||||
Pixel::BGR444LE => AV_PIX_FMT_BGR444LE,
|
||||
Pixel::BGR444BE => AV_PIX_FMT_BGR444BE,
|
||||
Pixel::YA8 => AV_PIX_FMT_YA8,
|
||||
|
||||
Pixel::BGR48BE => AV_PIX_FMT_BGR48BE,
|
||||
Pixel::BGR48LE => AV_PIX_FMT_BGR48LE,
|
||||
|
||||
Pixel::YUV420P9BE => AV_PIX_FMT_YUV420P9BE,
|
||||
Pixel::YUV420P9LE => AV_PIX_FMT_YUV420P9LE,
|
||||
Pixel::YUV420P10BE => AV_PIX_FMT_YUV420P10BE,
|
||||
Pixel::YUV420P10LE => AV_PIX_FMT_YUV420P10LE,
|
||||
Pixel::YUV422P10BE => AV_PIX_FMT_YUV422P10BE,
|
||||
Pixel::YUV422P10LE => AV_PIX_FMT_YUV422P10LE,
|
||||
Pixel::YUV444P9BE => AV_PIX_FMT_YUV444P9BE,
|
||||
Pixel::YUV444P9LE => AV_PIX_FMT_YUV444P9LE,
|
||||
Pixel::YUV444P10BE => AV_PIX_FMT_YUV444P10BE,
|
||||
Pixel::YUV444P10LE => AV_PIX_FMT_YUV444P10LE,
|
||||
Pixel::YUV422P9BE => AV_PIX_FMT_YUV422P9BE,
|
||||
Pixel::YUV422P9LE => AV_PIX_FMT_YUV422P9LE,
|
||||
Pixel::VDA_VLD => AV_PIX_FMT_VDA_VLD,
|
||||
|
||||
Pixel::GBRP => AV_PIX_FMT_GBRP,
|
||||
Pixel::GBRP9BE => AV_PIX_FMT_GBRP9BE,
|
||||
Pixel::GBRP9LE => AV_PIX_FMT_GBRP9LE,
|
||||
Pixel::GBRP10BE => AV_PIX_FMT_GBRP10BE,
|
||||
Pixel::GBRP10LE => AV_PIX_FMT_GBRP10LE,
|
||||
Pixel::GBRP16BE => AV_PIX_FMT_GBRP16BE,
|
||||
Pixel::GBRP16LE => AV_PIX_FMT_GBRP16LE,
|
||||
|
||||
Pixel::YUVA422P_LIBAV => AV_PIX_FMT_YUVA422P_LIBAV,
|
||||
Pixel::YUVA444P_LIBAV => AV_PIX_FMT_YUVA444P_LIBAV,
|
||||
|
||||
Pixel::YUVA420P9BE => AV_PIX_FMT_YUVA420P9BE,
|
||||
Pixel::YUVA420P9LE => AV_PIX_FMT_YUVA420P9LE,
|
||||
Pixel::YUVA422P9BE => AV_PIX_FMT_YUVA422P9BE,
|
||||
Pixel::YUVA422P9LE => AV_PIX_FMT_YUVA422P9LE,
|
||||
Pixel::YUVA444P9BE => AV_PIX_FMT_YUVA444P9BE,
|
||||
Pixel::YUVA444P9LE => AV_PIX_FMT_YUVA444P9LE,
|
||||
Pixel::YUVA420P10BE => AV_PIX_FMT_YUVA420P10BE,
|
||||
Pixel::YUVA420P10LE => AV_PIX_FMT_YUVA420P10LE,
|
||||
Pixel::YUVA422P10BE => AV_PIX_FMT_YUVA422P10BE,
|
||||
Pixel::YUVA422P10LE => AV_PIX_FMT_YUVA422P10LE,
|
||||
Pixel::YUVA444P10BE => AV_PIX_FMT_YUVA444P10BE,
|
||||
Pixel::YUVA444P10LE => AV_PIX_FMT_YUVA444P10LE,
|
||||
Pixel::YUVA420P16BE => AV_PIX_FMT_YUVA420P16BE,
|
||||
Pixel::YUVA420P16LE => AV_PIX_FMT_YUVA420P16LE,
|
||||
Pixel::YUVA422P16BE => AV_PIX_FMT_YUVA422P16BE,
|
||||
Pixel::YUVA422P16LE => AV_PIX_FMT_YUVA422P16LE,
|
||||
Pixel::YUVA444P16BE => AV_PIX_FMT_YUVA444P16BE,
|
||||
Pixel::YUVA444P16LE => AV_PIX_FMT_YUVA444P16LE,
|
||||
|
||||
Pixel::VDPAU => AV_PIX_FMT_VDPAU,
|
||||
|
||||
Pixel::XYZ12LE => AV_PIX_FMT_XYZ12LE,
|
||||
Pixel::XYZ12BE => AV_PIX_FMT_XYZ12BE,
|
||||
Pixel::NV16 => AV_PIX_FMT_NV16,
|
||||
Pixel::NV20LE => AV_PIX_FMT_NV20LE,
|
||||
Pixel::NV20BE => AV_PIX_FMT_NV20BE,
|
||||
|
||||
Pixel::RGBA64BE_LIBAV => AV_PIX_FMT_RGBA64BE_LIBAV,
|
||||
Pixel::RGBA64LE_LIBAV => AV_PIX_FMT_RGBA64LE_LIBAV,
|
||||
Pixel::BGRA64BE_LIBAV => AV_PIX_FMT_BGRA64BE_LIBAV,
|
||||
Pixel::BGRA64LE_LIBAV => AV_PIX_FMT_BGRA64LE_LIBAV,
|
||||
|
||||
Pixel::YVYU422 => AV_PIX_FMT_YVYU422,
|
||||
|
||||
Pixel::VDA => AV_PIX_FMT_VDA,
|
||||
|
||||
Pixel::YA16BE => AV_PIX_FMT_YA16BE,
|
||||
Pixel::YA16LE => AV_PIX_FMT_YA16LE,
|
||||
|
||||
Pixel::GBRAP_LIBAV => AV_PIX_FMT_GBRAP_LIBAV,
|
||||
Pixel::GBRAP16BE_LIBAV => AV_PIX_FMT_GBRAP16BE_LIBAV,
|
||||
Pixel::GBRAP16LE_LIBAV => AV_PIX_FMT_GBRAP16LE_LIBAV,
|
||||
Pixel::QSV => AV_PIX_FMT_QSV,
|
||||
|
||||
Pixel::ZRGB => AV_PIX_FMT_0RGB,
|
||||
Pixel::RGBZ => AV_PIX_FMT_RGB0,
|
||||
Pixel::ZBGR => AV_PIX_FMT_0BGR,
|
||||
Pixel::BGRZ => AV_PIX_FMT_BGR0,
|
||||
Pixel::YUVA444P => AV_PIX_FMT_YUVA444P,
|
||||
Pixel::YUVA422P => AV_PIX_FMT_YUVA422P,
|
||||
|
||||
Pixel::YUV420P12BE => AV_PIX_FMT_YUV420P12BE,
|
||||
Pixel::YUV420P12LE => AV_PIX_FMT_YUV420P12LE,
|
||||
Pixel::YUV420P14BE => AV_PIX_FMT_YUV420P14BE,
|
||||
Pixel::YUV420P14LE => AV_PIX_FMT_YUV420P14LE,
|
||||
Pixel::YUV422P12BE => AV_PIX_FMT_YUV422P12BE,
|
||||
Pixel::YUV422P12LE => AV_PIX_FMT_YUV422P12LE,
|
||||
Pixel::YUV422P14BE => AV_PIX_FMT_YUV422P14BE,
|
||||
Pixel::YUV422P14LE => AV_PIX_FMT_YUV422P14LE,
|
||||
Pixel::YUV444P12BE => AV_PIX_FMT_YUV444P12BE,
|
||||
Pixel::YUV444P12LE => AV_PIX_FMT_YUV444P12LE,
|
||||
Pixel::YUV444P14BE => AV_PIX_FMT_YUV444P14BE,
|
||||
Pixel::YUV444P14LE => AV_PIX_FMT_YUV444P14LE,
|
||||
Pixel::GBRP12BE => AV_PIX_FMT_GBRP12BE,
|
||||
Pixel::GBRP12LE => AV_PIX_FMT_GBRP12LE,
|
||||
Pixel::GBRP14BE => AV_PIX_FMT_GBRP14BE,
|
||||
Pixel::GBRP14LE => AV_PIX_FMT_GBRP14LE,
|
||||
Pixel::GBRAP => AV_PIX_FMT_GBRAP,
|
||||
Pixel::GBRAP16BE => AV_PIX_FMT_GBRAP16BE,
|
||||
Pixel::GBRAP16LE => AV_PIX_FMT_GBRAP16LE,
|
||||
Pixel::YUVJ411P => AV_PIX_FMT_YUVJ411P,
|
||||
|
||||
Pixel::BAYER_BGGR8 => AV_PIX_FMT_BAYER_BGGR8,
|
||||
Pixel::BAYER_RGGB8 => AV_PIX_FMT_BAYER_RGGB8,
|
||||
Pixel::BAYER_GBRG8 => AV_PIX_FMT_BAYER_GBRG8,
|
||||
Pixel::BAYER_GRBG8 => AV_PIX_FMT_BAYER_GRBG8,
|
||||
Pixel::BAYER_BGGR16LE => AV_PIX_FMT_BAYER_BGGR16LE,
|
||||
Pixel::BAYER_BGGR16BE => AV_PIX_FMT_BAYER_BGGR16BE,
|
||||
Pixel::BAYER_RGGB16LE => AV_PIX_FMT_BAYER_RGGB16LE,
|
||||
Pixel::BAYER_RGGB16BE => AV_PIX_FMT_BAYER_RGGB16BE,
|
||||
Pixel::BAYER_GBRG16LE => AV_PIX_FMT_BAYER_GBRG16LE,
|
||||
Pixel::BAYER_GBRG16BE => AV_PIX_FMT_BAYER_GBRG16BE,
|
||||
Pixel::BAYER_GRBG16LE => AV_PIX_FMT_BAYER_GRBG16LE,
|
||||
Pixel::BAYER_GRBG16BE => AV_PIX_FMT_BAYER_GRBG16BE,
|
||||
|
||||
// --- defaults
|
||||
Pixel::XVMC => AV_PIX_FMT_XVMC,
|
||||
Pixel::Y400A => AV_PIX_FMT_Y400A,
|
||||
Pixel::GRAY8A => AV_PIX_FMT_GRAY8A,
|
||||
Pixel::GBR24P => AV_PIX_FMT_GBR24P,
|
||||
|
||||
Pixel::RGB32 => AV_PIX_FMT_RGB32,
|
||||
Pixel::RGB32_1 => AV_PIX_FMT_RGB32_1,
|
||||
Pixel::BGR32 => AV_PIX_FMT_BGR32,
|
||||
Pixel::BGR32_1 => AV_PIX_FMT_BGR32_1,
|
||||
Pixel::ZRGB32 => AV_PIX_FMT_0RGB32,
|
||||
Pixel::ZBGR32 => AV_PIX_FMT_0BGR32,
|
||||
|
||||
Pixel::GRAY16 => AV_PIX_FMT_GRAY16,
|
||||
Pixel::YA16 => AV_PIX_FMT_YA16,
|
||||
Pixel::RGB48 => AV_PIX_FMT_RGB48,
|
||||
Pixel::RGB565 => AV_PIX_FMT_RGB565,
|
||||
Pixel::RGB555 => AV_PIX_FMT_RGB555,
|
||||
Pixel::RGB444 => AV_PIX_FMT_RGB444,
|
||||
Pixel::BGR48 => AV_PIX_FMT_BGR48,
|
||||
Pixel::BGR565 => AV_PIX_FMT_BGR565,
|
||||
Pixel::BGR555 => AV_PIX_FMT_BGR555,
|
||||
Pixel::BGR444 => AV_PIX_FMT_BGR444,
|
||||
|
||||
Pixel::YUV420P9 => AV_PIX_FMT_YUV420P9,
|
||||
Pixel::YUV422P9 => AV_PIX_FMT_YUV422P9,
|
||||
Pixel::YUV444P9 => AV_PIX_FMT_YUV444P9,
|
||||
Pixel::YUV420P10 => AV_PIX_FMT_YUV420P10,
|
||||
Pixel::YUV422P10 => AV_PIX_FMT_YUV422P10,
|
||||
Pixel::YUV444P10 => AV_PIX_FMT_YUV444P10,
|
||||
Pixel::YUV420P12 => AV_PIX_FMT_YUV420P12,
|
||||
Pixel::YUV422P12 => AV_PIX_FMT_YUV422P12,
|
||||
Pixel::YUV444P12 => AV_PIX_FMT_YUV444P12,
|
||||
Pixel::YUV420P14 => AV_PIX_FMT_YUV420P14,
|
||||
Pixel::YUV422P14 => AV_PIX_FMT_YUV422P14,
|
||||
Pixel::YUV444P14 => AV_PIX_FMT_YUV444P14,
|
||||
Pixel::YUV420P16 => AV_PIX_FMT_YUV420P16,
|
||||
Pixel::YUV422P16 => AV_PIX_FMT_YUV422P16,
|
||||
Pixel::YUV444P16 => AV_PIX_FMT_YUV444P16,
|
||||
|
||||
Pixel::GBRP9 => AV_PIX_FMT_GBRP9,
|
||||
Pixel::GBRP10 => AV_PIX_FMT_GBRP10,
|
||||
Pixel::GBRP12 => AV_PIX_FMT_GBRP12,
|
||||
Pixel::GBRP14 => AV_PIX_FMT_GBRP14,
|
||||
Pixel::GBRP16 => AV_PIX_FMT_GBRP16,
|
||||
Pixel::GBRAP16 => AV_PIX_FMT_GBRAP16,
|
||||
|
||||
Pixel::BAYER_BGGR16 => AV_PIX_FMT_BAYER_BGGR16,
|
||||
Pixel::BAYER_RGGB16 => AV_PIX_FMT_BAYER_RGGB16,
|
||||
Pixel::BAYER_GBRG16 => AV_PIX_FMT_BAYER_GBRG16,
|
||||
Pixel::BAYER_GRBG16 => AV_PIX_FMT_BAYER_GRBG16,
|
||||
|
||||
Pixel::YUVA420P9 => AV_PIX_FMT_YUVA420P9,
|
||||
Pixel::YUVA422P9 => AV_PIX_FMT_YUVA422P9,
|
||||
Pixel::YUVA444P9 => AV_PIX_FMT_YUVA444P9,
|
||||
Pixel::YUVA420P10 => AV_PIX_FMT_YUVA420P10,
|
||||
Pixel::YUVA422P10 => AV_PIX_FMT_YUVA422P10,
|
||||
Pixel::YUVA444P10 => AV_PIX_FMT_YUVA444P10,
|
||||
Pixel::YUVA420P16 => AV_PIX_FMT_YUVA420P16,
|
||||
Pixel::YUVA422P16 => AV_PIX_FMT_YUVA422P16,
|
||||
Pixel::YUVA444P16 => AV_PIX_FMT_YUVA444P16,
|
||||
|
||||
Pixel::XYZ12 => AV_PIX_FMT_XYZ12,
|
||||
Pixel::NV20 => AV_PIX_FMT_NV20,
|
||||
}
|
||||
}
|
||||
}
|
184
src/util/format/sample.rs
Normal file
184
src/util/format/sample.rs
Normal file
@ -0,0 +1,184 @@
|
||||
use std::ffi::{CStr, CString};
|
||||
use std::str::from_utf8_unchecked;
|
||||
use std::ops::Index;
|
||||
use std::ptr;
|
||||
use std::slice;
|
||||
use std::mem;
|
||||
|
||||
use libc::{c_int, uint8_t};
|
||||
use ffi::*;
|
||||
|
||||
#[derive(Eq, PartialEq, Copy, Clone, Debug)]
|
||||
pub enum Sample {
|
||||
None,
|
||||
U8,
|
||||
S16,
|
||||
S32,
|
||||
FLT,
|
||||
DBL,
|
||||
|
||||
U8P,
|
||||
S16P,
|
||||
S32P,
|
||||
FLTP,
|
||||
DBLP,
|
||||
}
|
||||
|
||||
impl Sample {
|
||||
pub fn name(&self) -> &'static str {
|
||||
unsafe {
|
||||
from_utf8_unchecked(CStr::from_ptr(av_get_sample_fmt_name((*self).into())).to_bytes())
|
||||
}
|
||||
}
|
||||
|
||||
pub fn packed(&self) -> Self {
|
||||
unsafe {
|
||||
Sample::from(av_get_packed_sample_fmt((*self).into()))
|
||||
}
|
||||
}
|
||||
|
||||
pub fn planar(&self) -> Self {
|
||||
unsafe {
|
||||
Sample::from(av_get_planar_sample_fmt((*self).into()))
|
||||
}
|
||||
}
|
||||
|
||||
pub fn is_planar(&self) -> bool {
|
||||
unsafe {
|
||||
av_sample_fmt_is_planar((*self).into()) == 1
|
||||
}
|
||||
}
|
||||
|
||||
pub fn bytes(&self) -> usize {
|
||||
unsafe {
|
||||
av_get_bytes_per_sample((*self).into()) as usize
|
||||
}
|
||||
}
|
||||
|
||||
pub fn buffer(&self, channels: usize, samples: usize, align: bool) -> Buffer {
|
||||
Buffer::new(*self, channels, samples, align)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<AVSampleFormat> for Sample {
|
||||
fn from(value: AVSampleFormat) -> Self {
|
||||
match value {
|
||||
AV_SAMPLE_FMT_NONE => Sample::None,
|
||||
AV_SAMPLE_FMT_U8 => Sample::U8,
|
||||
AV_SAMPLE_FMT_S16 => Sample::S16,
|
||||
AV_SAMPLE_FMT_S32 => Sample::S32,
|
||||
AV_SAMPLE_FMT_FLT => Sample::FLT,
|
||||
AV_SAMPLE_FMT_DBL => Sample::DBL,
|
||||
|
||||
AV_SAMPLE_FMT_U8P => Sample::U8P,
|
||||
AV_SAMPLE_FMT_S16P => Sample::S16P,
|
||||
AV_SAMPLE_FMT_S32P => Sample::S32P,
|
||||
AV_SAMPLE_FMT_FLTP => Sample::FLTP,
|
||||
AV_SAMPLE_FMT_DBLP => Sample::DBLP,
|
||||
|
||||
AV_SAMPLE_FMT_NB => Sample::None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&'static str> for Sample {
|
||||
fn from(value: &'static str) -> Self {
|
||||
unsafe {
|
||||
Sample::from(av_get_sample_fmt(CString::new(value).unwrap().as_ptr()))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Into<AVSampleFormat> for Sample {
|
||||
fn into(self) -> AVSampleFormat {
|
||||
match self {
|
||||
Sample::None => AV_SAMPLE_FMT_NONE,
|
||||
Sample::U8 => AV_SAMPLE_FMT_U8,
|
||||
Sample::S16 => AV_SAMPLE_FMT_S16,
|
||||
Sample::S32 => AV_SAMPLE_FMT_S32,
|
||||
Sample::FLT => AV_SAMPLE_FMT_FLT,
|
||||
Sample::DBL => AV_SAMPLE_FMT_DBL,
|
||||
|
||||
Sample::U8P => AV_SAMPLE_FMT_U8P,
|
||||
Sample::S16P => AV_SAMPLE_FMT_S16P,
|
||||
Sample::S32P => AV_SAMPLE_FMT_S32P,
|
||||
Sample::FLTP => AV_SAMPLE_FMT_FLTP,
|
||||
Sample::DBLP => AV_SAMPLE_FMT_DBLP,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Buffer {
|
||||
pub format: Sample,
|
||||
pub channels: usize,
|
||||
pub samples: usize,
|
||||
pub align: bool,
|
||||
|
||||
buffer: *mut *mut uint8_t,
|
||||
size: c_int,
|
||||
}
|
||||
|
||||
impl Buffer {
|
||||
pub fn size(format: Sample, channels: usize, samples: usize, align: bool) -> usize {
|
||||
unsafe {
|
||||
av_samples_get_buffer_size(ptr::null_mut(), channels as c_int, samples as c_int, format.into(), !align as c_int) as usize
|
||||
}
|
||||
}
|
||||
|
||||
pub fn new(format: Sample, channels: usize, samples: usize, align: bool) -> Self {
|
||||
unsafe {
|
||||
let mut buf = Buffer {
|
||||
format: format,
|
||||
channels: channels,
|
||||
samples: samples,
|
||||
align: align,
|
||||
|
||||
buffer: ptr::null_mut(),
|
||||
size: 0,
|
||||
};
|
||||
|
||||
av_samples_alloc_array_and_samples(&mut buf.buffer, &mut buf.size,
|
||||
channels as c_int, samples as c_int,
|
||||
format.into(), !align as c_int);
|
||||
|
||||
buf
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Index<usize> for Buffer {
|
||||
type Output = [u8];
|
||||
|
||||
fn index(&self, index: usize) -> &[u8] {
|
||||
if index >= self.samples {
|
||||
panic!("out of bounds");
|
||||
}
|
||||
|
||||
unsafe {
|
||||
slice::from_raw_parts(*self.buffer.offset(index as isize), self.size as usize)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Clone for Buffer {
|
||||
fn clone(&self) -> Self {
|
||||
let mut buf = Buffer::new(self.format, self.channels, self.samples, self.align);
|
||||
buf.clone_from(self);
|
||||
|
||||
buf
|
||||
}
|
||||
|
||||
fn clone_from(&mut self, source: &Self) {
|
||||
unsafe {
|
||||
av_samples_copy(self.buffer, mem::transmute(source.buffer), 0, 0, source.samples as c_int, source.channels as c_int, source.format.into());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for Buffer {
|
||||
fn drop(&mut self) {
|
||||
unsafe {
|
||||
av_freep(mem::transmute(self.buffer));
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user