Ottenere alcune informazioni sul dispositivo video di una webcam con le funzioni esterne del API di libv4l2: differenze tra le versioni
Vai alla navigazione
Vai alla ricerca
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| 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 dinamica condivisa: "''libv4l2.so.0.0.0''" | 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: | Mostriamo di seguito un possibile codice per conoscere alcune informazioni generali sul dispositivo d'Entrata video di una webcam: | ||
| 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''' | '''End''' | ||
Versione delle 20:02, 2 dic 2021
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
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