首页 > 其他分享 >FFmpeg结构体:AVInputFormat

FFmpeg结构体:AVInputFormat

时间:2024-06-06 16:57:08浏览次数:20  
标签:AVFMT struct AVFormatContext int read AVInputFormat stream 结构 FFmpeg

1.描述

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

2.结构体定义

  1 typedef struct AVInputFormat {
  2     /**
  3      * A comma separated list of short names for the format. New names
  4      * may be appended with a minor bump.
  5      */
  6     const char *name;
  7 
  8     /**
  9      * Descriptive name for the format, meant to be more human-readable
 10      * than name. You should use the NULL_IF_CONFIG_SMALL() macro
 11      * to define it.
 12      */
 13     const char *long_name;
 14 
 15     /**
 16      * Can use flags: AVFMT_NOFILE, AVFMT_NEEDNUMBER, AVFMT_SHOW_IDS,
 17      * AVFMT_GENERIC_INDEX, AVFMT_TS_DISCONT, AVFMT_NOBINSEARCH,
 18      * AVFMT_NOGENSEARCH, AVFMT_NO_BYTE_SEEK, AVFMT_SEEK_TO_PTS.
 19      */
 20     int flags;
 21 
 22     /**
 23      * If extensions are defined, then no probe is done. You should
 24      * usually not use extension format guessing because it is not
 25      * reliable enough
 26      */
 27     const char *extensions;
 28 
 29     const struct AVCodecTag * const *codec_tag;
 30 
 31     const AVClass *priv_class; ///< AVClass for the private context
 32 
 33     /**
 34      * Comma-separated list of mime types.
 35      * It is used check for matching mime types while probing.
 36      * @see av_probe_input_format2
 37      */
 38     const char *mime_type;
 39 
 40     /*****************************************************************
 41      * No fields below this line are part of the public API. They
 42      * may not be used outside of libavformat and can be changed and
 43      * removed at will.
 44      * New public fields should be added right above.
 45      *****************************************************************
 46      */
 47     struct AVInputFormat *next;
 48 
 49     /**
 50      * Raw demuxers store their codec ID here.
 51      */
 52     int raw_codec_id;
 53 
 54     /**
 55      * Size of private data so that it can be allocated in the wrapper.
 56      */
 57     int priv_data_size;
 58 
 59     /**
 60      * Tell if a given file has a chance of being parsed as this format.
 61      * The buffer provided is guaranteed to be AVPROBE_PADDING_SIZE bytes
 62      * big so you do not have to check for that unless you need more.
 63      */
 64     int (*read_probe)(AVProbeData *);
 65 
 66     /**
 67      * Read the format header and initialize the AVFormatContext
 68      * structure. Return 0 if OK. 'avformat_new_stream' should be
 69      * called to create new streams.
 70      */
 71     int (*read_header)(struct AVFormatContext *);
 72 
 73     /**
 74      * Used by format which open further nested input.
 75      */
 76     int (*read_header2)(struct AVFormatContext *, AVDictionary **options);
 77 
 78     /**
 79      * Read one packet and put it in 'pkt'. pts and flags are also
 80      * set. 'avformat_new_stream' can be called only if the flag
 81      * AVFMTCTX_NOHEADER is used and only in the calling thread (not in a
 82      * background thread).
 83      * @return 0 on success, < 0 on error.
 84      *         When returning an error, pkt must not have been allocated
 85      *         or must be freed before returning
 86      */
 87     int (*read_packet)(struct AVFormatContext *, AVPacket *pkt);
 88 
 89     /**
 90      * Close the stream. The AVFormatContext and AVStreams are not
 91      * freed by this function
 92      */
 93     int (*read_close)(struct AVFormatContext *);
 94 
 95     /**
 96      * Seek to a given timestamp relative to the frames in
 97      * stream component stream_index.
 98      * @param stream_index Must not be -1.
 99      * @param flags Selects which direction should be preferred if no exact
100      *              match is available.
101      * @return >= 0 on success (but not necessarily the new offset)
102      */
103     int (*read_seek)(struct AVFormatContext *,
104                      int stream_index, int64_t timestamp, int flags);
105 
106     /**
107      * Get the next timestamp in stream[stream_index].time_base units.
108      * @return the timestamp or AV_NOPTS_VALUE if an error occurred
109      */
110     int64_t (*read_timestamp)(struct AVFormatContext *s, int stream_index,
111                               int64_t *pos, int64_t pos_limit);
112 
113     /**
114      * Start/resume playing - only meaningful if using a network-based format
115      * (RTSP).
116      */
117     int (*read_play)(struct AVFormatContext *);
118 
119     /**
120      * Pause playing - only meaningful if using a network-based format
121      * (RTSP).
122      */
123     int (*read_pause)(struct AVFormatContext *);
124 
125     /**
126      * Seek to timestamp ts.
127      * Seeking will be done so that the point from which all active streams
128      * can be presented successfully will be closest to ts and within min/max_ts.
129      * Active streams are all streams that have AVStream.discard < AVDISCARD_ALL.
130      */
131     int (*read_seek2)(struct AVFormatContext *s, int stream_index, int64_t min_ts, int64_t ts, int64_t max_ts, int flags);
132 
133     /**
134      * Returns device list with it properties.
135      * @see avdevice_list_devices() for more details.
136      */
137     int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list);
138 
139     /**
140      * Initialize device capabilities submodule.
141      * @see avdevice_capabilities_create() for more details.
142      */
143     int (*create_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps);
144 
145     /**
146      * Free device capabilities submodule.
147      * @see avdevice_capabilities_free() for more details.
148      */
149     int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps);
150 } 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);//释放设备能力子模块。

 

