ffmpeg set_number函数

来源:互联网 发布:ubuntu密码忘了怎么办 编辑:程序博客网 时间:2024/05/22 04:44
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*
0 0
原创粉丝点击