@@ -232,6 +232,7 @@ String CameraFeedLinux::get_device_name() const {
232
232
}
233
233
234
234
bool CameraFeedLinux::activate_feed () {
235
+ ERR_FAIL_COND_V_MSG (selected_format == -1 , false , " CameraFeed format needs to be set before activating." );
235
236
file_descriptor = open (device_name.ascii (), O_RDWR | O_NONBLOCK, 0 );
236
237
if (_request_buffers () && _start_capturing ()) {
237
238
buffer_decoder = _create_buffer_decoder ();
@@ -302,16 +303,14 @@ Array CameraFeedLinux::get_formats() const {
302
303
}
303
304
304
305
CameraFeed::FeedFormat CameraFeedLinux::get_format () const {
305
- return formats[selected_format];
306
+ FeedFormat feed_format = {};
307
+ return selected_format == -1 ? feed_format : formats[selected_format];
306
308
}
307
309
308
310
bool CameraFeedLinux::set_format (int p_index, const Dictionary &p_parameters) {
309
311
ERR_FAIL_COND_V_MSG (active, false , " Feed is active." );
310
312
ERR_FAIL_INDEX_V_MSG (p_index, formats.size (), false , " Invalid format index." );
311
313
312
- parameters = p_parameters.duplicate ();
313
- selected_format = p_index;
314
-
315
314
FeedFormat feed_format = formats[p_index];
316
315
317
316
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) {
344
343
}
345
344
close (file_descriptor);
346
345
346
+ parameters = p_parameters.duplicate ();
347
+ selected_format = p_index;
347
348
emit_signal (SNAME (" format_changed" ));
348
349
349
350
return true ;
@@ -353,7 +354,6 @@ CameraFeedLinux::CameraFeedLinux(const String &p_device_name) :
353
354
CameraFeed() {
354
355
device_name = p_device_name;
355
356
_query_device (device_name);
356
- set_format (0 , Dictionary ());
357
357
}
358
358
359
359
CameraFeedLinux::~CameraFeedLinux () {
0 commit comments