opt_set_funcs
/**
* @defgroup opt_set_funcs Option setting functions
* @{
* Those functions set the field of obj with the given name to value.
*
* @param[in] obj A struct whose first element is a pointer to an AVClass.
* @param[in] name the name of the field to set
* @param[in] val The value to set. In case of av_opt_set() if the field is not
* of a string type, then the given string is parsed.
* SI postfixes and some named scalars are supported.
* If the field is of a numeric type, it has to be a numeric or named
* scalar. Behavior with more than one scalar and +- infix operators
* is undefined.
* If the field is of a flags type, it has to be a sequence of numeric
* scalars or named flags separated by '+' or '-'. Prefixing a flag
* with '+' causes it to be set without affecting the other flags;
* similarly, '-' unsets a flag.
* If the field is of a dictionary type, it has to be a ':' separated list of
* key=value parameters. Values containing ':' special characters must be
* escaped.
* @param search_flags flags passed to av_opt_find2. I.e. if AV_OPT_SEARCH_CHILDREN
* is passed here, then the option may be set on a child of obj.
*
* @return 0 if the value has been set, or an AVERROR code in case of
* error:
* AVERROR_OPTION_NOT_FOUND if no matching option exists
* AVERROR(ERANGE) if the value is out of range
* AVERROR(EINVAL) if the value is not valid
*/
int av_opt_set (void *obj, const char *name, const char *val, int search_flags);
int av_opt_set_int (void *obj, const char *name, int64_t val, int search_flags);
int av_opt_set_double (void *obj, const char *name, double val, int search_flags);
int av_opt_set_q (void *obj, const char *name, AVRational val, int search_flags);
int av_opt_set_bin (void *obj, const char *name, const uint8_t *val, int size, int search_flags);
int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_flags);
int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags);
int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags);
int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags);
int av_opt_set_channel_layout(void *obj, const char *name, int64_t ch_layout, int search_flags);
这段代码定义了一些用于设置选项的函数。这些函数的作用是将给定的值设置到由obj
指向的结构体的指定字段name
中。这些函数主要用于FFmpeg库,用于设置视频和音频处理的各种参数。
函数列表如下:
av_opt_set
: 设置一个字符串类型的字段。av_opt_set_int
: 设置一个整数类型的字段。av_opt_set_double
: 设置一个双精度浮点类型的字段。av_opt_set_q
: 设置一个AVRational类型的字段(用于表示视频帧率、采样率等)。av_opt_set_bin
: 设置一个二进制类型的字段。av_opt_set_image_size
: 设置一个表示图像大小的字段。av_opt_set_pixel_fmt
: 设置一个表示像素格式的字段。av_opt_set_sample_fmt
: 设置一个表示采样格式的字段。av_opt_set_video_rate
: 设置一个表示视频比特率的字段。av_opt_set_channel_layout
: 设置一个表示通道布局的字段。
这些函数的参数obj
是一个指向AVClass
结构体的指针,name
是要设置的字段名,val
是要设置的值,search_flags
是一些用于搜索选项的标志。
在使用这些函数时,需要注意以下几点:- 确保
obj
指向的结构体是正确的,并且已经初始化。 - 确保
name
和val
的值是有效的,否则可能会导致错误。 - 使用
av_opt_set
函数时,如果字段不是字符串类型,需要对val
进行解析。 - 使用
av_opt_set_int
、av_opt_set_double
、av_opt_set_q
等函数时,可以直接将值设置为整数、浮点数或AVRational类型,无需进行字符串解析。 - 使用
search_flags
可以控制选项搜索的范围,例如是否搜索子对象。
本文来自博客园,作者:flxx,转载请注明原文链接:https://www.cnblogs.com/faithlocus/p/18046399