mirror of
https://github.com/encounter/rust-ffmpeg.git
synced 2026-07-10 21:18:39 -07:00
avcodec: add bindings
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,33 @@
|
||||
use libc::{c_int, c_uint, uint8_t};
|
||||
use super::super::avutil::*;
|
||||
|
||||
pub const DV_PROFILE_BYTES: c_int = 6 * 80;
|
||||
|
||||
#[derive(Debug)]
|
||||
#[repr(C)]
|
||||
pub struct AVDVProfile {
|
||||
pub dsf: c_int,
|
||||
pub video_type: c_int,
|
||||
pub frame_size: c_int,
|
||||
pub difseg_size: c_int,
|
||||
pub n_difchan: c_int,
|
||||
pub time_base: AVRational,
|
||||
pub ltc_divisor: c_int,
|
||||
pub height: c_int,
|
||||
pub width: c_int,
|
||||
pub sar: [AVRational; 2],
|
||||
pub pix_fmt: AVPixelFormat,
|
||||
pub bpm: c_int,
|
||||
pub block_sizes: *const uint8_t,
|
||||
pub audio_stride: c_int,
|
||||
pub audio_min_samples: [c_int; 3],
|
||||
pub audio_samples_dist: [c_int; 5],
|
||||
pub audio_shuffle: [*const uint8_t; 9],
|
||||
}
|
||||
|
||||
#[link(name = "avcodec")]
|
||||
extern {
|
||||
pub fn av_dv_frame_profile(sys: *const AVDVProfile, frame: *const uint8_t, buf_size: c_uint) -> *const AVDVProfile;
|
||||
pub fn av_dv_codec_profile(width: c_int, height: c_int, pix_fmt: AVPixelFormat) -> *const AVDVProfile;
|
||||
pub fn av_dv_codec_profile2(width: c_int, height: c_int, pix_fmt: AVPixelFormat, frame_rate: AVRational) -> AVDVProfile;
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
use libc::{c_void, c_uint, uint64_t};
|
||||
|
||||
pub const FF_DXVA2_WORKAROUND_SCALING_LIST_ZIGZAG: uint64_t = 1;
|
||||
pub const FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO: uint64_t = 2;
|
||||
|
||||
#[derive(Debug)]
|
||||
#[repr(C)]
|
||||
pub struct dxva_context {
|
||||
pub decoder: *mut c_void,
|
||||
pub cfg: *const c_void,
|
||||
pub surface_count: c_uint,
|
||||
pub surface: *mut c_void,
|
||||
pub workaround: uint64_t,
|
||||
pub report_id: c_uint,
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
use libc::{c_void, c_int, c_float, c_double};
|
||||
|
||||
pub type FFTSample = c_float;
|
||||
|
||||
#[derive(Debug)]
|
||||
#[repr(C)]
|
||||
pub struct FFTComplex {
|
||||
re: FFTSample,
|
||||
im: FFTSample,
|
||||
}
|
||||
|
||||
pub type FFTContext = c_void;
|
||||
|
||||
#[derive(Eq, PartialEq, Debug)]
|
||||
#[repr(C)]
|
||||
pub enum RDFTransformType {
|
||||
DFT_R2C,
|
||||
IDFT_C2R,
|
||||
IDFT_R2C,
|
||||
DFT_C2R,
|
||||
}
|
||||
|
||||
pub type RDFTContext = c_void;
|
||||
|
||||
#[derive(Eq, PartialEq, Debug)]
|
||||
#[repr(C)]
|
||||
pub enum DCTTransformType {
|
||||
DCT_II = 0,
|
||||
DCT_III,
|
||||
DCT_I,
|
||||
DST_I,
|
||||
}
|
||||
|
||||
pub type DCTContext = c_void;
|
||||
|
||||
#[link(name = "avcodec")]
|
||||
extern {
|
||||
pub fn av_fft_init(nbits: c_int, inverse: c_int) -> *mut FFTContext;
|
||||
pub fn av_fft_permute(s: *mut FFTContext, z: *mut FFTComplex);
|
||||
pub fn av_fft_calc(s: *mut FFTContext, z: *mut FFTComplex);
|
||||
pub fn av_fft_end(s: *mut FFTContext);
|
||||
|
||||
pub fn av_mdct_init(nbits: c_int, inverse: c_int, scale: c_double) -> *mut FFTContext;
|
||||
pub fn av_imdct_calc(s: *mut FFTContext, output: *mut FFTSample, input: *const FFTSample);
|
||||
pub fn av_imdct_half(s: *mut FFTContext, output: *mut FFTSample, input: *const FFTSample);
|
||||
pub fn av_mdct_calc(s: *mut FFTContext, output: *mut FFTSample, input: *const FFTSample);
|
||||
pub fn av_mdct_end(s: *mut FFTContext);
|
||||
|
||||
pub fn av_rdft_init(nbits: c_int, trans: RDFTransformType) -> *mut RDFTContext;
|
||||
pub fn av_rdft_calc(s: *mut RDFTContext, data: *mut FFTSample);
|
||||
pub fn av_rdft_end(s: *mut RDFTContext);
|
||||
|
||||
pub fn av_dct_init(nbits: c_int, kind: DCTTransformType) -> *mut DCTContext;
|
||||
pub fn av_dct_calc(s: *mut DCTContext, data: *mut FFTSample);
|
||||
pub fn av_dct_end(s: *mut DCTContext);
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
mod codec;
|
||||
pub use self::codec::*;
|
||||
pub use self::codec::AVCodecID::*;
|
||||
pub use self::codec::Motion_Est_ID::*;
|
||||
pub use self::codec::AVDiscard::*;
|
||||
pub use self::codec::AVAudioServiceType::*;
|
||||
pub use self::codec::AVPacketSideDataType::*;
|
||||
pub use self::codec::AVFieldOrder::*;
|
||||
pub use self::codec::AVSubtitleType::*;
|
||||
pub use self::codec::AVPictureStructure::*;
|
||||
pub use self::codec::AVLockOp::*;
|
||||
|
||||
mod fft;
|
||||
pub use self::fft::*;
|
||||
pub use self::fft::RDFTransformType::*;
|
||||
pub use self::fft::DCTTransformType::*;
|
||||
|
||||
mod dv_profile;
|
||||
pub use self::dv_profile::*;
|
||||
|
||||
mod dxva2;
|
||||
pub use self::dxva2::*;
|
||||
|
||||
mod qsv;
|
||||
pub use self::qsv::*;
|
||||
|
||||
mod vaapi;
|
||||
pub use self::vaapi::*;
|
||||
|
||||
mod vda;
|
||||
pub use self::vda::*;
|
||||
|
||||
mod vobis_parser;
|
||||
pub use self::vobis_parser::*;
|
||||
|
||||
mod xvmc;
|
||||
pub use self::xvmc::*;
|
||||
@@ -0,0 +1,15 @@
|
||||
use libc::{c_void, c_int};
|
||||
|
||||
#[derive(Debug)]
|
||||
#[repr(C)]
|
||||
pub struct AVQSVContext {
|
||||
pub session: *mut c_void,
|
||||
pub iopattern: c_int,
|
||||
pub ext_buffers: *mut *mut c_void,
|
||||
pub nb_ext_buffers: c_int,
|
||||
}
|
||||
|
||||
#[link(name = "avcodec")]
|
||||
extern {
|
||||
pub fn av_qsv_alloc_context() -> *mut AVQSVContext;
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
use libc::{c_void, c_uint, uint8_t, uint32_t};
|
||||
|
||||
#[derive(Debug)]
|
||||
#[repr(C)]
|
||||
pub struct vaapi_context {
|
||||
pub display: *mut c_void,
|
||||
pub config_id: uint32_t,
|
||||
pub context_id: uint32_t,
|
||||
pub pic_param_buf_id: uint32_t,
|
||||
pub iq_matrix_buf_id: uint32_t,
|
||||
pub bitplane_buf_id: uint32_t,
|
||||
pub slice_buf_ids: *mut uint32_t,
|
||||
pub n_slice_buf_ids: c_uint,
|
||||
pub slice_buf_ids_alloc: c_uint,
|
||||
pub slice_params: *mut c_void,
|
||||
pub slice_param_size: c_uint,
|
||||
pub slice_params_alloc: c_uint,
|
||||
pub slice_count: c_uint,
|
||||
pub slice_data: *const uint8_t,
|
||||
pub slice_data_size: uint32_t,
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
use libc::{c_void, c_int, uint8_t, uint32_t};
|
||||
use super::codec::AVCodecContext;
|
||||
|
||||
#[derive(Debug)]
|
||||
#[repr(C)]
|
||||
pub struct vda_context {
|
||||
pub decoder: *mut c_void,
|
||||
pub cv_buffer: *mut c_void,
|
||||
pub use_sync_decoding: c_int,
|
||||
pub width: c_int,
|
||||
pub height: c_int,
|
||||
pub format: c_int,
|
||||
pub cv_pix_fmt_type: i32,
|
||||
pub priv_bitstream: *mut uint8_t,
|
||||
pub priv_bitstream_size: c_int,
|
||||
pub priv_allocated_size: c_int,
|
||||
pub use_ref_buffer: c_int,
|
||||
}
|
||||
|
||||
#[repr(C)]
|
||||
pub struct AVVDAContext {
|
||||
pub decoder: *mut c_void,
|
||||
pub output_callback: extern fn(*mut c_void, *mut c_void, i32, uint32_t, *mut c_void),
|
||||
}
|
||||
|
||||
#[link(name = "avcodec")]
|
||||
extern {
|
||||
pub fn ff_vda_create_decoder(vda_ctx: *mut vda_context, extradata: *mut uint8_t, extradata_size: c_int) -> c_int;
|
||||
pub fn ff_vda_destroy_decoder(vda_ctx: *mut vda_context) -> c_int;
|
||||
|
||||
pub fn av_vda_alloc_context() -> *mut AVVDAContext;
|
||||
pub fn av_vda_default_init(avctx: *mut AVCodecContext) -> c_int;
|
||||
pub fn av_vda_default_free(avctx: *mut AVCodecContext);
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
use libc::{c_void, c_int, uint8_t};
|
||||
|
||||
pub type AVVorbisParseContext = c_void;
|
||||
|
||||
pub const VORBIS_FLAG_HEADER: c_int = 0x00000001;
|
||||
pub const VORBIS_FLAG_COMMENT: c_int = 0x00000002;
|
||||
pub const VORBIS_FLAG_SETUP: c_int = 0x00000004;
|
||||
|
||||
#[link(name = "avcodec")]
|
||||
extern {
|
||||
pub fn av_vorbis_parse_init(extradata: *const uint8_t, extradata_size: c_int) -> *mut AVVorbisParseContext;
|
||||
pub fn av_vorbis_parse_free(s: *mut *mut AVVorbisParseContext);
|
||||
pub fn av_vorbis_parse_frame_flags(s: *mut AVVorbisParseContext, buf: *const uint8_t, buf_size: c_int, flags: *mut c_int) -> c_int;
|
||||
pub fn av_vorbis_parse_frame(s: *mut AVVorbisParseContext, buf: *const uint8_t, buf_size: c_int) -> c_int;
|
||||
pub fn av_vorbis_parse_reset(s: *mut AVVorbisParseContext);
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
use libc::{c_void, c_short, c_int, c_uint};
|
||||
|
||||
pub const AV_XVMC_ID: c_int = 0x1DC711C0;
|
||||
|
||||
#[derive(Debug)]
|
||||
#[repr(C)]
|
||||
pub struct xvmc_pix_fmt {
|
||||
pub xvmc_id: c_int,
|
||||
pub data_blocks: *mut c_short,
|
||||
pub mv_blocks: *mut c_void,
|
||||
pub allocated_mv_blocks: c_int,
|
||||
pub allocated_data_blocks: c_int,
|
||||
pub idct: c_int,
|
||||
pub unsigned_intra: c_int,
|
||||
pub p_surface: *mut c_void,
|
||||
pub p_past_surface: *mut c_void,
|
||||
pub p_future_surface: *mut c_void,
|
||||
pub picture_structure: c_uint,
|
||||
pub flags: c_uint,
|
||||
pub start_mv_blocks_num: c_int,
|
||||
pub filled_mv_blocks_num: c_int,
|
||||
pub next_free_data_block_num: c_int,
|
||||
}
|
||||
+4
-1
@@ -1,8 +1,11 @@
|
||||
#![feature(libc)]
|
||||
#![allow(non_camel_case_types, raw_pointer_derive, non_snake_case)]
|
||||
#![allow(non_camel_case_types, raw_pointer_derive, non_snake_case, non_upper_case_globals)]
|
||||
|
||||
extern crate libc;
|
||||
|
||||
#[macro_use]
|
||||
mod avutil;
|
||||
pub use avutil::*;
|
||||
|
||||
mod avcodec;
|
||||
pub use avcodec::*;
|
||||
|
||||
Reference in New Issue
Block a user