FFmpeg库常用函数介绍(三)

1 av_opt_set_bin

作用:将二进制数据作为值设置给对象。

函数原型:

int av_opt_set_bin(void *obj, const char *name, const uint8_t *val, int size, int search_flags);

obj:要设置选项的对象;

name:选项名称;

val:要设置的值;

size:值的大小;

search_flags:搜索选项的方式。例如,AV_OPT_SEARCH_CHILDREN指的是首先搜索给定对象的子对象。

返回值:负值表示失败。

2 av_opt_set_int_list

作用:将整数数组作为选项值设置给对象。

函数原型:

#define av_opt_set_int_list(obj, name, val, term, flags) \

(av_int_list_length(val, term) > INT_MAX / sizeof(*(val)) ? \ AVERROR(EINVAL) : \ av_opt_set_bin(obj, name, (const uint8_t *)(val), \

av_int_list_length(val, term) * sizeof(*(val)), flags))

obj:要设置选项的对象;

name:选项名称;

val:要设置的值,整型数组;

term:val所代表数组中的最后一个元素,其值通常为0或者-1;假设val数组为enum AVPixelFormat val[] = {AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUYV422, AV_PIX_FMT_NONE},那么term的值就是AV_PIX_FMT_NONE,AV_PIX_FMT_NONE值为-1;

flags:搜索选项的方式。例如,AV_OPT_SEARCH_CHILDREN指的是首先搜索给定对象的子对象。

宏定义运行的结果:负值表示失败。

注意:从函数原型上可以看出,该宏定义其实就是调用的av_opt_set_bin。

3 av_get_default_channel_layout

作用:根据通道数返回默认的声道布局。

函数原型:

int64_t av_get_default_channel_layout(int nb_channels);

nb_channels:通道数;

返回值:声道布局。

4 av_get_sample_fmt_name

作用:根据采样格式返回采样格式的名称。

函数原型:

const char *av_get_sample_fmt_name(AVSampleFormat sample_fmt);

sample_fmt:采样格式;

返回值:成功返回采样格式的名称,失败返回NULL。

5 av_strdup

作用:拷贝一个字符串。

函数原型:

char *av_strdup(const char *s);

s:待拷贝的字符串;

返回值:成功返回拷贝的字符串,失败返回NULL。

6 avfilter_graph_parse_ptr

作用:将字符串描述的滤镜图添加到现有的滤镜图中。

函数原型:

int avfilter_graph_parse_ptr(AVFilterGraph *graph, const char *filters, AVFilterInOut **inputs, AVFilterInOut **outputs, void *log_ctx);

graph:现有的滤镜图;

filters:待解析的字符串描述的滤镜图;

inputs:buffersink滤镜的输入引脚;

outputs:buffer滤镜的输出引进;

log_ctx:为NULL;

返回值:负值表示失败。

7 avfilter_graph_config

作用:为滤镜图中的滤镜建立连接。

函数原型:

int avfilter_graph_config(AVFilterGraph *graphctx, void *log_ctx);

graphctx:滤镜图;

log_ctx:为NULL;

返回值:负值表示失败。

8 av_frame_alloc

作用:分配一个AVFrame。

函数原型:

AVFrame *av_frame_alloc();

返回值:成功返回分配的AVFrame,失败返回NULL。

注意:用完后必须使用av_frame_free释放。

9 av_frame_free

作用:释放分配的AVFrame。

函数原型:

void av_frame_free(AVFrame **frame);

frame:待释放的AVFrame;

10 avcodec_send_packet

作用:将编码的音视频帧数据送入解码器进行解码。

函数原型:

int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt);

avctx:解码器上下文;

avpkt:编码的音视频帧数据;

返回值: < 0表示失败。

注意:AVCodecContext必须先使用avcodec_open2打开。

11 avcodec_receive_frame

作用:从解码器中获取解码的音视频帧数据。

函数原型:

int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame);

avctx:解码器上下文;

frame:解码的音视频帧数据;

返回值:

                 0:表示成功;

                 AVERROR(EAGAIN):当前状态无法获取输出,必须发送新的数据到解码器;

                 AVERROR_EOF:解码器已完全清空;

                 AVERROR(EINVAL):解码器没有打开,或者它是一个编码器;

                 其他负值:解码失败;

12 avcodec_open2

作用:使用编解码器初始化AVCodecContext。

函数原型:

int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options);

avctx:待初始化的AVCodecContext;

codec:编解码器;

options:一般为NULL;

返回值:负值表示失败。

13 av_buffersrc_add_frame_flags

作用:将解码后的音视频帧送入滤镜处理。

函数原型:

int av_buffersrc_add_frame_flags(AVFilterContext *buffer_src, AVFrame *frame, int flags);

buffer_src:buffer或abuffer滤镜实例;

frame:解码后的音视频帧;

