FFMpeg--AVInputFormat

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;

/**
 * 原始解码器在这里存储他们的编解码器ID
 * 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;

/**
 * 猜测格式,确定是否支持文件格式解析。这个缓存的大小一般为AVPROBE_PADDING_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 *);

/**
 * 读取格式头信息并初始化AVFormatContext结构体。成功返回0创建新的streams时使用avformat_new_stream函数
 * 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 *);

/**
 * 去一个数据包数据填入pkt,pts和flags也会被设置。只有在调用线程(不是后台线程)中使用AVFMTCTX_NOHEADER才会调用avformat_new_stream。
 * 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
 * 操作成功时返回0,否者出错返回负数。当执行出错后,pkt可能没有分配到空间或者在执行返回之前数据被已经被释放
 */
int (*read_packet)(struct AVFormatContext *, AVPacket *pkt);

/**
 * 关闭流,该函数不会释放掉AVFormatContext和AVStreams
 * Close the stream. The AVFormatContext and AVStreams are not
 * freed by this function
 */
int (*read_close)(struct AVFormatContext *);

/**
 * 读取stream[stream_index]中帧数据的时间戳
 * Seek to a given timestamp relative to the frames in
 * stream component stream_index.
 * @param stream_index Must not be -1. stream_index为-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);

/**
 * 以stream [stream_index] .time_base为单位获取下一个时间戳。
 * 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 *);

/**
 * 根据时间戳ts查询读取
 * 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值