@@ -166,10 +166,12 @@ func _update_format_list() -> void:
166166 var format_name : String = format .get ("format" , "Unknown" )
167167 var item := "%s - %d x%d " % [format_name , width , height ]
168168
169- if format .has ("frame_denominator" ) and format .has ("frame_numerator" ):
170- item += " : %s / %s " % [format ["frame_numerator" ], format ["frame_denominator" ]]
171- elif format .has ("framerate_denominator" ) and format .has ("framerate_numerator" ):
172- item += " : %s / %s " % [format ["framerate_numerator" ], format ["framerate_denominator" ]]
169+ var fps := _get_fps (format )
170+ if fps > 0 :
171+ if is_equal_approx (fps , roundf (fps )):
172+ item += " @ %d fps" % int (fps )
173+ else :
174+ item += " @ %.2f fps" % fps
173175 format_list .add_item (item )
174176
175177 format_list .selected = 0
@@ -271,6 +273,18 @@ func _get_preview_size(mat: ShaderMaterial) -> Vector2:
271273 return Vector2 .ZERO
272274
273275
276+ func _get_fps (format : Dictionary ) -> float :
277+ var numerator : int = format .get ("frame_numerator" , 0 )
278+ var denominator : int = format .get ("frame_denominator" , 0 )
279+ if numerator <= 0 or denominator <= 0 :
280+ return 0.0
281+ # Linux uses frame interval (fps = denominator / numerator).
282+ # Other platforms use frame rate (fps = numerator / denominator).
283+ if OS .get_name () == "Linux" :
284+ return float (denominator ) / float (numerator )
285+ return float (numerator ) / float (denominator )
286+
287+
274288func _on_frame_changed () -> void :
275289 if not camera_feed or not camera_feed .feed_is_active :
276290 return
0 commit comments