flags:一般为0;

返回值:负值表示失败。

14 av_buffersink_get_frame

作用:从滤镜中获取过滤后的音视频帧。

函数原型:

int av_buffersink_get_frame(AVFilterContext *ctx, AVFrame *frame);

ctx:buffersink或abuffersink滤镜实例;

frame:用于存储过滤后的音视频帧数据;

返回值:>= 0表示成功,AVERROR(EAGAIN)表示当前情况无法获取输出帧(正常状态),AVERROR_EOF表示无法获取更多输出帧,其它负值表示失败。

15 avcodec_send_frame

作用:将原始的音视频帧送入编码器进行编码。

函数原型:

int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame);

avctx:编码器上下文;

frame:待编码的原始音视频帧;

返回值:负值表示失败。

16 avcodec_receive_packet

作用:从编码器中获取编码的音视频帧。

函数原型:

int avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt);

avctx:编码器上下文;

avpkt:编码的音视频帧;

返回值:

                 0:表示成功;

                 AVERROR(EAGAIN):当前状态无法获取输出,必须发送新的数据到编码器;

                 AVERROR_EOF:编码器已完全清空;

                 AVERROR(EINVAL):编码器没有打开,或者它是一个解码器;

                 其他负值:编码失败;

17 avcodec_alloc_context3

作用:分配一个AVCodecContext,并将其字段设为默认值。

函数原型:

AVCodecContext *avcodec_alloc_context3(const AVCodec *codec);

codec:用于初始化的编解码器;

返回值:成功返回分配的AVCodecContext,失败返回NULL。

18 avcodec_free_context

作用:释放AVCodecContext。

函数原型:

void avcodec_free_context(AVCodecContext **avctx);

avctx:待释放的AVCodecContext;

19 avcodec_parameters_to_context

作用:将AVCodecParameters里的参数拷贝给AVCodecContext里的对应字段。

函数原型:

int avcodec_parameters_to_context(AVCodecContext *codec, const AVCodecParameters *par);

codec:dst AVCodecContext;

par:src AVCodecParameters;

返回值:负值表示失败。

20 av_guess_frame_rate

作用:根据容器和编解码器信息猜测帧率。

函数原型:

AVRational av_guess_frame_rate(AVFormatContext *ctx, AVStream *stream, AVFrame *frame);

ctx:stream所属的AVFormatContext;

stream:frame所属的stream;

frame:需要确定帧率的帧,一般为NULL;

返回值:猜测的帧率。

21 av_inv_q

作用:将AVRational q转换为1 / q。

函数原型:

extern "C" static inline AVRational av_inv_q(AVRational q);

q:待转换AVRational;

返回值:1 / q。

22 av_channel_layout_copy

作用:拷贝通道布局。

函数原型:

int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src);

dst:目的通道布局;

stc:源通道布局;

返回值:负值表示失败。

23 avcodec_parameters_from_context

作用:将AVCodecContext里的参数拷贝给AVCodecParameters里的对应字段。

函数原型:

int avcodec_parameters_from_context(AVCodecParameters *par, const AVCodecContext *codec);

par:dst AVCodecParameters;

codec:src AVCodecContext;

返回值:负值表示失败。

24 av_channel_layout_default

作用:获取给定通道数量的默认通道布局。

函数原型:

void av_channel_layout_default(AVChannelLayout *ch_layout, int nb_channels);

ch_layout:待初始化的通道布局;

nb_channels:通道数量;

25 av_channel_layout_describe

作用:获取描述通道布局属性的字符串,该字符串与av_channel_layout_from_string的参数格式相同,可以用来重建相同的通道布局。

函数原型:

int av_channel_layout_describe(const AVChannelLayout *channel_layout, char *buf, size_t buf_size);

channel_layout:待描述的通道布局;

buf:存储生成字符串的缓冲区;

buf_size:缓冲区的大小;

返回值:成功返回生成字符串的字节数,失败返回负值。

26 av_packet_alloc

作用:分配一个AVPacket,并将其字段设为默认值。

函数原型:

AVPacket *av_packet_alloc();

返回值:成功返回分配的AVPacket,失败返回NULL。

27 av_buffersink_get_time_base

作用:获取buffersink滤镜实例的时间基。

函数原型:

AVRational av_buffersink_get_time_base(const AVFilterContext *ctx);

ctx:buffersink滤镜实例;

返回值:buffersink滤镜实例的时间基。

28 av_packet_rescale_ts

作用:将AVPacket中的以tb_src时间基表示的计时字段(时间戳、持续时间)转换为以tb_dst时间基表示。

函数原型:

void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst);

pkt:待转换的AVPacket;

tb_src:源时间基,转换前的AVPacket中的计时字段以该时间基表示;

tb_dst:目的时间基,转换后的AVPacket中的计时字段以该时间基表示;

  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值