FFmpeg結構體:AVInputFormat

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);//釋放設備能力子模塊。
相關文章
相關標籤/搜索