Add CameraServer camera_feeds_updated signal, and document async behavior
This commit is contained in:
@ -49,6 +49,29 @@
|
|||||||
<member name="monitoring_feeds" type="bool" setter="set_monitoring_feeds" getter="is_monitoring_feeds" default="false">
|
<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.
|
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.
|
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>
|
</member>
|
||||||
</members>
|
</members>
|
||||||
<signals>
|
<signals>
|
||||||
@ -64,6 +87,11 @@
|
|||||||
Emitted when a [CameraFeed] is removed (e.g. a webcam is unplugged).
|
Emitted when a [CameraFeed] is removed (e.g. a webcam is unplugged).
|
||||||
</description>
|
</description>
|
||||||
</signal>
|
</signal>
|
||||||
|
<signal name="camera_feeds_updated">
|
||||||
|
<description>
|
||||||
|
Emitted when camera feeds are updated.
|
||||||
|
</description>
|
||||||
|
</signal>
|
||||||
</signals>
|
</signals>
|
||||||
<constants>
|
<constants>
|
||||||
<constant name="FEED_RGBA_IMAGE" value="0" enum="FeedImage">
|
<constant name="FEED_RGBA_IMAGE" value="0" enum="FeedImage">
|
||||||
|
|||||||
@ -474,6 +474,7 @@ void CameraAndroid::update_feeds() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ACameraManager_deleteCameraIdList(cameraIds);
|
ACameraManager_deleteCameraIdList(cameraIds);
|
||||||
|
emit_signal(SNAME(CameraServer::feeds_updated_signal_name));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CameraAndroid::remove_all_feeds() {
|
void CameraAndroid::remove_all_feeds() {
|
||||||
|
|||||||
@ -80,6 +80,7 @@ void CameraLinux::_update_devices() {
|
|||||||
free(devices);
|
free(devices);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
call_deferred("emit_signal", SNAME(CameraServer::feeds_updated_signal_name));
|
||||||
usleep(1000000);
|
usleep(1000000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -363,6 +363,7 @@ void CameraMacOS::update_feeds() {
|
|||||||
add_feed(newfeed);
|
add_feed(newfeed);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
emit_signal(SNAME(CameraServer::feeds_updated_signal_name));
|
||||||
}
|
}
|
||||||
|
|
||||||
void CameraMacOS::set_monitoring_feeds(bool p_monitoring_feeds) {
|
void CameraMacOS::set_monitoring_feeds(bool p_monitoring_feeds) {
|
||||||
|
|||||||
@ -53,6 +53,7 @@ void CameraServer::_bind_methods() {
|
|||||||
|
|
||||||
ADD_SIGNAL(MethodInfo("camera_feed_added", PropertyInfo(Variant::INT, "id")));
|
ADD_SIGNAL(MethodInfo("camera_feed_added", PropertyInfo(Variant::INT, "id")));
|
||||||
ADD_SIGNAL(MethodInfo("camera_feed_removed", 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_RGBA_IMAGE);
|
||||||
BIND_ENUM_CONSTANT(FEED_YCBCR_IMAGE);
|
BIND_ENUM_CONSTANT(FEED_YCBCR_IMAGE);
|
||||||
|
|||||||
@ -59,6 +59,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
typedef CameraServer *(*CreateFunc)();
|
typedef CameraServer *(*CreateFunc)();
|
||||||
|
static inline constexpr const char feeds_updated_signal_name[] = "camera_feeds_updated";
|
||||||
|
|
||||||
private:
|
private:
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
Reference in New Issue
Block a user