Author: duncan
Date: Fri Nov  2 16:01:27 2007
New Revision: 10060

Log:
Copied over the rel-1 version
Tidy up of the code and a small fix


Modified:
   branches/rel-1-7/freevo/src/tv/v4l2.py

Modified: branches/rel-1-7/freevo/src/tv/v4l2.py
==============================================================================
--- branches/rel-1-7/freevo/src/tv/v4l2.py      (original)
+++ branches/rel-1-7/freevo/src/tv/v4l2.py      Fri Nov  2 16:01:27 2007
@@ -39,6 +39,7 @@
 
 import config
 
+
 # Different formats depending on word size
 bit32 = struct.calcsize('L') == struct.calcsize('I')
 
@@ -238,11 +239,11 @@
 class Videodev:
     def __init__(self, device):
         self.chanlist = None
-        self.device = os.open (device, os.O_TRUNC)
+        self.device = os.open(device, os.O_TRUNC)
         if self.device < 0:
             sys.exit('Error: %d' % self.device)
         else:
-            _debug_('Video Opened at %s' % device)
+            _debug_('Video opened for %r' % device)
 
         results           = self.querycap()
         self.driver       = results[0]
@@ -250,12 +251,12 @@
         self.bus_info     = results[2]
         self.version      = results[3]
         self.capabilities = results[4]
-        self.inputs       = {}
-        self.standards    = {}
-        self.controls     = {}
         self.inputs       = self.enuminputs()
         self.standards    = self.enumstds()
         self.controls     = self.enumcontrols()
+        #print 'inputs=%r' % self.inputs
+        #print 'standards=%r' % self.standards
+        #print 'controls=%r' % self.controls
 
 
     def getdriver(self):
@@ -383,6 +384,14 @@
             raise
 
 
+    def getinputbyname(self, name):
+        """
+        Get the TV input by name, eg: TELEVISION, s-video
+        """
+        v_input = name.lower()
+        return self.inputs[v_input]
+
+
     def setinputbyname(self, name):
         """
         Set the TV input by name, eg: TELEVISION, s-video
@@ -417,7 +426,7 @@
             while 1:
                 (index, id, name, frameperiod, framelines, reserved) = 
self.enumstd(num)
                 name = name.rstrip('\0')
-                res[name.lower()] = (index, id, name, frameperiod, framelines)
+                res[name.upper()] = (index, id, name, frameperiod, framelines)
                 num += 1
         except IOError, e:
             pass
@@ -444,6 +453,14 @@
         _debug_('setstd: val=%r, r=%r' % (val, r), 3)
 
 
+    def getstdbyname(self, name):
+        """
+        Get the TV standard by name, eg: PAL-BGH, secam-dk, etc
+        """
+        v_norm = name.upper()
+        return self.standards[v_norm]
+
+
     def setstdbyname(self, name):
         """
         Set the TV standard by name, eg: PAL-BGH, secam-dk, etc
@@ -451,7 +468,7 @@
         v_norm = name.upper()
         try:
             _debug_('setstdbyname: %s (0x%08X) set' % (name, NORMS[v_norm]))
-            self.setstd(NORMS.get(v_norm))
+            self.setstd(NORMS[v_norm])
         except KeyError, e:
             _debug_('setstdbyname failed: %s' % (e), DERROR)
             _debug_('possible are: %r' % (NORMS.keys()), DINFO)
@@ -509,9 +526,9 @@
 
 
     def getctrl(self, id):
-        '''
+        """
         Get the value of a control
-        '''
+        """
         val = struct.pack(CTRL_ST, id, 0)
         r = fcntl.ioctl(self.device, i32(G_CTRL_NO), val)
         res = struct.unpack(CTRL_ST, r)
@@ -520,9 +537,9 @@
 
 
     def setctrl(self, id, value):
-        '''
+        """
         Set the value of a control
