Skip to content

Commit d5f8df5

Browse files
committed
Improve FPS display in format list
1 parent 7ba625a commit d5f8df5

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

misc/camera_feed/camerafeed.gd

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -166,10 +166,12 @@ func _update_format_list() -> void:
166166
var format_name: String = format.get("format", "Unknown")
167167
var item := "%s - %dx%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 += " @ %dfps" % int(fps)
173+
else:
174+
item += " @ %.2ffps" % 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+
274288
func _on_frame_changed() -> void:
275289
if not camera_feed or not camera_feed.feed_is_active:
276290
return

0 commit comments

Comments
 (0)