package com.nativelibs4java.ffmpeg.avfilter;
import org.bridj.Callback;
import org.bridj.Pointer;
import org.bridj.StructObject;
import org.bridj.ann.Field;
import org.bridj.ann.Library;
/**
 * <i>native declaration : libavfilter/avfilter.h</i><br>
 * This file was autogenerated by <a href="http://jnaerator.googlecode.com/">JNAerator</a>,<br>
 * a tool written by <a href="http://ochafik.com/">Olivier Chafik</a> that <a href="http://code.google.com/p/jnaerator/wiki/CreditsAndLicense">uses a few opensource projects.</a>.<br>
 * For help, please visit <a href="http://nativelibs4java.googlecode.com/">NativeLibs4Java</a> or <a href="http://bridj.googlecode.com/">BridJ</a> .
 */
@Library("avfilter") 
public class AVFilter extends StructObject {
	public AVFilter() {
		super();
	}
	public AVFilter(Pointer pointer) {
		super(pointer);
	}
	/**
	 * < filter name<br>
	 * C type : const char*
	 */
	@Field(0) 
	public Pointer<Byte > name() {
		return this.io.getPointerField(this, 0);
	}
	/**
	 * < filter name<br>
	 * C type : const char*
	 */
	@Field(0) 
	public AVFilter name(Pointer<Byte > name) {
		this.io.setPointerField(this, 0, name);
		return this;
	}
	/// C type : const char*
	public final Pointer<Byte > name_$eq(Pointer<Byte > name) {
		name(name);
		return name;
	}
	/// < size of private data to allocate for the filter
	@Field(1) 
	public int priv_size() {
		return this.io.getIntField(this, 1);
	}
	/// < size of private data to allocate for the filter
	@Field(1) 
	public AVFilter priv_size(int priv_size) {
		this.io.setIntField(this, 1, priv_size);
		return this;
	}
	public final int priv_size_$eq(int priv_size) {
		priv_size(priv_size);
		return priv_size;
	}
	/**
	 * Filter initialization function. Args contains the user-supplied<br>
	 * parameters. FIXME: maybe an AVOption-based system would be better?<br>
	 * opaque is data provided by the code requesting creation of the filter,<br>
	 * and is used to pass data to the filter.<br>
	 * C type : init_callback
	 */
	@Field(2) 
	public Pointer<AVFilter.init_callback > init() {
		return this.io.getPointerField(this, 2);
	}
	/**
	 * Filter initialization function. Args contains the user-supplied<br>
	 * parameters. FIXME: maybe an AVOption-based system would be better?<br>
	 * opaque is data provided by the code requesting creation of the filter,<br>
	 * and is used to pass data to the filter.<br>
	 * C type : init_callback
	 */
	@Field(2) 
	public AVFilter init(Pointer<AVFilter.init_callback > init) {
		this.io.setPointerField(this, 2, init);
		return this;
	}
	/// C type : init_callback
	public final Pointer<AVFilter.init_callback > init_$eq(Pointer<AVFilter.init_callback > init) {
		init(init);
		return init;
	}
	/**
	 * Filter uninitialization function. Should deallocate any memory held<br>
	 * by the filter, release any buffer references, etc. This does not need<br>
	 * to deallocate the AVFilterContext->priv memory itself.<br>
	 * C type : uninit_callback
	 */
	@Field(3) 
	public Pointer<AVFilter.uninit_callback > uninit() {
		return this.io.getPointerField(this, 3);
	}
	/**
	 * Filter uninitialization function. Should deallocate any memory held<br>
	 * by the filter, release any buffer references, etc. This does not need<br>
	 * to deallocate the AVFilterContext->priv memory itself.<br>
	 * C type : uninit_callback
	 */
	@Field(3) 
	public AVFilter uninit(Pointer<AVFilter.uninit_callback > uninit) {
		this.io.setPointerField(this, 3, uninit);
		return this;
	}
	/// C type : uninit_callback
	public final Pointer<AVFilter.uninit_callback > uninit_$eq(Pointer<AVFilter.uninit_callback > uninit) {
		uninit(uninit);
		return uninit;
	}
	/**
	 * Queries formats supported by the filter and its pads, and sets the<br>
	 * in_formats for links connected to its output pads, and out_formats<br>
	 * for links connected to its input pads.<br>
	 * * @return zero on success, a negative value corresponding to an<br>
	 * AVERROR code otherwise<br>
	 * C type : query_formats_callback
	 */
	@Field(4) 
	public Pointer<AVFilter.query_formats_callback > query_formats() {
		return this.io.getPointerField(this, 4);
	}
	/**
	 * Queries formats supported by the filter and its pads, and sets the<br>
	 * in_formats for links connected to its output pads, and out_formats<br>
	 * for links connected to its input pads.<br>
	 * * @return zero on success, a negative value corresponding to an<br>
	 * AVERROR code otherwise<br>
	 * C type : query_formats_callback
	 */
	@Field(4) 
	public AVFilter query_formats(Pointer<AVFilter.query_formats_callback > query_formats) {
		this.io.setPointerField(this, 4, query_formats);
		return this;
	}
	/// C type : query_formats_callback
	public final Pointer<AVFilter.query_formats_callback > query_formats_$eq(Pointer<AVFilter.query_formats_callback > query_formats) {
		query_formats(query_formats);
		return query_formats;
	}
	/**
	 * < NULL terminated list of inputs. NULL if none<br>
	 * C type : const AVFilterPad*
	 */
	@Field(5) 
	public Pointer<AVFilterPad > inputs() {
		return this.io.getPointerField(this, 5);
	}
	/**
	 * < NULL terminated list of inputs. NULL if none<br>
	 * C type : const AVFilterPad*
	 */
	@Field(5) 
	public AVFilter inputs(Pointer<AVFilterPad > inputs) {
		this.io.setPointerField(this, 5, inputs);
		return this;
	}
	/// C type : const AVFilterPad*
	public final Pointer<AVFilterPad > inputs_$eq(Pointer<AVFilterPad > inputs) {
		inputs(inputs);
		return inputs;
	}
	/**
	 * < NULL terminated list of outputs. NULL if none<br>
	 * C type : const AVFilterPad*
	 */
	@Field(6) 
	public Pointer<AVFilterPad > outputs() {
		return this.io.getPointerField(this, 6);
	}
	/**
	 * < NULL terminated list of outputs. NULL if none<br>
	 * C type : const AVFilterPad*
	 */
	@Field(6) 
	public AVFilter outputs(Pointer<AVFilterPad > outputs) {
		this.io.setPointerField(this, 6, outputs);
		return this;
	}
	/// C type : const AVFilterPad*
	public final Pointer<AVFilterPad > outputs_$eq(Pointer<AVFilterPad > outputs) {
		outputs(outputs);
		return outputs;
	}
	/**
	 * A description for the filter. You should use the<br>
	 * NULL_IF_CONFIG_SMALL() macro to define it.<br>
	 * C type : const char*
	 */
	@Field(7) 
	public Pointer<Byte > description() {
		return this.io.getPointerField(this, 7);
	}
	/**
	 * A description for the filter. You should use the<br>
	 * NULL_IF_CONFIG_SMALL() macro to define it.<br>
	 * C type : const char*
	 */
	@Field(7) 
	public AVFilter description(Pointer<Byte > description) {
		this.io.setPointerField(this, 7, description);
		return this;
	}
	/// C type : const char*
	public final Pointer<Byte > description_$eq(Pointer<Byte > description) {
		description(description);
		return description;
	}
	/// <i>native declaration : libavfilter/avfilter.h</i>
	public static abstract class init_callback extends Callback<init_callback > {
		public abstract int apply(Pointer<AVFilterContext > ctx, Pointer<Byte > args, Pointer<? > opaque);
	};
	/// <i>native declaration : libavfilter/avfilter.h</i>
	public static abstract class uninit_callback extends Callback<uninit_callback > {
		public abstract void apply(Pointer<AVFilterContext > ctx);
	};
	/// <i>native declaration : libavfilter/avfilter.h</i>
	public static abstract class query_formats_callback extends Callback<query_formats_callback > {
		public abstract int apply(Pointer<AVFilterContext > AVFilterContextPtr1);
	};
}