-        '''
+        """
         val = struct.pack(CTRL_ST, id, value)
         r = fcntl.ioctl(self.device, i32(S_CTRL_NO), val)
         res = struct.unpack(CTRL_ST, r)
@@ -530,11 +547,11 @@
 
 
     def getextctrl(self, id):
-        '''
+        """
         Get the value of an external control
         EXT_CTRL_type->id, res1, res2, value
         EXT_CTRLS_ST->class, count, error_idx, res1, res2, ptr
-        '''
+        """
         extctrl = array.array('B')
         extctrl.fromstring(struct.pack(EXT_CTRL_ST, id, 0, 0, 0))
         extctrl_p = extctrl.buffer_info()[0]
@@ -552,9 +569,9 @@
 
 
     def setextctrl(self, id, value):
-        '''
+        """
         Set the value of an external control
-        '''
+        """
         extctrl = array.array('B')
         extctrl.fromstring(struct.pack(EXT_CTRL_ST, id, 0, 0, value))
         extctrl_p = extctrl.buffer_info()[0]
@@ -615,12 +632,16 @@
 
 
     def ctrlname(self, name):
-        ''' converts a control to lowercase and replaces spaces with 
underscore, like v4l2-ctl
-        '''
+        """
+        converts a control to lowercase and replaces spaces with underscore, 
like v4l2-ctl
+        """
         return name.replace(' ', '_').lower()
 
 
     def listcontrols(self):
+        """
+        prints all the controls
+        """
         id = V4L2_CTRL_FLAG_NEXT_CTRL
         while 1:
             try:
@@ -643,39 +664,39 @@
 
 
     def enumcontrols(self):
-        self.controls = {}
+        res = {}
         id = V4L2_CTRL_FLAG_NEXT_CTRL
         while 1:
             try:
-                res = self.queryctrl(id)
-                (id, type, name, min, max, step, default, flags, value) = res
+                ctrl = self.queryctrl(id)
+                (id, type, name, min, max, step, default, flags, value) = ctrl
                 if flags == V4L2_CTRL_FLAG_DISABLED:
-                    id = res[0] | V4L2_CTRL_FLAG_NEXT_CTRL
+                    id = ctrl[0] | V4L2_CTRL_FLAG_NEXT_CTRL
                     continue
-                key = self.ctrlname(name)
-                self.controls[key] = res
-                id = res[0] | V4L2_CTRL_FLAG_NEXT_CTRL
+                res[self.ctrlname(name)] = ctrl
+                id = ctrl[0] | V4L2_CTRL_FLAG_NEXT_CTRL
             except IOError, e:
                 break
         if id != V4L2_CTRL_FLAG_NEXT_CTRL:
-            return self.controls
+            return res
 
         id = V4L2_CID_USER_BASE
         for id in range(V4L2_CID_FIRSTP1, V4L2_CID_LASTP1):
             try:
-                res = self.queryctrl(id)
-                (id, type, name, min, max, step, default, flags, value) = res
+                ctrl = self.queryctrl(id)
+                (id, type, name, min, max, step, default, flags, value) = ctrl
                 if flags & V4L2_CTRL_FLAG_DISABLED:
                     continue
+                res[self.ctrlname(name)] = ctrl
             except IOError, e:
                 break
-        return self.controls
+        return res
 
 
     def findcontrol(self, id):
-        '''
+        """
         find a control by id
-        '''
+        """
         for ctrl in self.controls.keys():
             if self.controls[ctrl][0] == id:
                 return ctrl
@@ -683,9 +704,9 @@
 
 
     def getcontrol(self, name):
-        '''
+        """
         get the control record by name
-        '''
+        """
         key = self.ctrlname(name)
         if not self.controls.has_key(key):
             _debug_('control \"%s\" does not exists' % (name), DWARNING)
@@ -695,9 +716,9 @@
 
 
     def setcontrol(self, name, value):
