Ich möchte eine USB-Kamera an ein eingebettetes Gerät anschließen. Mein Gerät OS ist Embedded Linux und unterstützt USB Host. Ich kann leicht auf USB-Port lesen und schreiben, aber ich weiß nicht, wie ich ein Bild von der Kamera erfassen kann. Gibt es ein Standardprotokoll für eine USB-Kamera, mit dem ich Bilder aufnehmen kann?USB-Kamera-Protokoll
2
A
Antwort
2
Die meisten Kameras, die dies unterstützen, verwenden Picture Transfer Protocol (PTP). Unter Linux gibt es dafür eine Unterstützung für viele Kameras über libgphoto2.
können Sie angeschlossene Geräte auflisten etwas mit wie:
CameraList *xlist = NULL;
ret = gp_list_new (&xlist);
if (ret < GP_OK) goto out;
if (!portinfolist) {
/* Load all the port drivers we have... */
ret = gp_port_info_list_new (&portinfolist);
if (ret < GP_OK) goto out;
ret = gp_port_info_list_load (portinfolist);
if (ret < 0) goto out;
ret = gp_port_info_list_count (portinfolist);
if (ret < 0) goto out;
}
/* Load all the camera drivers we have... */
ret = gp_abilities_list_new (&abilities);
if (ret < GP_OK) goto out;
ret = gp_abilities_list_load (abilities, context);
if (ret < GP_OK) goto out;
/* ... and autodetect the currently attached cameras. */
ret = gp_abilities_list_detect (abilities, portinfolist, xlist, context);
if (ret < GP_OK) goto out;
/* Filter out the "usb:" entry */
ret = gp_list_count (xlist);
if (ret < GP_OK) goto out;
for (i=0;i<ret;i++) {
const char *name, *value;
gp_list_get_name (xlist, i, &name);
gp_list_get_value (xlist, i, &value);
if (!strcmp ("usb:",value)) continue;
gp_list_append (list, name, value);
}
out:
gp_list_free (xlist);
return gp_list_count(list);
(Entnommen aus libgphoto2-2.4.11/examples/autodetect.c)
Es scheint, dass libgphoto2 eine große Bibliothek ist. Ich brauche eine einfache Möglichkeit, die Kamera selbst zu benutzen. –
@MirMiladHosseiny In diesem Fall möchten Sie vielleicht die Quelle für [ptpfs] (http://www.dankulp.com/ptpfs/) ansehen, die alle USB-Gespräche direkt im Userspace ausführt. – Flexo