(→Programmation UVC: des fonctions de libwebcam utilisées par uvcdynctrl) |
(→Programmation UVC: des fonctions de libwebcam utilisées par uvcdynctrl) |
||
Ligne 258 : | Ligne 258 : | ||
CResult c_enum_pixel_formats(hDevice, NULL, &size, &count); | CResult c_enum_pixel_formats(hDevice, NULL, &size, &count); | ||
CResult c_enum_devices(devices, &req_size, &count); | CResult c_enum_devices(devices, &req_size, &count); | ||
+ | CHandle c_open_device (const char *device_name) | ||
CResult c_init(void) | CResult c_init(void) | ||
a linker a libwebcam | a linker a libwebcam |
retour vers linux
Sommaire |
La QuickCam Orbit est reconnu comme un périphérique UVC.
UVC: USB Video Class en anglais
http://fr.wikipedia.org/wiki/USB_video_device_class
Linux n'est pas le seul concerné par cette norme. Solaris, Mac OS X, ... et Windows le sont aussi.
Le driver UVC est intégré au noyau depuis la version 2.6.26. Donc rien a faire a ce niveau :-) La WebCam fonctionne avec vos logiciels habituels.
Pour ce qui est de la motorisation, c'est ci-dessous.
Pour l'installer:
apt-get install uvcdynctrl
cela peux nécessiter l'installation de paquets supplémentaires. Si c'est le cas, apt-get vous proposera de les installer:
libwebcam0 uvcdynctrl-data
débranché la Web-Sphere usb et rebranché la.
De façon générale, en cas de dysfonctionnement, n'hesitez pas a la débrancher et la rebrancher avant de pousser trop loin vos investigations. (il existe une autre solution par ligne de commande pour réinitialiser les périphériques usb avec les outils udev, mais je ne l'ai plus en mémoire.)
Cet outil, en ligne de commande est a utiliser en parallèle de votre logiciel favoris de visionnement de webcam UVC.
Pour lister les périphériques accessibles par la commande uvcdynctrl
uvcdynctrl -l
Listing available devices: video0 UVC Camera (046d:0994) Media controller device /dev/media1 doesn't exist ERROR: Unable to list device entities: Invalid device or device cannot be opened. (Code: 5)
Pour lister les contrôles possibles du périphérique (par défaut /dev/video0 )
uvcdynctrl -c
Listing available controls for device /dev/video0: Brightness Contrast Saturation White Balance Temperature, Auto Gain Power Line Frequency White Balance Temperature Sharpness Backlight Compensation Exposure, Auto Exposure (Absolute) Exposure, Auto Priority Pan (relative) Tilt (relative) Pan Reset Tilt Reset Focus LED1 Mode LED1 Frequency Disable video processing Raw bits per pixel
Pour avoir le detail des parametres pour chaque option ( par defaut /dev/video0, si defferent ajouter l'option -d /dev/video9 ou autres )
uvcdynctrl -c -v
Listing available controls for device /dev/video0: Brightness ID : 0x00000001, Type : Dword, Flags : { CAN_READ, CAN_WRITE }, Values : [ 0 .. 255, step size: 1 ], Default : 128 Contrast ID : 0x00000002, Type : Dword, Flags : { CAN_READ, CAN_WRITE }, Values : [ 0 .. 255, step size: 1 ], Default : 32 Saturation ID : 0x00000004, Type : Dword, Flags : { CAN_READ, CAN_WRITE }, Values : [ 0 .. 255, step size: 1 ], Default : 32 White Balance Temperature, Auto ID : 0x00000009, Type : Boolean, Flags : { CAN_READ, CAN_WRITE }, Values : [ 0 .. 1, step size: 1 ], Default : 1 Gain ID : 0x00000003, Type : Dword, Flags : { CAN_READ, CAN_WRITE }, Values : [ 0 .. 255, step size: 1 ], Default : 0 Power Line Frequency ID : 0x0000000d, Type : Choice, Flags : { CAN_READ, CAN_WRITE }, Values : { 'Disabled'[0], '50 Hz'[1], '60 Hz'[2] }, Default : 2 White Balance Temperature ID : 0x00000008, Type : Dword, Flags : { CAN_READ, CAN_WRITE }, Values : [ 0 .. 10000, step size: 10 ], Default : 4000 Sharpness ID : 0x00000007, Type : Dword, Flags : { CAN_READ, CAN_WRITE }, Values : [ 0 .. 255, step size: 1 ], Default : 224 Backlight Compensation ID : 0x0000000c, Type : Dword, Flags : { CAN_READ, CAN_WRITE }, Values : [ 0 .. 2, step size: 1 ], Default : 1 Exposure, Auto ID : 0x0000000f, Type : Choice, Flags : { CAN_READ, CAN_WRITE }, Values : { 'Manual Mode'[1], 'Aperture Priority Mode'[3] }, Default : 3 Exposure (Absolute) ID : 0x00000011, Type : Dword, Flags : { CAN_READ, CAN_WRITE }, Values : [ 1 .. 10000, step size: 1 ], Default : 166 Exposure, Auto Priority ID : 0x00000010, Type : Boolean, Flags : { CAN_READ, CAN_WRITE }, Values : [ 0 .. 1, step size: 1 ], Default : 0 Pan (relative) ID : 0x0000001c, Type : Dword, Flags : { CAN_READ, CAN_WRITE }, Values : [ -4480 .. 4480, step size: 0 ], Default : 0 Tilt (relative) ID : 0x0000001e, Type : Dword, Flags : { CAN_READ, CAN_WRITE }, Values : [ -1920 .. 1920, step size: 0 ], Default : 0 Pan Reset ID : 0x00000022, Type : Button, Flags : { CAN_READ, CAN_WRITE }, Values : [ 0 .. 0, step size: 0 ], Default : 0 Tilt Reset ID : 0x00000023, Type : Button, Flags : { CAN_READ, CAN_WRITE }, Values : [ 0 .. 0, step size: 0 ], Default : 0 Focus ID : 0x00000014, Type : Dword, Flags : { CAN_READ, CAN_WRITE }, Values : [ 0 .. 255, step size: 1 ], Default : 0 LED1 Mode ID : 0x046d0003, Type : Choice, Flags : { CAN_READ, CAN_WRITE, IS_CUSTOM }, Values : { 'Off'[0], 'On'[1], 'Blinking'[2], 'Auto'[3] }, Default : 3 LED1 Frequency ID : 0x046d0004, Type : Dword, Flags : { CAN_READ, CAN_WRITE, IS_CUSTOM }, Values : [ 0 .. 255, step size: 1 ], Default : 0 Disable video processing ID : 0x046d0005, Type : Boolean, Flags : { CAN_READ, CAN_WRITE, IS_CUSTOM }, Values : [ 0 .. 1, step size: 1 ], Default : 0 Raw bits per pixel ID : 0x046d0006, Type : Dword, Flags : { CAN_READ, CAN_WRITE, IS_CUSTOM }, Values : [ 0 .. 1, step size: 1 ], Default : 0
Pour la motorisation, se sont les 4 options lié a Pan et Tilt qui vont nous interesser (rien ne vous empeche de faire mumuse avec les autres :-) )
Pan (relative) ID : 0x0000001c, Type : Dword, Flags : { CAN_READ, CAN_WRITE }, Values : [ -4480 .. 4480, step size: 0 ], Default : 0 Tilt (relative) ID : 0x0000001e, Type : Dword, Flags : { CAN_READ, CAN_WRITE }, Values : [ -1920 .. 1920, step size: 0 ], Default : 0 Pan Reset ID : 0x00000022, Type : Button, Flags : { CAN_READ, CAN_WRITE }, Values : [ 0 .. 0, step size: 0 ], Default : 0 Tilt Reset ID : 0x00000023, Type : Button, Flags : { CAN_READ, CAN_WRITE }, Values : [ 0 .. 0, step size: 0 ], Default : 0
On peut voir que 'Pan Reset' et 'Tilt Reset' ne prennent qu'un paramètre: 0
Pour les utiliser on lancera donc la ligne de commande:
uvcdynctrl -d /dev/video0 -s 'Pan Reset' 0
Et vous verrez votre Web-Cam tourné horizontalement et revenir au centre.
uvcdynctrl -d /dev/video0 -s 'Tilt Reset' 0
Pour la voir se recentrer verticalement
Pour le paramètre 'Pan (relative)' les valeurs acceptées vont de -4480 à 4480 comme indique pour Values
Si vous tenter de lire la valeur actuel des 'Pan (relative)' et 'Tilt (relative)' par la commande
uvcdynctrl -d /dev/video0 -g 'Pan (relative)'
ou
uvcdynctrl -d /dev/video0 -g 'Tilt (relative)'
Vous aurez un beau message d'erreur:
ERROR: Unable to retrieve control value: A Video4Linux2 API call returned an unexpected error 22. (Code: 12)
Vous essayez de lire une valeur de position relative ( relative a elle meme), qui par définition est relative. C'est a dire égale a 0.
On regrette donc que ces 2 options soient en "CAN_READ", ce qui est de la responsabilité du constructeur ...
vous ne pouvez les utiliser qu'en écriture. Exemple de commande a passer:
uvcdynctrl -d /dev/video0 -s 'Pan (relative)' -- -4480
uvcdynctrl -d /dev/video0 -s 'Tilt (relative)' 1920
La 1ere commande va donc tenter de déplacer vers la droite (-) de 4480 unités ( le max accepté )par rapport a la position actuelle. La 2eme commande va tenter de deplacer vers le bas (+) de 1920 unités (le max accepter ) par rapport a la position actuelle.
#include <webcam.h> CResult c_get_control (CHandle hDevice, CControlId control_id, CControlValue *value) CResult c_set_control (CHandle hDevice, CControlId control_id, const CControlValue *value) CResult c_enum_events (CHandle hDevice, CEvent *events, unsigned int *size, unsigned int *count) CResult c_enum_frame_intervals(hDevice, pixelformat, framesize, NULL, &size, &count) CResult c_enum_frame_sizes(hDevice, pixelformat, NULL, &size, &count); CResult c_enum_pixel_formats(hDevice, NULL, &size, &count); CResult c_enum_devices(devices, &req_size, &count); CHandle c_open_device (const char *device_name) CResult c_init(void)
a linker a libwebcam