ffmpeg数据结构-AVFormatContext
来源:互联网 发布:java编程实例及讲解 编辑:程序博客网 时间:2024/05/18 15:51
/** * Format I/O context. * New fields can be added to the end with minor version bumps. * Removal, reordering and changes to existing fields require a major * version bump. * sizeof(AVFormatContext) must not be used outside libav*, use * avformat_alloc_context() to create an AVFormatContext. */typedef struct AVFormatContext { /** * A class for logging and AVOptions. Set by avformat_alloc_context(). * Exports (de)muxer private options if they exist. */ const AVClass *av_class; /** * Can only be iformat or oformat, not both at the same time. * * decoding: set by avformat_open_input(). * encoding: set by the user. in和out只能选其一 */ struct AVInputFormat *iformat; struct AVOutputFormat *oformat; /** * Format private data. This is an AVOptions-enabled struct * if and only if iformat/oformat.priv_class is not NULL. */ void *priv_data; /** * I/O context. *输入输出上下问 * decoding: either set by the user before avformat_open_input() (then * 解码:既可以被设置在avformat_open_input()之前(当然用户必须关闭他随后) * the user must close it manually) or set by avformat_open_input(). * 或则可以被avformat_open_input()设置 * encoding: set by the user. *编码:设置被用户 * Do NOT set this field if AVFMT_NOFILE flag is set in * iformat/oformat.flags. In such a case, the (de)muxer will handle * I/O in some other way and this field will be NULL. */ AVIOContext *pb; /* stream info 流的信息 设置的值 见AVFMTCTX_NOHEADER 等*/ int ctx_flags; /**< Format-specific flags, see AVFMTCTX_xx */ /** * A list of all streams in the file. New streams are created with * avformat_new_stream(). *streams:一个列表 表示一个文件中所有的流 * * decoding: streams are created by libavformat in avformat_open_input(). * If AVFMTCTX_NOHEADER is set in ctx_flags, then new streams may also * appear in av_read_frame(). * encoding: streams are created by the user before avformat_write_header(). */ unsigned int nb_streams; AVStream **streams; char filename[1024]; /**< input or output filename */ /** * Decoding: position of the first frame of the component, in * AV_TIME_BASE fractional seconds. NEVER set this value directly: * It is deduced from the AVStream values. */ int64_t start_time; /** * Decoding: duration of the stream, in AV_TIME_BASE fractional * seconds. Only set this value if you know none of the individual stream * durations and also do not set any of them. This is deduced from the * AVStream values if not set. */ int64_t duration; /** * Decoding: total stream bitrate in bit/s, 0 if not * available. Never set it directly if the file_size and the * duration are known as FFmpeg can compute it automatically. */ int bit_rate; unsigned int packet_size; int max_delay; int flags;#define AVFMT_FLAG_GENPTS 0x0001 ///< Generate missing pts even if it requires parsing future frames.#define AVFMT_FLAG_IGNIDX 0x0002 ///< Ignore index.#define AVFMT_FLAG_NONBLOCK 0x0004 ///< Do not block when reading packets from input.#define AVFMT_FLAG_IGNDTS 0x0008 ///< Ignore DTS on frames that contain both DTS & PTS#define AVFMT_FLAG_NOFILLIN 0x0010 ///< Do not infer any values from other values, just return what is stored in the container#define AVFMT_FLAG_NOPARSE 0x0020 ///< Do not use AVParsers, you also must set AVFMT_FLAG_NOFILLIN as the fillin code works on frames and no parsing -> no frames. Also seeking to frames can not work if parsing to find frame boundaries has been disabled#define AVFMT_FLAG_NOBUFFER 0x0040 ///< Do not buffer frames when possible#define AVFMT_FLAG_CUSTOM_IO 0x0080 ///< The caller has supplied a custom AVIOContext, don't avio_close() it.#define AVFMT_FLAG_DISCARD_CORRUPT 0x0100 ///< Discard frames marked corrupted#define AVFMT_FLAG_FLUSH_PACKETS 0x0200 ///< Flush the AVIOContext every packet.#define AVFMT_FLAG_MP4A_LATM 0x8000 ///< Enable RTP MP4A-LATM payload#define AVFMT_FLAG_SORT_DTS 0x10000 ///< try to interleave outputted packets by dts (using this flag can slow demuxing down)#define AVFMT_FLAG_PRIV_OPT 0x20000 ///< Enable use of private options by delaying codec open (this could be made default once all code is converted)#define AVFMT_FLAG_KEEP_SIDE_DATA 0x40000 ///< Don't merge side data but keep it separate. /** * decoding: size of data to probe; encoding: unused. */ unsigned int probesize; /** * decoding: maximum time (in AV_TIME_BASE units) during which the input should * be analyzed in avformat_find_stream_info(). */ int max_analyze_duration; const uint8_t *key; int keylen; unsigned int nb_programs; AVProgram **programs; /** * Forced video codec_id. * Demuxing: Set by user. */ enum AVCodecID video_codec_id; /** * Forced audio codec_id. * Demuxing: Set by user. */ enum AVCodecID audio_codec_id; /** * Forced subtitle codec_id. * Demuxing: Set by user. */ enum AVCodecID subtitle_codec_id; /** * Maximum amount of memory in bytes to use for the index of each stream. * If the index exceeds this size, entries will be discarded as * needed to maintain a smaller size. This can lead to slower or less * accurate seeking (depends on demuxer). * Demuxers for which a full in-memory index is mandatory will ignore * this. * 要使用索引的每个流中的字节中的内存的最大数量。如果索引超过此大小,条目将被丢弃, * 因为需要保持较小的大小。这可以导致较慢或不太准确寻找 (取决于分离器)。 * 全部内存索引是强制性的 Demuxers 会忽视这一点。 * muxing : unused * demuxing: set by user */ unsigned int max_index_size; /** * Maximum amount of memory in bytes to use for buffering frames * obtained from realtime capture devices. */ unsigned int max_picture_buffer; /** * Number of chapters in AVChapter array. * When muxing, chapters are normally written in the file header, * so nb_chapters should normally be initialized before write_header * is called. Some muxers (e.g. mov and mkv) can also write chapters * in the trailer. To write chapters in the trailer, nb_chapters * must be zero when write_header is called and non-zero when * write_trailer is called. * muxing : set by user * demuxing: set by libavformat */ unsigned int nb_chapters; AVChapter **chapters; AVDictionary *metadata; /** * Start time of the stream in real world time, in microseconds * since the unix epoch (00:00 1st January 1970). That is, pts=0 * in the stream was captured at this real world time. * - encoding: Set by user. * - decoding: Unused. */ int64_t start_time_realtime; /** * decoding: number of frames used to probe fps */ int fps_probe_size; /** * Error recognition; higher values will detect more errors but may * misdetect some more or less valid parts as errors. * - encoding: unused * - decoding: Set by user. */ int error_recognition; /** * Custom interrupt callbacks for the I/O layer. * * decoding: set by the user before avformat_open_input(). * encoding: set by the user before avformat_write_header() * (mainly useful for AVFMT_NOFILE formats). The callback * should also be passed to avio_open2() if it's used to * open the file. */ AVIOInterruptCB interrupt_callback; /** * Flags to enable debugging. */ int debug;#define FF_FDEBUG_TS 0x0001 /** * Transport stream id. * This will be moved into demuxer private options. Thus no API/ABI compatibility */ int ts_id; /** * Audio preload in microseconds.微秒 * Note, not all formats support this and unpredictable things may happen if it is used when not supported. * - encoding: Set by user via AVOptions (NO direct access) * - decoding: unused */ int audio_preload; /** * Max chunk time in microseconds. * Note, not all formats support this and unpredictable things may happen if it is used when not supported. * - encoding: Set by user via AVOptions (NO direct access) * - decoding: unused */ int max_chunk_duration; /** * Max chunk size in bytes * Note, not all formats support this and unpredictable things may happen if it is used when not supported. * - encoding: Set by user via AVOptions (NO direct access) * - decoding: unused */ int max_chunk_size; /** * forces the use of wallclock timestamps as pts/dts of packets * This has undefined results in the presence of B frames. * - encoding: unused * - decoding: Set by user via AVOptions (NO direct access) */ int use_wallclock_as_timestamps; /** * Avoid negative timestamps during muxing. * 0 -> allow negative timestamps * 1 -> avoid negative timestamps * -1 -> choose automatically (default) * Note, this only works when interleave_packet_per_dts is in use. * - encoding: Set by user via AVOptions (NO direct access) * - decoding: unused */ int avoid_negative_ts; /** * avio flags, used to force AVIO_FLAG_DIRECT. * - encoding: unused * - decoding: Set by user via AVOptions (NO direct access) */ int avio_flags; /** * The duration field can be estimated through various ways, and this field can be used * to know how the duration was estimated. * - encoding: unused * - decoding: Read by user via AVOptions (NO direct access) */ enum AVDurationEstimationMethod duration_estimation_method; /** * Skip initial bytes when opening stream * - encoding: unused * - decoding: Set by user via AVOptions (NO direct access) */ unsigned int skip_initial_bytes; /** * Correct single timestamp overflows * - encoding: unused * - decoding: Set by user via AVOPtions (NO direct access) */ unsigned int correct_ts_overflow; /** * Force seeking to any (also non key) frames. * - encoding: unused * - decoding: Set by user via AVOPtions (NO direct access) */ int seek2any; /** * Flush the I/O context after each packet. * - encoding: Set by user via AVOptions (NO direct access) * - decoding: unused */ int flush_packets; /** * format probing score. * The maximal score is AVPROBE_SCORE_MAX, its set when the demuxer probes * the format. * - encoding: unused * - decoding: set by avformat, read by user via av_format_get_probe_score() (NO direct access) */ int probe_score; /***************************************************************** * All fields below this line are not part of the public API. They * may not be used outside of libavformat and can be changed and * removed at will. * New public fields should be added right above. ***************************************************************** */ /** * This buffer is only needed when packets were already buffered but * not decoded, for example to get the codec parameters in MPEG * streams. */ struct AVPacketList *packet_buffer; struct AVPacketList *packet_buffer_end; /* av_seek_frame() support */ int64_t data_offset; /**< offset of the first packet */ /** * Raw packets from the demuxer, prior to parsing and decoding. * This buffer is used for buffering packets until the codec can * be identified, as parsing cannot be done without knowing the * codec. */ struct AVPacketList *raw_packet_buffer; struct AVPacketList *raw_packet_buffer_end; /** * Packets split by the parser get queued here. */ struct AVPacketList *parse_queue; struct AVPacketList *parse_queue_end; /** * Remaining size available for raw_packet_buffer, in bytes. */#define RAW_PACKET_BUFFER_SIZE 2500000 int raw_packet_buffer_remaining_size; /** * 偏移量来重新映射为非负的时间戳。 * Offset to remap timestamps to be non-negative. * Expressed in timebase units. * @see AVStream.mux_ts_offset */ int64_t offset; /** * Timebase for the timestamp offset. */ AVRational offset_timebase; /** * IO repositioned flag. * This is set by avformat when the underlaying IO context read pointer * is repositioned, for example when doing byte based seeking. * Demuxers can use the flag to detect such changes. */ int io_repositioned; /** * Forced video codec. * This allows forcing a specific decoder, even when there are multiple with * the same codec_id. * Demuxing: Set by user via av_format_set_video_codec (NO direct access). */ AVCodec *video_codec; /** * Forced audio codec. * This allows forcing a specific decoder, even when there are multiple with * the same codec_id. * Demuxing: Set by user via av_format_set_audio_codec (NO direct access). */ AVCodec *audio_codec; /** * Forced subtitle codec. * This allows forcing a specific decoder, even when there are multiple with * the same codec_id. * Demuxing: Set by user via av_format_set_subtitle_codec (NO direct access). */ AVCodec *subtitle_codec;} AVFormatContext;
0 0
- ffmpeg数据结构-AVFormatContext
- FFMPEG-数据结构(AVCodecContext,AVStream,AVFormatContext)
- FFMPEG-数据结构解释(AVCodecContext,AVStream,AVFormatContext)
- FFMPEG-数据结构解释(AVCodecContext,AVStream,AVFormatContext)
- FFMPEG-数据结构解释(AVCodecContext,AVStream,AVFormatContext)
- FFMPEG-数据结构解释(AVCodecContext,AVStream,AVFormatContext)
- FFMPEG-数据结构解释(AVCodecContext,AVStream,AVFormatContext)
- AVCodecContext,AVStream,AVFormatContext----FFMPEG-数据结构解释
- FFMPEG-数据结构解释(AVCodecContext,AVStream,AVFormatContext)
- FFmpeg数据结构解释(AVCodecContext,AVStream,AVFormatContext)
- FFMPEG-数据结构解释(AVCodecContext,AVStream,AVFormatContext)
- FFMPEG-数据结构解释(AVCodecContext,AVStream,AVFormatContext)
- FFMPEG-数据结构解释(AVCodecContext,AVStream,AVFormatContext)
- FFMPEG-AVFormatContext结构详解
- FFmpeg之AVFormatContext
- FFmpeg中结构体AVFormatContext
- FFMPEG结构体分析:AVFormatContext
- FFMPEG结构体分析:AVFormatContext
- 移动游戏开发(二)
- c++ list
- 生命周期——fragement、Activity
- gravity与layout_gravity的区别
- zoj 1414
- ffmpeg数据结构-AVFormatContext
- 实习生,怎样才算优秀?
- 设计网页时IE6中10个不得不注意的问题
- 指针数组和数组指针的区别
- addToBackStack使用和Fragment执行流程
- 顺序表
- 实用的复选框操作——15分钟解决90%以上的javascript复选框操作
- 嵌入式Linux系统网络的配置
- shell实例浅谈之十二批量解压zip文件