Differenze tra le versioni di "Ottenere alcune informazioni sul dispositivo video di una webcam con le funzioni esterne del API di libv4l2"
Da Gambas-it.org - Wikipedia.
(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...') |
|||
(3 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 3: | Riga 3: | ||
La libreria ''libv4l2'', che qui ci interessa, mette a disposizione l'API ''v4l2'' per i dispositivi ''v4l2''. | 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 | + | Per poter fruire delle risorse fornite dalla libreria ''v4l2'' è necessario richiamare nell'applicazione Gambas la seguente libreria 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: | Mostriamo di seguito un possibile codice per conoscere alcune informazioni generali sul dispositivo d'Entrata video di una webcam: | ||
Riga 25: | Riga 24: | ||
<FONT Color=gray>' ''int v4l2_ioctl(int fd, unsigned long int request, ...)'' | <FONT Color=gray>' ''int v4l2_ioctl(int fd, unsigned long int request, ...)'' | ||
' ''Query or select the current video input.''</font> | ' ''Query or select the current video input.''</font> | ||
− | Private Extern v4l2_ioctl(fd As Integer, request As Long, arg As Pointer) As Integer | + | Private Extern v4l2_ioctl(fd As Integer, request As Long, arg As Pointer) As Integer |
− | + | Public Sub Main() | |
Dim fd, index, err As Integer | Dim fd, index, err As Integer | ||
Riga 35: | Riga 34: | ||
Dim tp As String | 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(SizeOf(gb.Byte), 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: "; Int@(p) | |
− | + | p += 4 | |
− | + | Print "Funzionalità: "; Int@(p) | |
− | + | st.Close | |
− | + | Free(p) | |
− | + | End | |
− | |||
Versione attuale delle 18:37, 9 giu 2024
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 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 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(SizeOf(gb.Byte), 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: "; Int@(p) p += 4 Print "Funzionalità: "; Int@(p) st.Close Free(p) End