1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Add CameraServer camera_feeds_updated signal, and document async behavior

This commit is contained in:
KOGA Mitsuhiro
2025-07-17 13:05:46 +09:00
parent 65eb664352
commit 2560ddbce0
6 changed files with 33 additions and 0 deletions

View File

@@ -49,6 +49,29 @@
<member name="monitoring_feeds" type="bool" setter="set_monitoring_feeds" getter="is_monitoring_feeds" default="false">
If [code]true[/code], the server is actively monitoring available camera feeds.
This has a performance cost, so only set it to [code]true[/code] when you're actively accessing the camera.
[b]Note:[/b] After setting it to [code]true[/code], you can receive updated camera feeds through the [signal camera_feeds_updated] signal.
[codeblocks]
[gdscript]
func _ready():
CameraServer.camera_feeds_updated.connect(_on_camera_feeds_updated)
CameraServer.monitoring_feeds = true
func _on_camera_feeds_updated():
var feeds = CameraServer.feeds()
[/gdscript]
[csharp]
public override void _Ready()
{
CameraServer.CameraFeedsUpdated += OnCameraFeedsUpdated;
CameraServer.MonitoringFeeds = true;
}
void OnCameraFeedsUpdated()
{
var feeds = CameraServer.Feeds();
}
[/csharp]
[/codeblocks]
</member>
</members>
<signals>
@@ -64,6 +87,11 @@
Emitted when a [CameraFeed] is removed (e.g. a webcam is unplugged).
</description>
</signal>
<signal name="camera_feeds_updated">
<description>
Emitted when camera feeds are updated.
</description>
</signal>
</signals>
<constants>
<constant name="FEED_RGBA_IMAGE" value="0" enum="FeedImage">

View File

@@ -474,6 +474,7 @@ void CameraAndroid::update_feeds() {
}
ACameraManager_deleteCameraIdList(cameraIds);
emit_signal(SNAME(CameraServer::feeds_updated_signal_name));
}
void CameraAndroid::remove_all_feeds() {

View File

@@ -80,6 +80,7 @@ void CameraLinux::_update_devices() {
free(devices);
}
call_deferred("emit_signal", SNAME(CameraServer::feeds_updated_signal_name));
usleep(1000000);
}
}

View File

@@ -363,6 +363,7 @@ void CameraMacOS::update_feeds() {
add_feed(newfeed);
};
};
emit_signal(SNAME(CameraServer::feeds_updated_signal_name));
}
void CameraMacOS::set_monitoring_feeds(bool p_monitoring_feeds) {

View File

@@ -53,6 +53,7 @@ void CameraServer::_bind_methods() {
ADD_SIGNAL(MethodInfo("camera_feed_added", PropertyInfo(Variant::INT, "id")));
ADD_SIGNAL(MethodInfo("camera_feed_removed", PropertyInfo(Variant::INT, "id")));
ADD_SIGNAL(MethodInfo(feeds_updated_signal_name));
BIND_ENUM_CONSTANT(FEED_RGBA_IMAGE);
BIND_ENUM_CONSTANT(FEED_YCBCR_IMAGE);

View File

@@ -59,6 +59,7 @@ public:
};
typedef CameraServer *(*CreateFunc)();
static inline constexpr const char feeds_updated_signal_name[] = "camera_feeds_updated";
private:
protected: