FFmpeg結(jié)構(gòu)體:AVInputFormat

1.描述

AVInputFormat 是類(lèi)似COM 接口的數(shù)據(jù)結(jié)構(gòu)冯事,表示輸入文件容器格式,著重于功能函數(shù)血公,一種文件容器格式對(duì)應(yīng)一個(gè)AVInputFormat 結(jié)構(gòu)昵仅,在程序運(yùn)行時(shí)有多個(gè)實(shí)例,位于avoformat.h文件中累魔。

2.結(jié)構(gòu)體定義

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.常見(jiàn)變量及其作用

const char *name;//格式名列表.也可以分配一個(gè)新名字摔笤。
const char *long_name;//格式的描述性名稱(chēng),意味著比名稱(chēng)更易于閱讀垦写。
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;//文件擴(kuò)展名
const AVClass *priv_class; //一個(gè)模擬類(lèi)型列表.用來(lái)在probe的時(shí)候check匹配的類(lèi)型籍茧。
struct AVInputFormat *next;//用于把所有支持的輸入文件容器格式連接成鏈表,便于遍歷查找梯澜。
int priv_data_size;//標(biāo)示具體的文件容器格式對(duì)應(yīng)的Context 的大小。
int (*read_probe)(AVProbeData *);//判斷一個(gè)給定的文件是否有可能被解析為這種格式渴析。 給定的buf足夠大晚伙,所以你沒(méi)有必要去檢查它,除非你需要更多 俭茧。
int (*read_header)(struct AVFormatContext *);//讀取format頭并初始化AVFormatContext結(jié)構(gòu)體咆疗,如果成功,返回0母债。創(chuàng)建新的流需要調(diào)用avformat_new_stream午磁。
int (*read_header2)(struct AVFormatContext *, AVDictionary **options);//新加的函數(shù)指針,用于打開(kāi)進(jìn)一步嵌套輸入的格式毡们。
int (*read_packet)(struct AVFormatContext *, AVPacket *pkt);//讀取一個(gè)數(shù)據(jù)包并將其放在“pkt”中迅皇。 pts和flag也被設(shè)置。
int (*read_close)(struct AVFormatContext *);//關(guān)閉流衙熔。 AVFormatContext和Streams不會(huì)被此函數(shù)釋放登颓。
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單位中的下一個(gè)時(shí)間戳。
int (*read_play)(struct AVFormatContext *);//開(kāi)始/繼續(xù)播放 - 僅當(dāng)使用基于網(wǎng)絡(luò)的(RTSP)格式時(shí)才有意義红氯。
int (*read_pause)(struct AVFormatContext *);//暫停播放 - 僅當(dāng)使用基于網(wǎng)絡(luò)的(RTSP)格式時(shí)才有意義框咙。
int (*read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags);//尋求時(shí)間戳ts咕痛。
int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list);返回設(shè)備列表及其屬性。
int (*create_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps);//初始化設(shè)備能力子模塊喇嘱。
int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps);//釋放設(shè)備能力子模塊茉贡。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市者铜,隨后出現(xiàn)的幾起案子腔丧,更是在濱河造成了極大的恐慌,老刑警劉巖王暗,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悔据,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡俗壹,警方通過(guò)查閱死者的電腦和手機(jī)科汗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)绷雏,“玉大人头滔,你說(shuō)我怎么就攤上這事∠严裕” “怎么了坤检?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)期吓。 經(jīng)常有香客問(wèn)我早歇,道長(zhǎng),這世上最難降的妖魔是什么讨勤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任箭跳,我火速辦了婚禮,結(jié)果婚禮上潭千,老公的妹妹穿的比我還像新娘谱姓。我一直安慰自己,他們只是感情好刨晴,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布屉来。 她就那樣靜靜地躺著,像睡著了一般狈癞。 火紅的嫁衣襯著肌膚如雪茄靠。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天蝶桶,我揣著相機(jī)與錄音嘹黔,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛儡蔓,可吹牛的內(nèi)容都是我干的郭蕉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼喂江,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼召锈!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起获询,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤涨岁,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后吉嚣,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體梢薪,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年尝哆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了秉撇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秋泄,死狀恐怖琐馆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情恒序,我是刑警寧澤瘦麸,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站歧胁,受9級(jí)特大地震影響滋饲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜喊巍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一了赌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧玄糟,春花似錦、人聲如沸袄秩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)之剧。三九已至郭卫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間背稼,已是汗流浹背贰军。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人词疼。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓俯树,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親贰盗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子许饿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容