@@ -232,6 +232,7 @@ String CameraFeedLinux::get_device_name() const {
232232}
233233
234234bool CameraFeedLinux::activate_feed () {
235+ ERR_FAIL_COND_V_MSG (selected_format == -1 , false , " CameraFeed format needs to be set before activating." );
235236 file_descriptor = open (device_name.ascii (), O_RDWR | O_NONBLOCK, 0 );
236237 if (_request_buffers () && _start_capturing ()) {
237238 buffer_decoder = _create_buffer_decoder ();
@@ -302,16 +303,14 @@ Array CameraFeedLinux::get_formats() const {
302303}
303304
304305CameraFeed::FeedFormat CameraFeedLinux::get_format () const {
305- return formats[selected_format];
306+ FeedFormat feed_format = {};
307+ return selected_format == -1 ? feed_format : formats[selected_format];
306308}
307309
308310bool CameraFeedLinux::set_format (int p_index, const Dictionary &p_parameters) {
309311 ERR_FAIL_COND_V_MSG (active, false , " Feed is active." );
310312 ERR_FAIL_INDEX_V_MSG (p_index, formats.size (), false , " Invalid format index." );
311313
312- parameters = p_parameters.duplicate ();
313- selected_format = p_index;
314-
315314 FeedFormat feed_format = formats[p_index];
316315
317316 file_descriptor = open (device_name.ascii (), O_RDWR | O_NONBLOCK, 0 );
@@ -344,6 +343,8 @@ bool CameraFeedLinux::set_format(int p_index, const Dictionary &p_parameters) {
344343 }
345344 close (file_descriptor);
346345
346+ parameters = p_parameters.duplicate ();
347+ selected_format = p_index;
347348 emit_signal (SNAME (" format_changed" ));
348349
349350 return true ;
@@ -353,7 +354,6 @@ CameraFeedLinux::CameraFeedLinux(const String &p_device_name) :
353354 CameraFeed() {
354355 device_name = p_device_name;
355356 _query_device (device_name);
356- set_format (0 , Dictionary ());
357357}
358358
359359CameraFeedLinux::~CameraFeedLinux () {
0 commit comments