FFMPEG学习【libavfilter】(一)
来源:互联网 发布:海沧广电网络客服 编辑:程序博客网 时间:2024/06/05 17:10
此模块用于获取流的属性。
一、Buffer sink accessors模块
一)、函数
enum AVMediaType av_buffersink_get_type (const AVFilterContext *ctx)AVRational av_buffersink_get_time_base (const AVFilterContext *ctx)
int av_buffersink_get_format (const AVFilterContext *ctx)
AVRational av_buffersink_get_frame_rate (const AVFilterContext *ctx)
int av_buffersink_get_w (const AVFilterContext *ctx)
int av_buffersink_get_h (const AVFilterContext *ctx)
AVRational av_buffersink_get_sample_aspect_ratio (const AVFilterContext *ctx)
int av_buffersink_get_channels (const AVFilterContext *ctx)
uint64_t av_buffersink_get_channel_layout (const AVFilterContext *ctx)
int av_buffersink_get_sample_rate (const AVFilterContext *ctx)
AVBufferRef * av_buffersink_get_hw_frames_ctx (const AVFilterContext *ctx)
二)、Buffer source API模块
1、头文件
buffersrc.h
2、数据结构
struct AVBufferSrcParameters{int format; // 视频:像素格式,值对应于枚举AVPixelFormat音频:采样格式,值对应于枚举AVSampleFormat
AVRational time_base;// 时间基准用于输入帧上的时间戳。
int width; // 仅视频,输入框的显示尺寸。
int height;
AVRational sample_aspect_ratio;// 仅视频,样本(像素)宽高比。
AVRational frame_rate;// 仅视频,输入视频的帧速率。
AVBufferRef * hw_frames_ctx;// 只有hwaccel像素格式的视频。
int sample_rate;// 仅音频,每秒钟采样的音频采样率。
uint64_t channel_layout;// 仅音频,音频通道布局。
}此结构包含描述将传递到此过滤器的帧的参数。
3、枚举
enum { AV_BUFFERSRC_FLAG_NO_CHECK_FORMAT = 1, AV_BUFFERSRC_FLAG_PUSH = 4, AV_BUFFERSRC_FLAG_KEEP_REF = 8 }4、函数
unsigned av_buffersrc_get_nb_failed_requests (AVFilterContext *buffer_src)获取失败的请求数。失败的请求是在调用request_frame方法时,而缓冲区中没有帧。 添加帧时,该号码将重置。
它应该由av_free()的调用者释放。
此函数可能会被多次调用,后面的调用将覆盖以前的调用。 一些参数也可以通过AVOptions进行设置,然后使用最后使用的方法优先。
参数:ctx:bufferrc或abuffersrc过滤器的一个实例
param:流参数。 后来传递给此过滤器的帧必须符合这些参数。 param中的所有分配的字段仍然由调用者拥有,libavfilter将在必要时进行内部副本或引用。
返回:0成功,失败时出现负ERROR代码。
参数:ctx:bufferrc过滤器的一个实例
frame:帧被添加。 如果帧被引用计数,则此函数将对其进行新的引用。 否则将复制帧数据。
返回:0成功,失败时出现负ERROR代码。
参数:ctx:bufferrc过滤器的一个实例
frame:帧被添加。 如果帧被引用计数,则此函数将获取参考的所有权并重置帧。 否则将复制帧数据。 如果此函数返回错误,则不会触摸输入框。
返回:0成功,失败时出现负ERROR代码。
默认情况下,如果帧被引用计数,则该函数将获取引用的所有权并重置帧。 这可以使用标志来控制。
如果此函数返回错误,则不会触摸输入框。
参数:buffer_src:指向缓冲区源上下文的指针
frame:一个帧,或者为NULL标记EOF
flags:AV_BUFFERSRC_FLAG_ *的一个组合
返回:0成功,失败时出现负ERROR代码。
二、头文件
1、avfilter.h
2、version.h
三、数据结构
1、struct AVFilter{const char * name;//过滤器名称。
const char * description;//过滤器说明。
const AVFilterPad * inputs;//输入列表,由零元素终止。
const AVFilterPad * outputs;//输出列表,由零元素终止。
const AVClass * priv_class;//私有数据类,用于声明过滤器私有AVOptions。
int flags; //AVFILTER_FLAG_ *的组合。
int(* init )(AVFilterContext *ctx);//过滤初始化函数。
int(* init_dict )(AVFilterContext *ctx, AVDictionary **options);//应该通过想要将AVOptions的字典传递给在init中分配的嵌套上下文的过滤器来设置而不是init。
void(* uninit )(AVFilterContext *ctx);//过滤器在其输入和输出上支持的查询格式。
int priv_size;//要为过滤器分配的私有数据的大小
int flags_internal;//avfilter的附加标志仅供内部使用。
struct AVFilter * next;// 由过滤器注册系统使用。
int(* process_command )(AVFilterContext *, const char *cmd, const char *arg, char *res, int res_len, int flags);// 使过滤器实例处理一个命令。
int(* init_opaque )(AVFilterContext *ctx, void *opaque);//过滤初始化函数,替代init()回调。
int(* activate )(AVFilterContext *ctx);//过滤器激活函数。
}过滤器定义。
const AVClass * av_class;//需要av_log()和过滤常用选项
const AVFilter * filter;// AVFilter的一个实例
char * name; //此过滤器实例的名称
AVFilterPad * input_pads;//数组输入板
AVFilterLink ** inputs;//指向输入链接的指针数组
unsigned nb_inputs;//输入板数
AVFilterPad * output_pads;//输出板阵列
unsigned nb_outputs;//输出板数量
void * priv; //过滤器使用的私人数据
struct AVFilterGraph * graph;//filtergraph this filter belongs to
int thread_type;//允许/使用的多线程类型。
AVFilterInternal * internal;//libavfilter内部使用的不透明结构。
struct AVFilterCommand * command_queue;
char * enable_str;//启用表达式字符串
void * enable;// 解析的表达式(AVExpr *)
double * var_values;//启用表达式的变量值
int is_disabled;//从最后的表达式评估启用状态
AVBufferRef * hw_device_ctx;//对于将创建硬件框架的过滤器,设置过滤器应在其中创建的设备。
int nb_threads;//此过滤器实例允许的最大线程数。
unsigned ready;//过滤器的就绪状态
}一个过滤器的实例。
AVFilterContext * src;//源滤镜
AVFilterPad * srcpad;//源过滤器上的输出垫
AVFilterContext * dst;//目的过滤器
AVFilterPad * dstpad;//目标过滤器上的输入板
enum AVMediaType type;//过滤介质类型
int w; //建议图像宽度
int h; //建议图像高度
AVRational sample_aspect_ratio;// 建议采样宽高比
uint64_t channel_layout;//当前缓冲区的通道布局(请参阅libavutil / channel_layout.h)
int sample_rate;//每秒钟的采样
int format; //建议媒体格式
AVRational time_base;//定义通过此链接的帧/样本的PTS使用的时基。
AVFilterFormats * in_formats;//分别由输入和输出过滤器支持的格式和通道布局列表。
AVFilterFormats * out_formats;
AVFilterFormats * in_samplerates;// 用于自动协商的频道布局和采样率列表。
AVFilterFormats * out_samplerates;
struct AVFilterChannelLayouts * in_channel_layouts;
struct AVFilterChannelLayouts * out_channel_layouts;
int request_samples;//仅音频,目的地过滤器将其设置为非零值,以请求具有给定数量样本的缓冲区应发送给它。
enum AVFilterLink:: { ... } init_state;//链接属性(维度等)的初始化阶段
struct AVFilterGraph * graph;//图表所属的过滤器。
int64_t current_pts;// 链接的当前时间戳,由链接time_base单位的最新帧定义。
int64_t current_pts_us;//由AV_TIME_BASE单位的最新帧定义的链接的当前时间戳。
int age_index;//年龄数组中的索引
AVRational frame_rate;// 链路上流的帧速率,如果未知或变量,则为1/0;如果保留为0/0,将自动从源过滤器的第一个输入复制(如果存在)。
AVFrame * partial_buf;//缓冲液部分填充样品以实现固定/最小尺寸。
int partial_buf_size;//要分配的部分缓冲区的大小。
int min_samples;// 一次过滤的最小样品数量。
int max_samples;// 一次过滤的最大样本数。
int channels; //频道数量
unsigned flags;// 链接处理标志
int64_t frame_count_in;//通过链接发送的过去帧数。
int64_t frame_count_out;
void * frame_pool;// 指向FFFramePool结构体的指针。
int frame_wanted_out;// 如果此过滤器的输出上当前需要一个帧,则为真。
AVBufferRef * hw_frames_ctx;// 对于hwaccel像素格式,这应该是对描述帧的AVHWFramesContext的引用。
char reserved [0xF000];//内部结构成员
}两个过滤器之间的链接。
const AVClass * av_class;
AVFilterContext ** filters;
unsigned nb_filters;
char * scale_sws_opts;// 用于自动插入缩放滤镜的sws选项
int thread_type;// 此图中允许使用过滤器的多线程类型。
int nb_threads;// 该图中过滤器使用的最大线程数。
AVFilterGraphInternal * internal;// libavfilter内部使用不透明对象。
void * opaque;// 不透明的用户数据。
avfilter_execute_func * execute;// 调用者可以在分配图形之后并在添加任何过滤器之前立即设置此回调,以提供自定义多线程实现。
char * aresample_swr_opts;// 用于自动插入的样本过滤器的swr选项,仅通过AVOptions访问
AVFilterLink ** sink_links;// 私人领域。
int sink_links_count;
unsigned disable_auto_convert;
}
5、struct AVFilterInOut{
char * name; //列表中该输入/输出的唯一名称
AVFilterContext * filter_ctx;// 与此输入/输出相关联的过滤器上下文
int pad_idx; // 用于连接的filt_ctx垫的索引
struct AVFilterInOut * next;// 列表中的下一个输入/输入,如果是最后一个则为NULL
}过滤器链的输入/输出的链表。
四、宏
#define AVFILTER_FLAG_DYNAMIC_INPUTS (1 << 0)滤波器输入的数量不是仅由AVFilter.inputs决定的。停止一次过滤器了解命令(例如对于target = all),快速过滤器将自动受益。
五、类型定义
typedef int( avfilter_action_func )(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)传递给AVFilterGraph :: execute回调的函数指针可以多次执行,可能并行执行。六、枚举
enum { AVFILTER_AUTO_CONVERT_ALL = 0, AVFILTER_AUTO_CONVERT_NONE = -1 }- FFMPEG学习【libavfilter】(一)
- FFMPEG学习【libavfilter】(二)
- ffmpeg实战教程(五)libswscale,libavfilter实践指南
- ffmpeg学习(一)
- ffmpeg学习(一)
- FFMPEG学习【libavdevice】(一)
- FFMpeg学习(一):19 ffmpeg commands for all needs
- ffmpeg和SDL学习笔记(一)
- ffmpeg和SDL学习笔记(一)
- FFMPEG学习【libavcodec】:实用函数(一)
- FFMPEG学习【libavutil】:Memory Management(一)
- FFMPEG学习【libavutil】:数据结构(一)
- FFMPEG学习【libavutil】:音频相关(一)
- ffmpeg和SDL学习笔记(一)
- FFmpeg 学习笔记(一)
- ffmpeg下libavfilter的安装配置以及利用实现添加水印
- 音频重采样(libavfilter)及AVAudioFifo的使用
- Libavfilter Documentation
- json学习
- 分布式数据库中间件对比总结
- lintcode(412)分糖果
- Alpha、Beta、RC、GA版本的区别
- java虚拟机---java内存模型
- FFMPEG学习【libavfilter】(一)
- 【Bzoj1303】中位数图
- servlet接收POST提交的中文传入数据库后乱码
- C#的zxing条码工具
- Linux 下 JDK + Eclipse + PyDev 安装与配置
- C primer plus 第四章总结
- 安卓应用升级、捕捉异常上报、运营统计
- 读
- 设计模式之适配器模式