@@ -81,8 +81,8 @@ static const ARGS_OPT enc_args_opts[] = {
8181 "QP value (0~51)"
8282 },
8383 {
84- 'z' , "fps" , ARGS_VAL_TYPE_INTEGER | ARGS_VAL_TYPE_MANDATORY , 0 , NULL ,
85- "frame rate (frame per second)"
84+ 'z' , "fps" , ARGS_VAL_TYPE_STRING | ARGS_VAL_TYPE_MANDATORY , 0 , NULL ,
85+ "frame rate (frame per second)) "
8686 },
8787 {
8888 'm' , "threads" , ARGS_VAL_TYPE_INTEGER , 0 , NULL ,
@@ -202,6 +202,7 @@ typedef struct {
202202 char level [32 ];
203203 int band ;
204204 char bitrate [64 ];
205+ char fps [256 ];
205206 char q_matrix_y [512 ];
206207 char q_matrix_u [512 ];
207208 char q_matrix_v [512 ];
@@ -241,6 +242,8 @@ static ARGS_VAR* args_init_vars(ARGS_PARSER* args, oapve_param_t* param)
241242 args_set_variable_by_key_long (opts , "band" , & vars -> band );
242243 vars -> band = 2 ; /* default */
243244 args_set_variable_by_key_long (opts , "bitrate" , vars -> bitrate );
245+ args_set_variable_by_key_long (opts , "fps" , vars -> fps );
246+ strncpy (vars -> fps , "60" , sizeof (vars -> fps ) - 1 );
244247 args_set_variable_by_key_long (opts , "q-matrix-y" , vars -> q_matrix_y );
245248 strncpy (vars -> q_matrix_y , "" , sizeof (vars -> q_matrix_y ) - 1 );
246249 args_set_variable_by_key_long (opts , "q-matrix-u" , vars -> q_matrix_u );
@@ -255,7 +258,6 @@ static ARGS_VAR* args_init_vars(ARGS_PARSER* args, oapve_param_t* param)
255258 ARGS_SET_PARAM_VAR_KEY (opts , param , w );
256259 ARGS_SET_PARAM_VAR_KEY (opts , param , h );
257260 ARGS_SET_PARAM_VAR_KEY_LONG (opts , param , qp );
258- ARGS_SET_PARAM_VAR_KEY_LONG (opts , param , fps );
259261 ARGS_SET_PARAM_VAR_KEY_LONG (opts , param , preset );
260262 ARGS_SET_PARAM_VAR_KEY_LONG (opts , param , rc_type );
261263 ARGS_SET_PARAM_VAR_KEY_LONG (opts , param , use_filler );
@@ -349,7 +351,7 @@ static void print_config(ARGS_VAR* vars, oapve_param_t* param)
349351 logv2 ("\tprofile = %s\n" , vars -> profile );
350352 logv2 ("\twidth = %d\n" , param -> w );
351353 logv2 ("\theight = %d\n" , param -> h );
352- logv2 ("\tFPS = %d \n" , param -> fps );
354+ logv2 ("\tFPS = %.2f \n" , ( float ) param -> fps_num / param -> fps_den );
353355 logv2 ("\tQP = %d\n" , param -> qp );
354356 logv2 ("\tframes = %d\n" , vars -> frames );
355357 logv2 ("\trate-control type = %s\n" , (param -> rc_type == OAPV_RC_ABR ) ? "ABR" : "CQP" );
@@ -507,6 +509,24 @@ static int update_param(ARGS_VAR* vars, oapve_param_t* param)
507509 /* update band idc */
508510 param -> band_idc = vars -> band ;
509511
512+ /* update fps */
513+ if (strpbrk (vars -> fps , "/" ) != NULL )
514+ {
515+ sscanf (vars -> fps , "%d/%d" , & param -> fps_num , & param -> fps_den );
516+ }
517+ else if (strpbrk (vars -> fps , "." ) != NULL )
518+ {
519+ float tmp_fps = 0 ;
520+ sscanf (vars -> fps , "%f" , & tmp_fps );
521+ param -> fps_num = tmp_fps * 10000 ;
522+ param -> fps_den = 10000 ;
523+ }
524+ else
525+ {
526+ sscanf (vars -> fps , "%d" , & param -> fps_num );
527+ param -> fps_den = 1 ;
528+ }
529+
510530 return 0 ;
511531}
512532
@@ -793,12 +813,14 @@ int main(int argc, const char** argv)
793813 ret = oapve_encode (id , & ifrms , mid , & bitb , & stat , & rfrms );
794814
795815 for (int i = 0 ; i < num_frames ; i ++ ) {
796- if (args_var -> input_depth != 10 ) {
797- imgb_cpy (imgb_w , rfrms .frm [i ].imgb );
798- imgb_o = imgb_w ;
799- }
800- else {
801- imgb_o = rfrms .frm [i ].imgb ;
816+ if (is_rec ){
817+ if (args_var -> input_depth != 10 ) {
818+ imgb_cpy (imgb_w , rfrms .frm [i ].imgb );
819+ imgb_o = imgb_w ;
820+ }
821+ else {
822+ imgb_o = rfrms .frm [i ].imgb ;
823+ }
802824 }
803825
804826 clk_end = oapv_clk_from (clk_beg );
@@ -846,7 +868,7 @@ int main(int argc, const char** argv)
846868 total_time = total_time % 60 ;
847869 int s = total_time ;
848870 double curr_bitrate = bitrate ;
849- curr_bitrate *= (param -> fps * 8 );
871+ curr_bitrate *= ((( float ) param -> fps_num / param -> fps_den ) * 8 );
850872 curr_bitrate /= (encod_frames + 1 );
851873 curr_bitrate /= 1000 ;
852874 logv2 ("[ %d / %d frames ] [ %.2f frame/sec ] [ %.4f kbps ] [ %2dh %2dm %2ds ] \r" , encod_frames , max_frames , ((float )(encod_frames + 1 ) * 1000 ) / ((float )oapv_clk_msec (clk_tot )), curr_bitrate , h , m , s );
@@ -886,7 +908,7 @@ int main(int argc, const char** argv)
886908 logv3 (" PSNR T(dB) : %-5.4f\n" , psnr_avg [3 ]);
887909 }
888910 logv3 (" Total bits(bits) : %.0f\n" , bitrate * 8 );
889- bitrate *= (param -> fps * 8 );
911+ bitrate *= ((( float ) param -> fps_num / param -> fps_den ) * 8 );
890912 bitrate /= pic_cnt ;
891913 bitrate /= 1000 ;
892914
0 commit comments