classifiertensordecoder: Handle error cases better with labels file

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/9419>
This commit is contained in:
Olivier Crête 2025-07-17 17:12:29 -04:00 committed by GStreamer Marge Bot
parent fe0d7f249d
commit d1483d6c55

View File

@ -284,29 +284,43 @@ gst_classifier_tensor_decoder_get_property (GObject * object, guint prop_id,
} }
} }
static gboolean static guint
gst_classifier_tensor_decoder_load_labels (GstClassifierTensorDecoder * self) gst_classifier_tensor_decoder_load_labels (GstClassifierTensorDecoder * self)
{ {
gboolean rv;
gchar *content = NULL; gchar *content = NULL;
gchar **tokens = NULL; gchar **tokens = NULL;
gsize len; gsize len;
GError *err; GError *err = NULL;
GQuark val; GQuark val;
g_return_val_if_fail (self->labels_file != NULL, FALSE); if (self->labels_file == NULL) {
GST_ERROR_OBJECT (self, "Missing label file");
return 0;
}
if (!g_file_get_contents (self->labels_file, &content, &len, &err)) {
GST_ERROR_OBJECT (self, "Could not load labels file %s: %s",
self->labels_file, err->message);
g_error_free (err);
return 0;
}
rv = g_file_get_contents (self->labels_file, &content, &len, &err); if (len == 0) {
g_return_val_if_fail (rv, FALSE); GST_ERROR_OBJECT (self, "Labels file %s is empty", self->labels_file);
g_return_val_if_fail (len != 0, FALSE); g_free (content);
return 0;
}
tokens = g_strsplit (content, "\n", 0); tokens = g_strsplit (content, "\n", 0);
g_free (content); g_free (content);
if (tokens[0] != NULL) { if (tokens[0] == NULL) {
self->class_quark = g_array_new (FALSE, FALSE, sizeof (GQuark)); GST_ERROR_OBJECT (self, "Labels file %s has no labels", self->labels_file);
g_free (content);
return 0;
} }
self->class_quark = g_array_new (FALSE, FALSE, sizeof (GQuark));
for (int i = 0; tokens[i] != NULL && tokens[i][0] != '\0'; i++) { for (int i = 0; tokens[i] != NULL && tokens[i][0] != '\0'; i++) {
val = g_quark_from_string (tokens[i]); val = g_quark_from_string (tokens[i]);
g_array_append_val (self->class_quark, val); g_array_append_val (self->class_quark, val);
@ -316,7 +330,7 @@ gst_classifier_tensor_decoder_load_labels (GstClassifierTensorDecoder * self)
self->class_quark->len); self->class_quark->len);
g_strfreev (tokens); g_strfreev (tokens);
return rv; return self->class_quark->len;
} }
static GstStateChangeReturn static GstStateChangeReturn