package com.nativelibs4java.ffmpeg.avformat;
import com.nativelibs4java.ffmpeg.avcodec.AVPacket;
import com.nativelibs4java.ffmpeg.avcodec.AvcodecLibrary.CodecID;
import com.nativelibs4java.ffmpeg.avformat.AvformatLibrary.AVCodecTag;
import com.nativelibs4java.ffmpeg.avformat.AvformatLibrary.AVMetadataConv;
import org.bridj.Callback;
import org.bridj.Pointer;
import org.bridj.StructObject;
import org.bridj.ValuedEnum;
import org.bridj.ann.Field;
import org.bridj.ann.Library;
/**
 * <i>native declaration : libavformat/avformat.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("avformat") 
public class AVOutputFormat extends StructObject {
	public AVOutputFormat() {
		super();
	}
	public AVOutputFormat(Pointer pointer) {
		super(pointer);
	}
	/// C type : const char*
	@Field(0) 
	public Pointer<Byte > name() {
		return this.io.getPointerField(this, 0);
	}
	/// C type : const char*
	@Field(0) 
	public AVOutputFormat 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;
	}
	/**
	 * Descriptive name for the format, meant to be more human-readable<br>
	 * than name. You should use the NULL_IF_CONFIG_SMALL() macro<br>
	 * to define it.<br>
	 * C type : const char*
	 */
	@Field(1) 
	public Pointer<Byte > long_name() {
		return this.io.getPointerField(this, 1);
	}
	/**
	 * Descriptive name for the format, meant to be more human-readable<br>
	 * than name. You should use the NULL_IF_CONFIG_SMALL() macro<br>
	 * to define it.<br>
	 * C type : const char*
	 */
	@Field(1) 
	public AVOutputFormat long_name(Pointer<Byte > long_name) {
		this.io.setPointerField(this, 1, 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;
	}
	/// C type : const char*
	@Field(2) 
	public Pointer<Byte > mime_type() {
		return this.io.getPointerField(this, 2);
	}
	/// C type : const char*
	@Field(2) 
	public AVOutputFormat mime_type(Pointer<Byte > mime_type) {
		this.io.setPointerField(this, 2, mime_type);
		return this;
	}
	/// C type : const char*
	public final Pointer<Byte > mime_type_$eq(Pointer<Byte > mime_type) {
		mime_type(mime_type);
		return mime_type;
	}
	/**
	 * < comma-separated filename extensions<br>
	 * C type : const char*
	 */
	@Field(3) 
	public Pointer<Byte > extensions() {
		return this.io.getPointerField(this, 3);
	}
	/**
	 * < comma-separated filename extensions<br>
	 * C type : const char*
	 */
	@Field(3) 
	public AVOutputFormat extensions(Pointer<Byte > extensions) {
		this.io.setPointerField(this, 3, extensions);
		return this;
	}
	/// C type : const char*
	public final Pointer<Byte > extensions_$eq(Pointer<Byte > extensions) {
		extensions(extensions);
		return extensions;
	}
	/// size of private data so that it can be allocated in the wrapper
	@Field(4) 
	public int priv_data_size() {
		return this.io.getIntField(this, 4);
	}
	/// size of private data so that it can be allocated in the wrapper
	@Field(4) 
	public AVOutputFormat priv_data_size(int priv_data_size) {
		this.io.setIntField(this, 4, 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;
	}
	/**
	 * output support<br>
	 * < default audio codec<br>
	 * C type : CodecID
	 */
	@Field(5) 
	public ValuedEnum<CodecID > audio_codec() {
		return this.io.getEnumField(this, 5);
	}
	/**
	 * output support<br>
	 * < default audio codec<br>
	 * C type : CodecID
	 */
	@Field(5) 
	public AVOutputFormat audio_codec(ValuedEnum<CodecID > audio_codec) {
		this.io.setEnumField(this, 5, audio_codec);
		return this;
	}
	/// C type : CodecID
	public final ValuedEnum<CodecID > audio_codec_$eq(ValuedEnum<CodecID > audio_codec) {
		audio_codec(audio_codec);
		return audio_codec;
	}
	/**
	 * < default video codec<br>
	 * C type : CodecID
	 */
	@Field(6) 
	public ValuedEnum<CodecID > video_codec() {
		return this.io.getEnumField(this, 6);
	}
	/**
	 * < default video codec<br>
	 * C type : CodecID
	 */
	@Field(6) 
	public AVOutputFormat video_codec(ValuedEnum<CodecID > video_codec) {
		this.io.setEnumField(this, 6, video_codec);
		return this;
	}
	/// C type : CodecID
	public final ValuedEnum<CodecID > video_codec_$eq(ValuedEnum<CodecID > video_codec) {
		video_codec(video_codec);
		return video_codec;
	}
	/// C type : write_header_callback
	@Field(7) 
	public Pointer<AVOutputFormat.write_header_callback > write_header() {
		return this.io.getPointerField(this, 7);
	}
	/// C type : write_header_callback
	@Field(7) 
	public AVOutputFormat write_header(Pointer<AVOutputFormat.write_header_callback > write_header) {
		this.io.setPointerField(this, 7, write_header);
		return this;
	}
	/// C type : write_header_callback
	public final Pointer<AVOutputFormat.write_header_callback > write_header_$eq(Pointer<AVOutputFormat.write_header_callback > write_header) {
		write_header(write_header);
		return write_header;
	}
	/// C type : write_packet_callback
	@Field(8) 
	public Pointer<AVOutputFormat.write_packet_callback > write_packet() {
		return this.io.getPointerField(this, 8);
	}
	/// C type : write_packet_callback
	@Field(8) 
	public AVOutputFormat write_packet(Pointer<AVOutputFormat.write_packet_callback > write_packet) {
		this.io.setPointerField(this, 8, write_packet);
		return this;
	}
	/// C type : write_packet_callback
	public final Pointer<AVOutputFormat.write_packet_callback > write_packet_$eq(Pointer<AVOutputFormat.write_packet_callback > write_packet) {
		write_packet(write_packet);
		return write_packet;
	}
	/// C type : write_trailer_callback
	@Field(9) 
	public Pointer<AVOutputFormat.write_trailer_callback > write_trailer() {
		return this.io.getPointerField(this, 9);
	}
	/// C type : write_trailer_callback
	@Field(9) 
	public AVOutputFormat write_trailer(Pointer<AVOutputFormat.write_trailer_callback > write_trailer) {
		this.io.setPointerField(this, 9, write_trailer);
		return this;
	}
	/// C type : write_trailer_callback
	public final Pointer<AVOutputFormat.write_trailer_callback > write_trailer_$eq(Pointer<AVOutputFormat.write_trailer_callback > write_trailer) {
		write_trailer(write_trailer);
		return write_trailer;
	}
	/// can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_GLOBALHEADER
	@Field(10) 
	public int flags() {
		return this.io.getIntField(this, 10);
	}
	/// can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_GLOBALHEADER
	@Field(10) 
	public AVOutputFormat flags(int flags) {
		this.io.setIntField(this, 10, flags);
		return this;
	}
	public final int flags_$eq(int flags) {
		flags(flags);
		return flags;
	}
	/**
	 * Currently only used to set pixel format if not YUV420P.<br>
	 * C type : set_parameters_callback
	 */
	@Field(11) 
	public Pointer<AVOutputFormat.set_parameters_callback > set_parameters() {
		return this.io.getPointerField(this, 11);
	}
	/**
	 * Currently only used to set pixel format if not YUV420P.<br>
	 * C type : set_parameters_callback
	 */
	@Field(11) 
	public AVOutputFormat set_parameters(Pointer<AVOutputFormat.set_parameters_callback > set_parameters) {
		this.io.setPointerField(this, 11, set_parameters);
		return this;
	}
	/// C type : set_parameters_callback
	public final Pointer<AVOutputFormat.set_parameters_callback > set_parameters_$eq(Pointer<AVOutputFormat.set_parameters_callback > set_parameters) {
		set_parameters(set_parameters);
		return set_parameters;
	}
	/// C type : interleave_packet_callback
	@Field(12) 
	public Pointer<AVOutputFormat.interleave_packet_callback > interleave_packet() {
		return this.io.getPointerField(this, 12);
	}
	/// C type : interleave_packet_callback
	@Field(12) 
	public AVOutputFormat interleave_packet(Pointer<AVOutputFormat.interleave_packet_callback > interleave_packet) {
		this.io.setPointerField(this, 12, interleave_packet);
		return this;
	}
	/// C type : interleave_packet_callback
	public final Pointer<AVOutputFormat.interleave_packet_callback > interleave_packet_$eq(Pointer<AVOutputFormat.interleave_packet_callback > interleave_packet) {
		interleave_packet(interleave_packet);
		return interleave_packet;
	}
	/**
	 * List of supported codec_id-codec_tag pairs, ordered by "better<br>
	 * choice first". The arrays are all terminated by CODEC_ID_NONE.<br>
	 * C type : AVCodecTag**
	 */
	@Field(13) 
	public Pointer<Pointer<AVCodecTag > > codec_tag() {
		return this.io.getPointerField(this, 13);
	}
	/**
	 * List of supported codec_id-codec_tag pairs, ordered by "better<br>
	 * choice first". The arrays are all terminated by CODEC_ID_NONE.<br>
	 * C type : AVCodecTag**
	 */
	@Field(13) 
	public AVOutputFormat codec_tag(Pointer<Pointer<AVCodecTag > > codec_tag) {
		this.io.setPointerField(this, 13, codec_tag);
		return this;
	}
	/// C type : AVCodecTag**
	public final Pointer<Pointer<AVCodecTag > > codec_tag_$eq(Pointer<Pointer<AVCodecTag > > codec_tag) {
		codec_tag(codec_tag);
		return codec_tag;
	}
	/**
	 * < default subtitle codec<br>
	 * C type : CodecID
	 */
	@Field(14) 
	public ValuedEnum<CodecID > subtitle_codec() {
		return this.io.getEnumField(this, 14);
	}
	/**
	 * < default subtitle codec<br>
	 * C type : CodecID
	 */
	@Field(14) 
	public AVOutputFormat subtitle_codec(ValuedEnum<CodecID > subtitle_codec) {
		this.io.setEnumField(this, 14, subtitle_codec);
		return this;
	}
	/// C type : CodecID
	public final ValuedEnum<CodecID > subtitle_codec_$eq(ValuedEnum<CodecID > subtitle_codec) {
		subtitle_codec(subtitle_codec);
		return subtitle_codec;
	}
	/// C type : const AVMetadataConv*
	@Field(15) 
	public Pointer<AVMetadataConv > metadata_conv() {
		return this.io.getPointerField(this, 15);
	}
	/// C type : const AVMetadataConv*
	@Field(15) 
	public AVOutputFormat metadata_conv(Pointer<AVMetadataConv > metadata_conv) {
		this.io.setPointerField(this, 15, metadata_conv);
		return this;
	}
	/// C type : const AVMetadataConv*
	public final Pointer<AVMetadataConv > metadata_conv_$eq(Pointer<AVMetadataConv > metadata_conv) {
		metadata_conv(metadata_conv);
		return metadata_conv;
	}
	/**
	 * < AVClass for the private context<br>
	 * C type : const AVClass*
	 */
	@Field(16) 
	public Pointer<? > priv_class() {
		return this.io.getPointerField(this, 16);
	}
	/**
	 * < AVClass for the private context<br>
	 * C type : const AVClass*
	 */
	@Field(16) 
	public AVOutputFormat priv_class(Pointer<? > priv_class) {
		this.io.setPointerField(this, 16, priv_class);
		return this;
	}
	/// C type : const AVClass*
	public final Pointer<? > priv_class_$eq(Pointer<? > priv_class) {
		priv_class(priv_class);
		return priv_class;
	}
	/**
	 * private fields<br>
	 * C type : AVOutputFormat*
	 */
	@Field(17) 
	public Pointer<AVOutputFormat > next() {
		return this.io.getPointerField(this, 17);
	}
	/**
	 * private fields<br>
	 * C type : AVOutputFormat*
	 */
	@Field(17) 
	public AVOutputFormat next(Pointer<AVOutputFormat > next) {
		this.io.setPointerField(this, 17, next);
		return this;
	}
	/// C type : AVOutputFormat*
	public final Pointer<AVOutputFormat > next_$eq(Pointer<AVOutputFormat > next) {
		next(next);
		return next;
	}
	/// <i>native declaration : libavformat/avformat.h</i>
	public static abstract class write_header_callback extends Callback<write_header_callback > {
		public abstract int apply(Pointer<AVFormatContext > AVFormatContextPtr1);
	};
	/// <i>native declaration : libavformat/avformat.h</i>
	public static abstract class write_packet_callback extends Callback<write_packet_callback > {
		public abstract int apply(Pointer<AVFormatContext > AVFormatContextPtr1, Pointer<AVPacket > pkt);
	};
	/// <i>native declaration : libavformat/avformat.h</i>
	public static abstract class write_trailer_callback extends Callback<write_trailer_callback > {
		public abstract int apply(Pointer<AVFormatContext > AVFormatContextPtr1);
	};
	/// <i>native declaration : libavformat/avformat.h</i>
	public static abstract class set_parameters_callback extends Callback<set_parameters_callback > {
		public abstract int apply(Pointer<AVFormatContext > AVFormatContextPtr1, Pointer<AVFormatParameters > AVFormatParametersPtr1);
	};
	/// <i>native declaration : libavformat/avformat.h</i>
	public static abstract class interleave_packet_callback extends Callback<interleave_packet_callback > {
		public abstract int apply(Pointer<AVFormatContext > AVFormatContextPtr1, Pointer<AVPacket > out, Pointer<AVPacket > in, int flush);
	};
}
