Ottenere alcune informazioni sul dispositivo video di una webcam con le funzioni esterne del API di libv4l2
Da Gambas-it.org - Wikipedia.
Versione del 3 lug 2015 alle 06:32 di Vuott (Discussione | contributi) (Creata pagina con 'La risorsa '''libv4l''' è una raccolta di librerie per la gestione dei dispositivi ''video4linux2'' evitando che si debba scrivere del codice separato, nella stessa classe, p...')
La risorsa libv4l è una raccolta di librerie per la gestione dei dispositivi video4linux2 evitando che si debba scrivere del codice separato, nella stessa classe, per i diversi dispositivi. libv4l è composta da tre librerie differenti: libv4lconvert, libv4l1 e libv4l2.
La libreria libv4l2, che qui ci interessa, mette a disposizione l'API v4l2 per i dispositivi v4l2.
Per poter fruire delle risorse fornite dalla libreria v4l2 è necessario richiamare nell'applicazione Gambas la seguente libreria dinamica condivisa: "libv4l2.so.0.0.0"
Mostriamo di seguito un possibile codice per conoscere alcune informazioni generali sul dispositivo d'Entrata video di una webcam:
Private Enum O_RDONLY = 0, O_WRONLY, O_RDWR, O_NONBLOCK = &2000 Library "libv4l2:0.0.0" Private Const VIDIOC_G_INPUT As Long = 2147767846 Private Const VIDIOC_ENUMINPUT As Long = 3226490394 Private Const VIDIOC_G_OUTPUT As Long = 2147767854 Private Const VIDIOC_ENUMOUTPUT As Long = 3225966128 Private Enum V4L2_INPUT_TYPE_TUNER = 1, V4L2_INPUT_TYPE_CAMERA ' int v4l2_open(const char * file, int oflag, ...) ' Open a V4L2 device. Private Extern v4l2_open(fl As String, oflag As Integer, alterum As Integer) As Integer ' int v4l2_ioctl(int fd, unsigned long int request, ...) ' Query or select the current video input. Private Extern v4l2_ioctl(fd As Integer, request As Long, arg As Pointer) As Integer Exec "v4l2_ioctl" Public Sub Main() Dim fd, index, err As Integer Dim p As Pointer Dim st As Stream Dim tp As String fd = v4l2_open("/dev/video0", O_RDWR Or O_NONBLOCK, 0) If fd < 0 Then Error.Raise("Impossibile aprire il file-device !") err = v4l2_ioctl(fd, VIDIOC_G_INPUT, VarPtr(index)) If err < 0 Then Error.Raise("Errore !") p = Alloc(80) st = Memory p For Write Write #st, index As Integer err = v4l2_ioctl(fd, VIDIOC_ENUMINPUT, p) If err < 0 Then Error.Raise("Errore !") Print "== Informazioni sull'Entrata video ==\n" Print "Nome:";; String@(p + 4) p += 36 If Int@(p) = 1 Then tp = "Questa Entrata video utilizza un sintonizzatore (RF demodulator)." Else tp = "Entrata analogica in banda base (per esempio CVBS / Composite Video, S-Video, RGB)." Endif Print "Tipo:";; tp p += 4 Print "Audioset:";; Int@(p) p += 4 Print "Sintonizzatore:";; Int@(p) p += 4 Print "Video standard:";; Long@(p) p += 8 Print "Stato del dispositivo:";; Long@(p) p += 4 Print "Funzionalità:";; Long@(p) st.Close Free(p) End