You've already forked godot
							
							
				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:
		@@ -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">
 | 
			
		||||
 
 | 
			
		||||
@@ -474,6 +474,7 @@ void CameraAndroid::update_feeds() {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ACameraManager_deleteCameraIdList(cameraIds);
 | 
			
		||||
	emit_signal(SNAME(CameraServer::feeds_updated_signal_name));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void CameraAndroid::remove_all_feeds() {
 | 
			
		||||
 
 | 
			
		||||
@@ -80,6 +80,7 @@ void CameraLinux::_update_devices() {
 | 
			
		||||
			free(devices);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		call_deferred("emit_signal", SNAME(CameraServer::feeds_updated_signal_name));
 | 
			
		||||
		usleep(1000000);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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) {
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -59,6 +59,7 @@ public:
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	typedef CameraServer *(*CreateFunc)();
 | 
			
		||||
	static inline constexpr const char feeds_updated_signal_name[] = "camera_feeds_updated";
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
protected:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user