From 3a3c090d618decc04c74bbd40d28733e1b5f05e7 Mon Sep 17 00:00:00 2001 From: meh Date: Thu, 14 May 2015 19:23:29 +0200 Subject: [PATCH] swscale: add bindings --- sys/src/lib.rs | 3 ++ sys/src/swscale/mod.rs | 2 + sys/src/swscale/scale.rs | 108 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 sys/src/swscale/mod.rs create mode 100644 sys/src/swscale/scale.rs diff --git a/sys/src/lib.rs b/sys/src/lib.rs index cf444ea..a427786 100644 --- a/sys/src/lib.rs +++ b/sys/src/lib.rs @@ -15,3 +15,6 @@ pub use avdevice::*; mod avformat; pub use avformat::*; + +mod swscale; +pub use swscale::*; diff --git a/sys/src/swscale/mod.rs b/sys/src/swscale/mod.rs new file mode 100644 index 0000000..db9607f --- /dev/null +++ b/sys/src/swscale/mod.rs @@ -0,0 +1,2 @@ +mod scale; +pub use self::scale::*; diff --git a/sys/src/swscale/scale.rs b/sys/src/swscale/scale.rs new file mode 100644 index 0000000..ef3f464 --- /dev/null +++ b/sys/src/swscale/scale.rs @@ -0,0 +1,108 @@ +use libc::{c_void, c_char, c_int, c_uint, c_float, c_double, uint8_t}; +use ::avutil::{AVPixelFormat, AVClass}; + +pub const SWS_FAST_BILINEAR: c_uint = 1; +pub const SWS_BILINEAR: c_uint = 2; +pub const SWS_BICUBIC: c_uint = 4; +pub const SWS_X: c_uint = 8; +pub const SWS_POINT: c_uint = 0x10; +pub const SWS_AREA: c_uint = 0x20; +pub const SWS_BICUBLIN: c_uint = 0x40; +pub const SWS_GAUSS: c_uint = 0x80; +pub const SWS_SINC: c_uint = 0x100; +pub const SWS_LANCZOS: c_uint = 0x200; +pub const SWS_SPLINE: c_uint = 0x400; +pub const SWS_SRC_V_CHR_DROP_MASK: c_uint = 0x30000; +pub const SWS_SRC_V_CHR_DROP_SHIFT: c_uint = 16; +pub const SWS_PARAM_DEFAULT: c_uint = 123456; +pub const SWS_PRINT_INFO: c_uint = 0x1000; +pub const SWS_FULL_CHR_H_INT: c_uint = 0x2000; +pub const SWS_FULL_CHR_H_INP: c_uint = 0x4000; +pub const SWS_DIRECT_BGR: c_uint = 0x8000; +pub const SWS_ACCURATE_RND: c_uint = 0x40000; +pub const SWS_BITEXACT: c_uint = 0x80000; +pub const SWS_ERROR_DIFFUSION: c_uint = 0x800000; + +pub const SWS_CPU_CAPS_MMX: c_uint = 0x80000000; +pub const SWS_CPU_CAPS_MMXEXT: c_uint = 0x20000000; +pub const SWS_CPU_CAPS_MMX2: c_uint = 0x20000000; +pub const SWS_CPU_CAPS_3DNOW: c_uint = 0x40000000; +pub const SWS_CPU_CAPS_ALTIVEC: c_uint = 0x10000000; +pub const SWS_CPU_CAPS_BFIN: c_uint = 0x01000000; +pub const SWS_CPU_CAPS_SSE2: c_uint = 0x02000000; + +pub const SWS_MAX_REDUCE_CUTOFF: c_float = 0.002; + +pub const SWS_CS_ITU709: c_int = 1; +pub const SWS_CS_FCC: c_int = 4; +pub const SWS_CS_ITU601: c_int = 5; +pub const SWS_CS_ITU624: c_int = 5; +pub const SWS_CS_SMPTE170M: c_int = 5; +pub const SWS_CS_SMPTE240M: c_int = 7; +pub const SWS_CS_DEFAULT: c_int = 5; + +#[derive(Debug)] +#[repr(C)] +pub struct SwsVector { + coeff: *mut c_double, + length: c_int, +} + +#[derive(Debug)] +#[repr(C)] +pub struct SwsFilter { + lumH: *mut SwsVector, + lumV: *mut SwsVector, + chrH: *mut SwsVector, + chrV: *mut SwsVector, +} + +pub type SwsContext = c_void; + +#[link(name = "swscale")] +extern { + pub fn swscale_version() -> c_uint; + pub fn swscale_configuration() -> *const c_char; + pub fn swscale_license() -> *const c_char; + + pub fn sws_getCoefficients(colorspace: c_int) -> *const c_int; + + pub fn sws_isSupportedInput(pix_fmt: AVPixelFormat) -> c_int; + pub fn sws_isSupportedOutput(pix_fmt: AVPixelFormat) -> c_int; + pub fn sws_isSupportedEndiannessConversion(pix_fmt: AVPixelFormat) -> c_int; + + pub fn sws_alloc_context() -> *mut SwsContext; + pub fn sws_init_context(sws_context: *mut SwsContext, srcFilter: *mut SwsFilter, dstFilter: *mut SwsFilter) -> c_int; + pub fn sws_freeContext(sws_context: *mut SwsContext); + pub fn sws_getContext(srcW: c_int, srcH: c_int, srcFormat: AVPixelFormat, dstW: c_int, dstH: c_int, dstFormat: AVPixelFormat, flags: c_int, srcFilter: *mut SwsFilter, dstFilter: *mut SwsFilter, param: *const c_double) -> *mut SwsContext; + + pub fn sws_scale(c: *mut SwsContext, srcSlice: *const *const uint8_t, srcStride: *const c_int, srcSliceY: c_int, srcSliceH: c_int, dst: *mut *mut uint8_t, dstStride: *mut *mut c_int) -> c_int; + + pub fn sws_setColorspaceDetails(c: *mut SwsContext, inv_table: *const *const c_int, srcRange: c_int, table: *const *const c_int, dstRange: c_int, brightness: c_int, contrast: c_int, saturation: c_int) -> c_int; + pub fn sws_getColorspaceDetails(c: *mut SwsContext, inv_table: *mut *mut c_int, srcRange: *mut c_int, table: *mut *mut c_int, dstRange: *mut c_int, brightness: *mut c_int, contrast: *mut c_int, saturation: *mut c_int) -> c_int; + + pub fn sws_allocVec(length: c_int) -> *mut SwsVector; + pub fn sws_getGaussianVec(variance: c_double, quality: c_double) -> *mut SwsVector; + pub fn sws_getConstVec(c: c_double, length: c_int) -> *mut SwsVector; + pub fn sws_getIdentityVec() -> *mut SwsVector; + + pub fn sws_scaleVec(a: *mut SwsVector, scalar: c_double); + pub fn sws_normalizeVec(a: *mut SwsVector, height: c_double); + pub fn sws_convVec(a: *mut SwsVector, b: *mut SwsVector); + pub fn sws_addVec(a: *mut SwsVector, b: *mut SwsVector); + pub fn sws_subVec(a: *mut SwsVector, b: *mut SwsVector); + pub fn sws_shiftVec(a: *mut SwsVector, shift: c_int); + + pub fn sws_cloneVec(a: *mut SwsVector) -> *mut SwsVector; + pub fn sws_printVec2(a: *mut SwsVector, log_ctx: *mut AVClass, log_level: c_int); + pub fn sws_freeVec(a: *mut SwsVector); + + pub fn sws_getDefaultFilter(lumaGBlur: c_float, chromaGBlur: c_float, lumaSharpen: c_float, chromaSharpen: c_float, chromaHShift: c_float, chromaVShift: c_float, verbose: c_int) -> *mut SwsFilter; + pub fn sws_freeFilter(filter: *mut SwsFilter); + + pub fn sws_getCachedContext(context: *mut SwsContext, srcW: c_int, srcH: c_int, srcFormat: AVPixelFormat, dstW: c_int, dstH: c_int, dstFormat: AVPixelFormat, flags: c_int, srcFilter: *mut SwsFilter, dstFilter: *mut SwsFilter, param: *const c_double) -> *mut SwsContext; + pub fn sws_convertPalette8ToPacked32(src: *const uint8_t, dst: *mut uint8_t, num_pixels: c_int, palette: *const uint8_t); + pub fn sws_convertPalette8ToPacked24(src: *const uint8_t, dst: *mut uint8_t, num_pixels: c_int, palette: *const uint8_t); + + pub fn sws_get_class() -> *const AVClass; +}