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.
Riga 70: Riga 70:
 
    
 
    
 
   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

Versione delle 07:35, 3 lug 2015

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(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