package com.nativelibs4java.ffmpeg.avcodec;
import com.nativelibs4java.ffmpeg.avcodec.AvcodecLibrary.AVSampleFormat;
import com.nativelibs4java.ffmpeg.avutil.AVClass;
import com.nativelibs4java.ffmpeg.avutil.AVRational;
import com.nativelibs4java.ffmpeg.swscale.SwscaleLibrary.PixelFormat;
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 : libavcodec/avcodec.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.free.fr/">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("avcodec") 
public class AVCodec extends StructObject {
	public AVCodec() {
		super();
	}
	public AVCodec(Pointer pointer) {
		super(pointer);
	}
	/**
	 * Name of the codec implementation.<br>
	 * The name is globally unique among encoders and among decoders (but an<br>
	 * encoder and a decoder can share the same name).<br>
	 * This is the primary way to find a codec from the user perspective.<br>
	 * C type : const char*
	 */
	@Field(0) 
	public Pointer<Byte > name() {
		return this.io.getPointerField(this, 0);
	}
	/**
	 * Name of the codec implementation.<br>
	 * The name is globally unique among encoders and among decoders (but an<br>
	 * encoder and a decoder can share the same name).<br>
	 * This is the primary way to find a codec from the user perspective.<br>
	 * C type : const char*
	 */
	@Field(0) 
	public AVCodec 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;
	}
	@Field(3) 
	public int priv_data_size() {
		return this.io.getIntField(this, 3);
	}
	@Field(3) 
	public AVCodec priv_data_size(int priv_data_size) {
		this.io.setIntField(this, 3, priv_data_size);
		return this;
	}
	public final int priv_data_size_$eq(int priv_data_size) {
		priv_data_size(priv_data_size);
		return priv_data_size;
	}
	/// C type : init_callback
	@Field(4) 
	public Pointer<com.nativelibs4java.ffmpeg.avfilter.AVFilter.init_callback > init() {
		return this.io.getPointerField(this, 4);
	}
	/// C type : init_callback
	@Field(4) 
	public AVCodec init(Pointer<com.nativelibs4java.ffmpeg.avfilter.AVFilter.init_callback > init) {
		this.io.setPointerField(this, 4, init);
		return this;
	}
	/// C type : init_callback
	public final Pointer<com.nativelibs4java.ffmpeg.avfilter.AVFilter.init_callback > init_$eq(Pointer<com.nativelibs4java.ffmpeg.avfilter.AVFilter.init_callback > init) {
		init(init);
		return init;
	}
	/// C type : encode_callback
	@Field(5) 
	public Pointer<AVCodec.encode_callback > encode() {
		return this.io.getPointerField(this, 5);
	}
	/// C type : encode_callback
	@Field(5) 
	public AVCodec encode(Pointer<AVCodec.encode_callback > encode) {
		this.io.setPointerField(this, 5, encode);
		return this;
	}
	/// C type : encode_callback
	public final Pointer<AVCodec.encode_callback > encode_$eq(Pointer<AVCodec.encode_callback > encode) {
		encode(encode);
		return encode;
	}
	/// C type : close_callback
	@Field(6) 
	public Pointer<com.nativelibs4java.ffmpeg.avformat.RTPDynamicProtocolHandler_s.close_callback > close() {
		return this.io.getPointerField(this, 6);
	}
	/// C type : close_callback
	@Field(6) 
	public AVCodec close(Pointer<com.nativelibs4java.ffmpeg.avformat.RTPDynamicProtocolHandler_s.close_callback > close) {
		this.io.setPointerField(this, 6, close);
		return this;
	}
	/// C type : close_callback
	public final Pointer<com.nativelibs4java.ffmpeg.avformat.RTPDynamicProtocolHandler_s.close_callback > close_$eq(Pointer<com.nativelibs4java.ffmpeg.avformat.RTPDynamicProtocolHandler_s.close_callback > close) {
		close(close);
		return close;
	}
	/// C type : decode_callback
	@Field(7) 
	public Pointer<AVCodec.decode_callback > decode() {
		return this.io.getPointerField(this, 7);
	}
	/// C type : decode_callback
	@Field(7) 
	public AVCodec decode(Pointer<AVCodec.decode_callback > decode) {
		this.io.setPointerField(this, 7, decode);
		return this;
	}
	/// C type : decode_callback
	public final Pointer<AVCodec.decode_callback > decode_$eq(Pointer<AVCodec.decode_callback > decode) {
		decode(decode);
		return decode;
	}
	/**
	 * Codec capabilities.<br>
	 * see CODEC_CAP_*
	 */
	@Field(8) 
	public int capabilities() {
		return this.io.getIntField(this, 8);
	}
	/**
	 * Codec capabilities.<br>
	 * see CODEC_CAP_*
	 */
	@Field(8) 
	public AVCodec capabilities(int capabilities) {
		this.io.setIntField(this, 8, capabilities);
		return this;
	}
	public final int capabilities_$eq(int capabilities) {
		capabilities(capabilities);
		return capabilities;
	}
	/// C type : AVCodec*
	@Field(9) 
	public Pointer<AVCodec > next() {
		return this.io.getPointerField(this, 9);
	}
	/// C type : AVCodec*
	@Field(9) 
	public AVCodec next(Pointer<AVCodec > next) {
		this.io.setPointerField(this, 9, next);
		return this;
	}
	/// C type : AVCodec*
	public final Pointer<AVCodec > next_$eq(Pointer<AVCodec > next) {
		next(next);
		return next;
	}
	/**
	 * Flush buffers.<br>
	 * Will be called when seeking<br>
	 * C type : flush_callback
	 */
	@Field(10) 
	public Pointer<AVCodec.flush_callback > flush() {
		return this.io.getPointerField(this, 10);
	}
	/**
	 * Flush buffers.<br>
	 * Will be called when seeking<br>
	 * C type : flush_callback
	 */
	@Field(10) 
	public AVCodec flush(Pointer<AVCodec.flush_callback > flush) {
		this.io.setPointerField(this, 10, flush);
		return this;
	}
	/// C type : flush_callback
	public final Pointer<AVCodec.flush_callback > flush_$eq(Pointer<AVCodec.flush_callback > flush) {
		flush(flush);
		return flush;
	}
	/**
	 * < array of supported framerates, or NULL if any, array is terminated by {0,0}<br>
	 * C type : const AVRational*
	 */
	@Field(11) 
	public Pointer<AVRational > supported_framerates() {
		return this.io.getPointerField(this, 11);
	}
	/**
	 * < array of supported framerates, or NULL if any, array is terminated by {0,0}<br>
	 * C type : const AVRational*
	 */
	@Field(11) 
	public AVCodec supported_framerates(Pointer<AVRational > supported_framerates) {
		this.io.setPointerField(this, 11, supported_framerates);
		return this;
	}
	/// C type : const AVRational*
	public final Pointer<AVRational > supported_framerates_$eq(Pointer<AVRational > supported_framerates) {
		supported_framerates(supported_framerates);
		return supported_framerates;
	}
	/**
	 * < array of supported pixel formats, or NULL if unknown, array is terminated by -1<br>
	 * C type : PixelFormat*
	 */
	@Field(12) 
	public Pointer<PixelFormat > pix_fmts() {
		return this.io.getPointerField(this, 12);
	}
	/**
	 * < array of supported pixel formats, or NULL if unknown, array is terminated by -1<br>
	 * C type : PixelFormat*
	 */
	@Field(12) 
	public AVCodec pix_fmts(Pointer<PixelFormat > pix_fmts) {
		this.io.setPointerField(this, 12, pix_fmts);
		return this;
	}
	/// C type : PixelFormat*
	public final Pointer<PixelFormat > pix_fmts_$eq(Pointer<PixelFormat > pix_fmts) {
		pix_fmts(pix_fmts);
		return pix_fmts;
	}
	/**
	 * Descriptive name for the codec, meant to be more human readable than name.<br>
	 * You should use the NULL_IF_CONFIG_SMALL() macro to define it.<br>
	 * C type : const char*
	 */
	@Field(13) 
	public Pointer<Byte > long_name() {
		return this.io.getPointerField(this, 13);
	}
	/**
	 * Descriptive name for the codec, meant to be more human readable than name.<br>
	 * You should use the NULL_IF_CONFIG_SMALL() macro to define it.<br>
	 * C type : const char*
	 */
	@Field(13) 
	public AVCodec long_name(Pointer<Byte > long_name) {
		this.io.setPointerField(this, 13, long_name);
		return this;
	}
	/// C type : const char*
	public final Pointer<Byte > long_name_$eq(Pointer<Byte > long_name) {
		long_name(long_name);
		return long_name;
	}
	/**
	 * < array of supported audio samplerates, or NULL if unknown, array is terminated by 0<br>
	 * C type : const int*
	 */
	@Field(14) 
	public Pointer<Integer > supported_samplerates() {
		return this.io.getPointerField(this, 14);
	}
	/**
	 * < array of supported audio samplerates, or NULL if unknown, array is terminated by 0<br>
	 * C type : const int*
	 */
	@Field(14) 
	public AVCodec supported_samplerates(Pointer<Integer > supported_samplerates) {
		this.io.setPointerField(this, 14, supported_samplerates);
		return this;
	}
	/// C type : const int*
	public final Pointer<Integer > supported_samplerates_$eq(Pointer<Integer > supported_samplerates) {
		supported_samplerates(supported_samplerates);
		return supported_samplerates;
	}
	/**
	 * < array of supported sample formats, or NULL if unknown, array is terminated by -1<br>
	 * C type : AVSampleFormat*
	 */
	@Field(15) 
	public Pointer<AVSampleFormat > sample_fmts() {
		return this.io.getPointerField(this, 15);
	}
	/**
	 * < array of supported sample formats, or NULL if unknown, array is terminated by -1<br>
	 * C type : AVSampleFormat*
	 */
	@Field(15) 
	public AVCodec sample_fmts(Pointer<AVSampleFormat > sample_fmts) {
		this.io.setPointerField(this, 15, sample_fmts);
		return this;
	}
	/// C type : AVSampleFormat*
	public final Pointer<AVSampleFormat > sample_fmts_$eq(Pointer<AVSampleFormat > sample_fmts) {
		sample_fmts(sample_fmts);
		return sample_fmts;
	}
	/**
	 * < array of support channel layouts, or NULL if unknown. array is terminated by 0<br>
	 * C type : const int64_t*
	 */
	@Field(16) 
	public Pointer<Long > channel_layouts() {
		return this.io.getPointerField(this, 16);
	}
	/**
	 * < array of support channel layouts, or NULL if unknown. array is terminated by 0<br>
	 * C type : const int64_t*
	 */
	@Field(16) 
	public AVCodec channel_layouts(Pointer<Long > channel_layouts) {
		this.io.setPointerField(this, 16, channel_layouts);
		return this;
	}
	/// C type : const int64_t*
	public final Pointer<Long > channel_layouts_$eq(Pointer<Long > channel_layouts) {
		channel_layouts(channel_layouts);
		return channel_layouts;
	}
	/// < maximum value for lowres supported by the decoder
	@Field(17) 
	public byte max_lowres() {
		return this.io.getByteField(this, 17);
	}
	/// < maximum value for lowres supported by the decoder
	@Field(17) 
	public AVCodec max_lowres(byte max_lowres) {
		this.io.setByteField(this, 17, max_lowres);
		return this;
	}
	public final byte max_lowres_$eq(byte max_lowres) {
		max_lowres(max_lowres);
		return max_lowres;
	}
	/**
	 * < AVClass for the private context<br>
	 * C type : AVClass*
	 */
	@Field(18) 
	public Pointer<AVClass > priv_class() {
		return this.io.getPointerField(this, 18);
	}
	/**
	 * < AVClass for the private context<br>
	 * C type : AVClass*
	 */
	@Field(18) 
	public AVCodec priv_class(Pointer<AVClass > priv_class) {
		this.io.setPointerField(this, 18, priv_class);
		return this;
	}
	/// C type : AVClass*
	public final Pointer<AVClass > priv_class_$eq(Pointer<AVClass > priv_class) {
		priv_class(priv_class);
		return priv_class;
	}
	/**
	 * < array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN}<br>
	 * C type : const AVProfile*
	 */
	@Field(19) 
	public Pointer<AVProfile > profiles() {
		return this.io.getPointerField(this, 19);
	}
	/**
	 * < array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN}<br>
	 * C type : const AVProfile*
	 */
	@Field(19) 
	public AVCodec profiles(Pointer<AVProfile > profiles) {
		this.io.setPointerField(this, 19, profiles);
		return this;
	}
	/// C type : const AVProfile*
	public final Pointer<AVProfile > profiles_$eq(Pointer<AVProfile > profiles) {
		profiles(profiles);
		return profiles;
	}
	/// <i>native declaration : libavcodec/avcodec.h</i>
	public static abstract class init_callback extends Callback<init_callback > {
		public abstract int apply(Pointer<AVCodecContext > AVCodecContextPtr1);
	};
	/// <i>native declaration : libavcodec/avcodec.h</i>
	public static abstract class encode_callback extends Callback<encode_callback > {
		public abstract int apply(Pointer<AVCodecContext > AVCodecContextPtr1, Pointer<Byte > buf, int buf_size, Pointer<? > data);
	};
	/// <i>native declaration : libavcodec/avcodec.h</i>
	public static abstract class close_callback extends Callback<close_callback > {
		public abstract int apply(Pointer<AVCodecContext > AVCodecContextPtr1);
	};
	/// <i>native declaration : libavcodec/avcodec.h</i>
	public static abstract class decode_callback extends Callback<decode_callback > {
		public abstract int apply(Pointer<AVCodecContext > AVCodecContextPtr1, Pointer<? > outdata, Pointer<Integer > outdata_size, Pointer<AVPacket > avpkt);
	};
	/// <i>native declaration : libavcodec/avcodec.h</i>
	public static abstract class flush_callback extends Callback<flush_callback > {
		public abstract void apply(Pointer<AVCodecContext > AVCodecContextPtr1);
	};
}
