avcodec: add bindings

This commit is contained in:
meh
2023-05-24 21:49:22 +02:00
committed by Till Höppner
parent 97ac8e5fec
commit 0021888363
11 changed files with 1683 additions and 1 deletions
File diff suppressed because it is too large Load Diff
+33
View File
@@ -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;
}
+15
View File
@@ -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,
}
+56
View File
@@ -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);
}
+37
View File
@@ -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::*;
+15
View File
@@ -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;
}
+21
View File
@@ -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,
}
+34
View File
@@ -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);
}
+16
View File
@@ -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);
}
+23
View File
@@ -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
View File
@@ -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::*;