-        '''
+        """
         get the control record by name
-        '''
+        """
         key = self.ctrlname(name)
         if not self.controls.has_key(key):
             _debug_('control \"%s\" does not exists' % (name), DWARNING)
@@ -713,8 +734,8 @@
 
 
     def updatecontrol(self, name, value):
-        ''' set the control record by name
-        '''
+        """ set the control record by name
+        """
         if self.getcontrol(name) == None:
             return
 
@@ -728,8 +749,8 @@
 
 
     def init_settings(self):
-        ''' initialise the V4L2 setting
-        '''
+        """ initialise the V4L2 setting
+        """
         (v_norm, v_input, v_clist, v_dev) = config.TV_SETTINGS.split()
         self.inputs = self.enuminputs()
         self.standards = self.enumstds()
@@ -769,7 +790,10 @@
          sizeimage, colorspace) = self.getfmt()
         print "Width: %i, Height: %i" % (width, height)
 
-        print "Read Frequency: %i" % self.getfreq()
+        try:
+            print "Read Frequency: %i" % self.getfreq()
+        except IOError, e:
+            pass
 
 
 class V4LGroup:
@@ -797,7 +821,11 @@
     config.DEBUG = 3
     config.LOGGING = config.logging.DEBUG
 
-    viddev=Videodev('/dev/video0')
+    videodev = '/dev/video0'
+    if len(sys.argv) > 1:
+        videodev = sys.argv[1]
+    viddev=Videodev(videodev)
+    print 'Device = %r' % videodev
     print 'Driver = \"%s\"' % viddev.getdriver()
     print 'Driver Version = %02d.%02d' % (viddev.getversion() / 256, 
viddev.getversion() % 256)
     viddev.print_settings()
@@ -846,109 +874,28 @@
     print '\'%s\'         : 0x%08X, ' % ('ALL', NORMS['ALL'])
 
     inputs = viddev.enuminputs()
-    print inputs
+    print 'inputs = %r' % (inputs.keys())
     standards = viddev.enumstds()
-    print standards
-    viddev.setinputbyname('Composite1')
-    print viddev.getinput()
-    viddev.setstdbyname('PAL')
-    print '0x%08X' % viddev.getstd()
-    viddev.setinputbyname('Television')
-    print viddev.getinput()
-
-    #dict = viddev.enumcontrols()
-    #keys = list(dict)
-    #keys.sort()
-    #print keys
-    #for ctrl in keys:
-    #    print '%-28s : %r' % (ctrl, dict[ctrl], )
-
-    ##print viddev.querycap()
-    #inp = viddev.getinput()
-    #viddev.setinput(inp)
-    #print 'querycap:', viddev.querycap()
-    #fmt = viddev.getstd()
-    #print 'fmt:', fmt
-    #std = viddev.getfmt()
-    #print 'std:', std
-    #viddev.setfmt(720, 576)
-    #std = viddev.getfmt()
-    #print 'std:', std
-    #print 'CONTROLS'
-    #viddev.listcontrols()
-    #dict = viddev.enumcontrols()
-    #viddev.setextctrl(0x009909c9, 2)
-    #print '0x009909c9 = %d' % viddev.getextctrl(0x009909c9)
-    #viddev.setextctrl(0x009909cf, 7000000)
-    #print '0x009909cf = %d' % viddev.getextctrl(0x009909cf)
-    #print '0x009909cf = %d' % viddev.getextctrl(0x009909cf)
-    #try:
-        #bitrate = viddev.getcontrol('Video Bitrate')
-        #viddev.updatecontrol('Video Bitrate', bitrate+1)
-        #print 'Video Bitrate = %d' % viddev.getcontrol('Video Bitrate')
-    #except:
-        #pass
-    #print '0x009909cf = %d' % viddev.getextctrl(0x009909cf)
-    #print 'SIZES'
-    #print 'QUERYCAP_ST=%s %s' % (QUERYCAP_ST, struct.calcsize(QUERYCAP_ST))
-    #print 'FREQUENCY_ST=%s %s' % (FREQUENCY_ST, struct.calcsize(FREQUENCY_ST))
-    #print 'ENUMSTD_ST=%s %s' % (ENUMSTD_ST, struct.calcsize(ENUMSTD_ST))
-    #print 'STANDARD_ST=%s %s' % (STANDARD_ST, struct.calcsize(STANDARD_ST))
-    #print 'ENUMINPUT_ST=%s %s' % (ENUMINPUT_ST, struct.calcsize(ENUMINPUT_ST))
-    #print 'INPUT_ST=%s %s' % (INPUT_ST, struct.calcsize(INPUT_ST))
-    #print 'FMT_ST=%s %s' % (FMT_ST, struct.calcsize(FMT_ST))
-    #print 'TUNER_ST=%s %s' % (TUNER_ST, struct.calcsize(TUNER_ST))
-    #print 'AUDIO_ST=%s %s' % (AUDIO_ST, struct.calcsize(AUDIO_ST))
-    #print 'EXT_CTRL_ST=%s %s' % (EXT_CTRL_ST, struct.calcsize(EXT_CTRL_ST))
-    #print 'EXT_CTRLS_ST=%s %s' % (EXT_CTRLS_ST, struct.calcsize(EXT_CTRLS_ST))
-
-    #'''
-    #viddev=Videodev('/dev/video0')
-    #print
-    #print viddev.querycap()
-    #inp = viddev.getinput()
-    #print 'viddev.getinput=%s' % (inp)
-    #viddev.setinput(inp)
-    #print 'viddev.setinput okay'
-    #fmt = viddev.getfmt()
-    #(buf_type, width, height, pixelformat, field, bytesperline, #sizeimage, 
colorspace) = fmt
-    #print 'viddev.getfmt=%s' % (buf_type)
-    #print viddev.enuminput(inp)
-    #for i in range(0, 99):
-        #try:
-            #print viddev.gettuner(i)
-        #except IOError:
-            #break
-    #print viddev.getaudio(0)
-    #print viddev.setfreq(2132)
-    #print viddev.getfreq()
-    #print viddev.setfreq(8948)
-    #print viddev.getfreq()
-    #print viddev.getfreq2()
-
-    #DEBUG=0
-    #viddev.setextctrl(0x009909c9, 2)
-    #print '0x009909c9 = %d' % viddev.getextctrl(0x009909c9)
-    #viddev.setextctrl(0x009909cf, 7000000)
-    #print '0x009909cf = %d' % viddev.getextctrl(0x009909cf)
-    #bitrate = viddev.getcontrol('Video Bitrate')
-    #viddev.updatecontrol('Video Bitrate', bitrate+1)
-    #print 'Video Bitrate = %d' % viddev.getcontrol('Video Bitrate')
-    #print '0x009909cf = %d' % viddev.getextctrl(0x009909cf)
-
-    #stream_type = 4
-    #viddev.updatecontrol('Stream Type', stream_type)
-    ##viddev.setcontrol('Stream Type', stream_type)
-    ##viddev.setextctrl(0x00990900, stream_type)
-    #print 'Stream Type = %d' % viddev.getcontrol('Stream Type')
-    #print '0x00990900 = %d' % viddev.getextctrl(0x00990900)
-    #DEBUG=4
-    #print 'getfreq:', viddev.getfreq()
-    #'''
+    print 'standards = %r' % (standards.keys())
+    try:
+        viddev.setinputbyname('Composite1')
+        print viddev.getinput()
+    except KeyError:
+        pass
+    try:
+        viddev.setstdbyname('PAL')
+        print '0x%08X' % viddev.getstd()
+    except (KeyError, IOError):
+        pass
+    try:
+        viddev.setinputbyname('Television')
+        print viddev.getinput()
+    except KeyError:
+        pass
 
     viddev.close()
 
-#'''
+#"""
 #To run this as standalone use the following before running python v4l2.py
 #pythonversion=$(python -V 2>&1 | cut -d" " -f2 | cut -d"." -f1-2)
 #export PYTHONPATH=/usr/lib/python${pythonversion}/site-packages/freevo
@@ -958,5 +905,5 @@
 #export RUNAPP=""
 #python v4l2.py
 #OR
-#freevo execute v4l2.py
-#'''
+#freevo execute v4l2.py [<video device>]
+#"""

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to