@ -47,15 +47,17 @@ const AVOption *av_next_option(void *obj, const AVOption *last){
else return ( * ( AVClass * * ) obj ) - > option ;
}
static const AVOpt io n * av_set_number ( void * obj , const char * name , double num , int den , int64_t intnum ) {
static int av_set_number2 ( void * obj , const char * name , double num , int den , int64_t intnum , const AVOption * * o_out ) {
const AVOption * o = av_find_opt ( obj , name , NULL , 0 , 0 ) ;
void * dst ;
if ( o_out )
* o_out = o ;
if ( ! o | | o - > offset < = 0 )
return NULL ;
return AVERROR ( ENOENT ) ;
if ( o - > max * den < num * intnum | | o - > min * den > num * intnum ) {
av_log ( NULL , AV_LOG_ERROR , " Value %lf for parameter '%s' out of range \n " , num , name ) ;
return NULL ;
return AVERROR ( ERANGE ) ;
}
dst = ( ( uint8_t * ) obj ) + o - > offset ;
@ -71,8 +73,16 @@ static const AVOption *av_set_number(void *obj, const char *name, double num, in
else * ( AVRational * ) dst = av_d2q ( num * intnum / den , 1 < < 24 ) ;
break ;
default :
return NULL ;
return AVERROR ( EINVAL ) ;
}
return 0 ;
}
static const AVOption * av_set_number ( void * obj , const char * name , double num , int den , int64_t intnum ) {
const AVOption * o = NULL ;
if ( av_set_number2 ( obj , name , num , den , intnum , & o ) < 0 )
return NULL ;
else
return o ;
}