/** * gst_niimaqsrc_close_interface: * src: #GstNiImaqSrc instance * * Close IMAQ session and interface * */ static gboolean gst_niimaqsrc_close_interface (GstNiImaqSrc * src) { Int32 rval; gboolean result = TRUE; /* close IMAQ session and interface */ if (src->sid) { rval = imgClose (src->sid, TRUE); if (rval != IMG_ERR_GOOD) { gst_niimaqsrc_report_imaq_error (rval); result = FALSE; } else GST_LOG_OBJECT (src, "IMAQ session closed"); src->sid = 0; } if (src->iid) { rval = imgClose (src->iid, TRUE); if (rval != IMG_ERR_GOOD) { gst_niimaqsrc_report_imaq_error (rval); result = FALSE; } else { GST_LOG_OBJECT (src, "IMAQ interface closed"); } src->iid = 0; } return result; }
void CameraClose() { fastCMOS->stop(); delete fastCMOS; fastCMOS = 0; imgClose(session, 0); imgClose(ifid, 1); CloseDisplay(); }
/** * gst_niimaqsrc_class_probe_interfaces: * @klass: #GstNiImaqClass * @check: whether to enumerate interfaces * * Probes NI-IMAQ driver for available interfaces * * Returns: TRUE always */ static gboolean gst_niimaqsrc_class_probe_interfaces (GstNiImaqSrcClass * klass, gboolean check) { if (!check) { guint32 n; gchar name[256]; /* clear interface list */ while (interfaces) { gchar *iface = interfaces->data; interfaces = g_list_remove (interfaces, iface); g_free (iface); } GST_LOG_OBJECT (klass, "About to probe for IMAQ interfaces"); /* enumerate interfaces, limiting ourselves to the first 64 */ for (n = 0; n < 64; n++) { guint32 iid; guint32 nports; guint32 port; gchar *iname; uInt32 rval; /* get interface names until there are no more */ if (rval = imgInterfaceQueryNames (n, name) != 0) { gst_niimaqsrc_report_imaq_error (rval); break; } /* ignore NICFGen */ if (g_strcmp0 (name, "NICFGen.iid") == 0) continue; /* try and open the interface */ if (rval = imgInterfaceOpen (name, &iid) != 0) { gst_niimaqsrc_report_imaq_error (rval); continue; } /* find how many ports the interface provides */ rval = imgGetAttribute (iid, IMG_ATTR_NUM_PORTS, &nports); gst_niimaqsrc_report_imaq_error (rval); rval = imgClose (iid, TRUE); gst_niimaqsrc_report_imaq_error (rval); /* iterate over all the available ports */ for (port = 0; port < nports; port++) { /* if the there are multiple ports append the port number */ if (nports > 1) iname = g_strdup_printf ("%s::%d", name, port); else iname = g_strdup (name); /* TODO: should check to see if a camera is actually attached */ interfaces = g_list_append (interfaces, iname); GST_DEBUG_OBJECT (klass, "Adding interface '%s' to list", iname); } } init = TRUE; } klass->interfaces = interfaces; return init; }