美文网首页
FFmpeg结构体:AVInputFormat

FFmpeg结构体:AVInputFormat

作者: YellowLayne | 来源:发表于2017-03-15 10:16 被阅读0次

    1.描述

    AVInputFormat 是类似COM 接口的数据结构,表示输入文件容器格式,着重于功能函数,一种文件容器格式对应一个AVInputFormat 结构,在程序运行时有多个实例,位于avoformat.h文件中。

    2.结构体定义

    typedef struct AVInputFormat {
        /**
         * A comma separated list of short names for the format. New names
         * may be appended with a minor bump.
         */
        const char *name;
    
        /**
         * Descriptive name for the format, meant to be more human-readable
         * than name. You should use the NULL_IF_CONFIG_SMALL() macro
         * to define it.
         */
        const char *long_name;
    
        /**
         * Can use flags: 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;
    
        /**
         * If extensions are defined, then no probe is done. You should
         * usually not use extension format guessing because it is not
         * reliable enough
         */
        const char *extensions;
    
        const struct AVCodecTag * const *codec_tag;
    
        const AVClass *priv_class; ///< AVClass for the private context
    
        /**
         * Comma-separated list of mime types.
         * It is used check for matching mime types while probing.
         * @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 if a given file has a chance of being parsed as this format.
         * The buffer provided is guaranteed to be AVPROBE_PADDING_SIZE bytes
         * big so you do not have to check for that unless you need more.
         */
        int (*read_probe)(AVProbeData *);
    
        /**
         * Read the format header and initialize the AVFormatContext
         * structure. Return 0 if OK. 'avformat_new_stream' should be
         * called to create new streams.
         */
        int (*read_header)(struct AVFormatContext *);
    
        /**
         * Used by format which open further nested input.
         */
        int (*read_header2)(struct AVFormatContext *, AVDictionary **options);
    
        /**
         * Read one packet and put it in '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 to a given timestamp relative to the frames in
         * stream component stream_index.
         * @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);
    
        /**
         * Get the next timestamp 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;
    

    3.常见变量及其作用

    const char *name;//格式名列表.也可以分配一个新名字。
    const char *long_name;//格式的描述性名称,意味着比名称更易于阅读。
    int flags;
    //可用的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.
    const char *extensions;//文件扩展名
    const AVClass *priv_class; //一个模拟类型列表.用来在probe的时候check匹配的类型。
    struct AVInputFormat *next;//用于把所有支持的输入文件容器格式连接成链表,便于遍历查找。
    int priv_data_size;//标示具体的文件容器格式对应的Context 的大小。
    int (*read_probe)(AVProbeData *);//判断一个给定的文件是否有可能被解析为这种格式。 给定的buf足够大,所以你没有必要去检查它,除非你需要更多 。
    int (*read_header)(struct AVFormatContext *);//读取format头并初始化AVFormatContext结构体,如果成功,返回0。创建新的流需要调用avformat_new_stream。
    int (*read_header2)(struct AVFormatContext *, AVDictionary **options);//新加的函数指针,用于打开进一步嵌套输入的格式。
    int (*read_packet)(struct AVFormatContext *, AVPacket *pkt);//读取一个数据包并将其放在“pkt”中。 pts和flag也被设置。
    int (*read_close)(struct AVFormatContext *);//关闭流。 AVFormatContext和Streams不会被此函数释放。
    int (*read_seek)(struct AVFormatContext *, int stream_index, int64_t timestamp, int flags);
    int64_t (*read_timestamp)(struct AVFormatContext *s, int stream_index, int64_t *pos, int64_t pos_limit);//获取stream [stream_index] .time_base单位中的下一个时间戳。
    int (*read_play)(struct AVFormatContext *);//开始/继续播放 - 仅当使用基于网络的(RTSP)格式时才有意义。
    int (*read_pause)(struct AVFormatContext *);//暂停播放 - 仅当使用基于网络的(RTSP)格式时才有意义。
    int (*read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags);//寻求时间戳ts。
    int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list);返回设备列表及其属性。
    int (*create_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps);//初始化设备能力子模块。
    int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps);//释放设备能力子模块。
    

    相关文章

      网友评论

          本文标题:FFmpeg结构体:AVInputFormat

          本文链接:https://www.haomeiwen.com/subject/hltlnttx.html