作者:YellowLayne
链接:https://www.jianshu.com/p/8e365f882fab
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:AVFMT,struct,AVFormatContext,int,read,AVInputFormat,stream,结构,FFmpeg
From: https://www.cnblogs.com/lizishaoye/p/18235605

相关文章

  • ffmpeg结构体解析-AVClass 和 AVOption
    AVClass先来看AVClass的结构如下:/***DescribetheclassofanAVClasscontextstructure.Thatisan*arbitrarystructofwhichthefirstfieldisapointertoan*AVClassstruct(e.g.AVCodecContext,AVFormatContextetc.).*/typedefstructAVClass{......
  • Android视频开发入门: VideoView、MediaPlayer、 FFmpeg、exoplayer...
    现在,视频功能是越来越普遍的需求。本文将提供一个关于Android视频开发的入门指南,帮助读者快速掌握视频播放、录制和处理等基本功能。1、概述在Android平台上,视频开发主要涉及以下几个方面:视频播放与控制视频录制与处理视频编解码与格式转换视频流媒体与直播接下来,我......
  • 【ARM】汇编语言结构
    结构连接器工作机制对应C代码被编译为二进制执行文件的过程:C语言转换为汇编代码file.c->file.asm汇编编译产生.o文件file.o带有未解析地址的中间文件连接器将.o文件排列填入到对应的存储地址中,并记录其函数和变量对应的地址,使得其他函数能够跳转到该函数的入......
  • golang接口请求结构体验证器Validator实现
    一、前提:认识reflect.TypeOf及reflect.ValueOfTypeOf:动态的获取从函数接口中传进去的变量的类型,如果为空则返回值为nil(获取类型对象)可以从该方法获取的对象中拿到字段的所属类型,字段名,以及该字段是否是匿名字段等信息。还可以获取到与该字段进行绑定的tag。ValueO......
  • 在Linux中,体系结构是什么?
    Linux操作系统的体系结构通常指的是它如何组织和管理内部组件以及与硬件的交互方式。Linux的体系结构可以分为几个关键层次:1.内核空间(KernelSpace)内核:Linux的核心,负责管理系统资源,包括CPU调度、内存管理、文件系统、设备驱动等。系统调用:内核提供给用户空间程序的接口,允许用......
  • 若依框架构造树形结构数据
    若依框架构造树形结构数据一、数据库表结构以分组为例,仅创建分组所需字段,其余业务需要字段后续再添加即可SETNAMESutf8mb4;SETFOREIGN_KEY_CHECKS=0;--------------------------------Tablestructureforggroup_data------------------------------DROPTABLE......
  • 马达对应的actuator结构体分析
    ​1.文件:mm-camera2/media-controller/modules/sensors/actuator/actuator.h中对actuator_data_t进行了如下定义:这个结构体是actuator马达控制的最外层的数据结构。typedefstruct{  int32_tfd;  actuator_ctrl_t*ctrl;  int16_tcurr_step_pos;  ......
  • 递归在多级数据结构中的简单应用
    哈喽,我是小码,半年多没更新了,这段时间换了新工作,工作也很忙。后续会尽量多写点,坚持确实是一件很难,很酷的事情。最近在公司负责开发商品有关的开发,商品包含类型、款式等属性,而类型可能有一级类型、二级类型甚至是三级类型,针对这种多级分类,这就就不好使用简单的查询了。之前也写了一......
  • 数据结构基础篇(6)
    二十三、队列的表示和操作的实现相关术语队列是仅在表尾进行插入操作,在表头进行删除操作的线性表表尾既a~n段,称对尾;表头a~1段,称队头它是一种先进先出(FIFO)的线性表入队:插入元素出队:删除元素队列的存储结构为链对或顺序对(常用循环顺序队)队列的常见应用脱机打印输......
  • [转][翻译]深入理解Win32结构化异常处理(四)
     如果你已经走了这么远,不把整个过程讲完对你有点不公平。我已经讲了当异常发生时操作系统是如何调用用户定义的回调函数的。我也讲了这些回调的内部情况,以及编译器是如何使用它们来实现__try和__except的。我甚至还讲了当某个异常没有被处理时所发生的情况以及系统所做的扫尾工......