static int set_number(void *obj, const char *name, double num, int den, int64_t intnum,
int search_flags) //其中intnum是从options的default_val里读取的
{
void *dst, *target_obj;
const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj);
if (!o || !target_obj)
return AVERROR_OPTION_NOT_FOUND;
dst = ((uint8_t*)target_obj) + o->offset;
return write_number(obj, o, dst, num, den, intnum);
}
其中 target_obj=obj 然后dst =target_obj
write_number函数里的
case AV_OPT_TYPE_FLAGS:
case AV_OPT_TYPE_INT: *(int *)dst= llrint(num/den)*intnum; break;
case AV_OPT_TYPE_INT64: *(int64_t *)dst= llrint(num/den)*intnum; break;
case AV_OPT_TYPE_FLOAT: *(float *)dst= num*intnum/den; break;
case AV_OPT_TYPE_DOUBLE:*(double *)dst= num*intnum/den; break;
case AV_OPT_TYPE_RATIONAL:
floor()和ceil()函数
floor(2.5)=2小于或者等于最大整数
floor(-2.5)=-3
ceil(2.5)=3大于x的最小整数
ceil(-2.5)=-2
av_opt_nextav_opt_next返回的是AVOption*