Merge pull request #97589 from pkowal1982/fix_97454
Some checks are pending
🔗 GHA / 📊 Static checks (push) Waiting to run
🔗 GHA / 🤖 Android (push) Blocked by required conditions
🔗 GHA / 🍏 iOS (push) Blocked by required conditions
🔗 GHA / 🐧 Linux (push) Blocked by required conditions
🔗 GHA / 🍎 macOS (push) Blocked by required conditions
🔗 GHA / 🏁 Windows (push) Blocked by required conditions
🔗 GHA / 🌐 Web (push) Blocked by required conditions
🔗 GHA / 🪲 Godot CPP (push) Blocked by required conditions

Fix error message on startup when camera is busy
This commit is contained in:
Rémi Verschelde 2024-09-29 00:47:15 +02:00
commit 1fc8208765
No known key found for this signature in database
GPG Key ID: C3336907360768E1

View File

@ -232,6 +232,7 @@ String CameraFeedLinux::get_device_name() const {
} }
bool CameraFeedLinux::activate_feed() { bool CameraFeedLinux::activate_feed() {
ERR_FAIL_COND_V_MSG(selected_format == -1, false, "CameraFeed format needs to be set before activating.");
file_descriptor = open(device_name.ascii(), O_RDWR | O_NONBLOCK, 0); file_descriptor = open(device_name.ascii(), O_RDWR | O_NONBLOCK, 0);
if (_request_buffers() && _start_capturing()) { if (_request_buffers() && _start_capturing()) {
buffer_decoder = _create_buffer_decoder(); buffer_decoder = _create_buffer_decoder();
@ -302,16 +303,14 @@ Array CameraFeedLinux::get_formats() const {
} }
CameraFeed::FeedFormat CameraFeedLinux::get_format() const { CameraFeed::FeedFormat CameraFeedLinux::get_format() const {
return formats[selected_format]; FeedFormat feed_format = {};
return selected_format == -1 ? feed_format : formats[selected_format];
} }
bool CameraFeedLinux::set_format(int p_index, const Dictionary &p_parameters) { bool CameraFeedLinux::set_format(int p_index, const Dictionary &p_parameters) {
ERR_FAIL_COND_V_MSG(active, false, "Feed is active."); ERR_FAIL_COND_V_MSG(active, false, "Feed is active.");
ERR_FAIL_INDEX_V_MSG(p_index, formats.size(), false, "Invalid format index."); ERR_FAIL_INDEX_V_MSG(p_index, formats.size(), false, "Invalid format index.");
parameters = p_parameters.duplicate();
selected_format = p_index;
FeedFormat feed_format = formats[p_index]; FeedFormat feed_format = formats[p_index];
file_descriptor = open(device_name.ascii(), O_RDWR | O_NONBLOCK, 0); 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) {
} }
close(file_descriptor); close(file_descriptor);
parameters = p_parameters.duplicate();
selected_format = p_index;
emit_signal(SNAME("format_changed")); emit_signal(SNAME("format_changed"));
return true; return true;
@ -353,7 +354,6 @@ CameraFeedLinux::CameraFeedLinux(const String &p_device_name) :
CameraFeed() { CameraFeed() {
device_name = p_device_name; device_name = p_device_name;
_query_device(device_name); _query_device(device_name);
set_format(0, Dictionary());
} }
CameraFeedLinux::~CameraFeedLinux() { CameraFeedLinux::~CameraFeedLinux() {