return ret;
}
+static int __vision_source_v4l2_alloc_fmt(vision_source_v4l2_s *vs_handle, size_t dev_count,
+ std::vector<string> &dev_name,
+ std::vector<std::vector<fmt_info> > &dev_fmt_list)
+{
+ vs_handle->fmt = (media_format_h **) calloc(dev_count, sizeof(media_format_h *));
+ if (!vs_handle->fmt)
+ return VISION_SOURCE_ERROR_OUT_OF_MEMORY;
+
+ for (size_t i = 0; i < dev_count; i++) {
+ vs_handle->dev_info[i].index = i;
+ vs_handle->fmt[i] = (media_format_h *) calloc(dev_fmt_list[i].size(), sizeof(media_format_h));
+ if (!vs_handle->fmt[i]) {
+ for (size_t j = 0; j < i; j++) {
+ for (size_t k = 0; k < vs_handle->fmt_list[j].size(); k++)
+ media_format_unref(vs_handle->fmt[j][k]);
+
+ free(vs_handle->fmt[j]);
+ }
+ free(vs_handle->fmt);
+ return VISION_SOURCE_ERROR_OUT_OF_MEMORY;
+ }
+ }
+
+ for (size_t i = 0; i < dev_count; i++) {
+ snprintf(vs_handle->dev_info[i].name, DEVICE_NAME_LENGTH_MAX, "%s", dev_name[i].c_str());
+
+ for (size_t j = 0; j < dev_fmt_list[i].size(); j++) {
+ media_format_h fmt;
+ media_format_create(&fmt);
+ media_format_set_video_mime(fmt, dev_fmt_list[i][j].type);
+ media_format_set_video_width(fmt, dev_fmt_list[i][j].width);
+ media_format_set_video_height(fmt, dev_fmt_list[i][j].height);
+ media_format_set_video_frame_rate(fmt, dev_fmt_list[i][j].fps);
+ vs_handle->fmt[i][j] = fmt;
+ }
+ }
+ return VISION_SOURCE_ERROR_NONE;
+}
+
static int __vision_source_list_devices(vision_source_v4l2_s *vs_handle)
{
glob_t glob_buf;
return VISION_SOURCE_ERROR_OUT_OF_MEMORY;
}
- vs_handle->fmt = (media_format_h **) calloc(dev_count, sizeof(media_format_h *));
- if (!vs_handle->fmt) {
- return VISION_SOURCE_ERROR_OUT_OF_MEMORY;
- }
-
- for (size_t i = 0; i < dev_count; i++) {
- vs_handle->dev_info[i].index = i;
- strncpy(vs_handle->dev_info[i].name, dev_name[i].c_str(), DEVICE_NAME_LENGTH_MAX);
- vs_handle->dev_info[i].name[DEVICE_NAME_LENGTH_MAX - 1] = '\0';
- vs_handle->fmt[i] = (media_format_h *) calloc(dev_fmt_list[i].size(), sizeof(media_format_h));
- if (!vs_handle->fmt[i]) {
- return VISION_SOURCE_ERROR_OUT_OF_MEMORY;
- }
-
- for (size_t j = 0; j < dev_fmt_list[i].size(); j++) {
- media_format_h fmt;
- media_format_create(&fmt);
- media_format_set_video_mime(fmt, dev_fmt_list[i][j].type);
- media_format_set_video_width(fmt, dev_fmt_list[i][j].width);
- media_format_set_video_height(fmt, dev_fmt_list[i][j].height);
- media_format_set_video_frame_rate(fmt, dev_fmt_list[i][j].fps);
- vs_handle->fmt[i][j] = fmt;
- }
+ ret = __vision_source_v4l2_alloc_fmt(vs_handle, dev_count, dev_name, dev_fmt_list);
+ if (ret != VISION_SOURCE_ERROR_NONE) {
+ free(vs_handle->dev_info);
+ vs_handle->dev_info = nullptr;
}
return ret;