AVInputFormat结构体源码介绍

来源:互联网 发布:获取网站整站源码工具 编辑:程序博客网 时间:2024/05/29 17:14
本文对AVInputFormat结构体源码进行了简单介绍
typedef struct AVInputFormat {    /**     * 格式名列表.也可以分配一个新名字.     */    const char *name;    /**     * 对格式的一个描述性名字,增加可读性.     */    const char *long_name;    /**     * 可用的flag有: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS,     * AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH,     * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS.     */    int flags;    /**     * 如果定义了extention那么就不会再检测了,通常不定义,因为定义的不靠谱     */    const char *extensions;    const struct AVCodecTag * const *codec_tag;    const AVClass *priv_class; ///< AVClass for the private context    /**     * 一个模拟类型列表.用来在probe的时候check匹配的类型     * @see av_probe_input_format2     */    const char *mime_type;    /*****************************************************************     * No fields below this line are 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.     *****************************************************************     */    struct AVInputFormat *next;    /**     * Raw demuxers store their codec ID here.     */    int raw_codec_id;    /**     * Size of private data so that it can be allocated in the wrapper.     */    int priv_data_size;    /**     * tell一个文件是否可以按照这个格式来解析.     * 就是保证提供的buffer够大.     */    int (*read_probe)(AVProbeData *);    /**     * read格式头信息,initialize the AVFormatContext     * structure. Return 0 if OK. 'avformat_new_stream' should be     * called to create new streams.     */    int (*read_header)(struct AVFormatContext *);    /**     * 读一个packet放入pkt. pts and flags are also     * set. 'avformat_new_stream' can be called only if the flag     * AVFMTCTX_NOHEADER is used and only in the calling thread (not in a     * background thread).     * @return 0 on success, < 0 on error.     *         When returning an error, pkt must not have been allocated     *         or must be freed before returning     */    int (*read_packet)(struct AVFormatContext *, AVPacket *pkt);    /**     * Close the stream. The AVFormatContext and AVStreams are not     * freed by this function     */    int (*read_close)(struct AVFormatContext *);    /**     * seek到一个给定的时间戳相对于stream_index的frames     * @param stream_index Must not be -1.     * @param flags Selects which direction should be preferred if no exact     *              match is available.     * @return >= 0 on success (but not necessarily the new offset)     */    int (*read_seek)(struct AVFormatContext *,                     int stream_index, int64_t timestamp, int flags);    /**     * 得到下一个时间戳in stream[stream_index].time_base units.     * @return the timestamp or AV_NOPTS_VALUE if an error occurred     */    int64_t (*read_timestamp)(struct AVFormatContext *s, int stream_index,                              int64_t *pos, int64_t pos_limit);    /**     * Start/resume playing - only meaningful if using a network-based format     * (RTSP).     */    int (*read_play)(struct AVFormatContext *);    /**     * Pause playing - only meaningful if using a network-based format     * (RTSP).     */    int (*read_pause)(struct AVFormatContext *);    /**     * Seek to timestamp ts.     * Seeking will be done so that the point from which all active streams     * can be presented successfully will be closest to ts and within min/max_ts.     * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL.     */    int (*read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags);    /**     * Returns device list with it properties.     * @see avdevice_list_devices() for more details.     */    int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list);    /**     * Initialize device capabilities submodule(子模块).     * @see avdevice_capabilities_create() for more details.     */    int (*create_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps);    /**     * Free device capabilities submodule.     * @see avdevice_capabilities_free() for more details.     */    int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps);} AVInputFormat;

0 0