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.
 
(Una versione intermedia di uno stesso utente non è mostrata)
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)
+
  fd = v4l2_open("/dev/video0", O_RDWR Or O_NONBLOCK, 0)
  If fd < 0 Then Error.Raise("Impossibile aprire il file-device !")
+
  If fd < 0 Then Error.Raise("Impossibile aprire il file-device !")
 
      
 
      
  err = v4l2_ioctl(fd, VIDIOC_G_INPUT, VarPtr(index))
+
  err = v4l2_ioctl(fd, VIDIOC_G_INPUT, VarPtr(index))
  If err < 0 Then Error.Raise("Errore !")
+
  If err < 0 Then Error.Raise("Errore !")
 
      
 
      
  p = Alloc(80)
+
  p = Alloc(SizeOf(gb.Byte), 80)
  st = Memory p For Write
+
  st = Memory p For Write
   
+
  Write #st, index As Integer
  Write #st, index As Integer
+
   
+
  err = v4l2_ioctl(fd, VIDIOC_ENUMINPUT, p)
  err = v4l2_ioctl(fd, VIDIOC_ENUMINPUT, p)
+
  If err < 0 Then Error.Raise("Errore !")
  If err < 0 Then Error.Raise("Errore !")
 
 
    
 
    
  Print "== Informazioni sull'Entrata video ==\n"
+
  Print "== Informazioni sull'Entrata video ==\n"
  Print "Nome:";; String@(p + 4)
+
  Print "Nome:                 "; String@(p + 4)
 
    
 
    
  p += 36
+
  p += 36
  If Int@(p) = 1 Then
+
  If Int@(p) == 1 Then
    tp = "Questa Entrata video utilizza un sintonizzatore (RF demodulator)."
+
    tp = "Questa Entrata video utilizza un sintonizzatore (RF demodulator)."
  Else
+
  Else
    tp = "Entrata analogica in banda base (per esempio CVBS / Composite Video, S-Video, RGB)."
+
    tp = "Entrata analogica in banda base (per esempio CVBS / Composite Video, S-Video, RGB)."
  Endif
+
  Endif
  Print "Tipo:";; tp
+
  Print "Tipo:                 "; tp
 
      
 
      
  p += 4
+
  p += 4
  Print "Audioset:";; Int@(p)
+
  Print "Audioset:             "; Int@(p)
 
      
 
      
  p += 4
+
  p += 4
  Print "Sintonizzatore:";; Int@(p)
+
  Print "Sintonizzatore:       "; Int@(p)
 
      
 
      
  p += 4
+
  p += 4
  Print "Video standard:";; Long@(p)
+
  Print "Video standard:       "; Long@(p)
 
    
 
    
  p += 8
+
  p += 8
  Print "Stato del dispositivo:";; Long@(p)
+
  Print "Stato del dispositivo: "; Int@(p)
 
      
 
      
  p += 4
+
  p += 4
  Print "Funzionalità:";; Long@(p)
+
  Print "Funzionalità:         "; Int@(p)
 
      
 
      
  st.Close
+
  st.Close
  Free(p)
+
  Free(p)
 
    
 
    
 
  '''End'''
 
  '''End'''
 
  
  

Versione attuale 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


Riferimenti