Example #1
0
 def start(self, quality, bitrate, duration):
     """ Start recording a video of quality and duration """
     # organize params for raspivid command
     filename = '%s/%s_%smbps_%s.h264' % (self._working_directory,
                                   quality,
                                   bitrate,
                                   datetime.now().strftime('%Y.%m.%d_%H%M'))
     params = {'filename': filename,
               't': int(duration * 1000),
               'b': int(bitrate * 10**6)}
     params.update(self._quality_map[quality])
     raspivid_command = 'raspivid --hflip --vflip --vstab --width %(w)s --height %(h)s --framerate 25 --bitrate %(b)s --timeout %(t)s --output %(filename)s' % params
 
     self._pid = self._run_and_get_pid(raspivid_command)
     print 'pid is', self._pid
     self._active = True
     self.started_at = time.time()
     
     # memorize recording options
     self.filename = filename
     self.quality = quality
     self.bitrate = bitrate
 
     # don't interrupt raspivid, it will finish itself
     # we're just interested when recording is finished
     self._timer_id = Watchdog.set_timeout(duration + 1, self.stop)
     print 'recorder started'
Example #2
0
 def redraw_menu(btn):
     # boooooo
     global state
     global menu_timer_id
     
     if state != 'menu': show_menu()
     
     # timers
     Watchdog.clear_timeout(menu_timer_id)
     menu_timer_id = Watchdog.set_timeout(MENU_TIMEOUT, hide_menu)
     
     stop_select_propagation = False
     
     # first, allow to go up if it's possible and requested
     if btn == 'up':
         if menu['level']:
             menu['level'].pop()
             
     # second, go down to the selected item
     item, prev_item = menu, menu
     for level in menu['level']:
         prev_item = item
         item = item['items'][level]
         
     # third, allow to go even lower, if it's possible and requested
     if btn in ['down', 'select']:
         if 'items' in item['items'][item['selected']]:
             menu['level'].append(item['selected'])
             prev_item = item
             item = item['items'][item['selected']]
             stop_select_propagation = True
         
     # allow to go through items of this level
     if btn in ['left', 'right']:
         if 'left' == btn:
             delta = -1
         if 'right' == btn:
             delta = +1
         item['selected'] = (item['selected'] + delta) % len(item['items'])
     
     # prepare item meta to be printed to screen
     prev_name = ''
     name = item['items'][item['selected']]['name']
     description = item['items'][item['selected']].get('description', '')
     if not description:
         if item != prev_item:
             prev_name = '%s%s' % (lcd.CHAR_ARROW_UP, prev_item['items'][prev_item['selected']]['name'])
     position = '%s%d/%d%s' % (lcd.CHAR_ARROW_LEFT,
                               item['selected'] + 1, len(item['items']),
                               lcd.CHAR_ARROW_RIGHT)
     
     lcd.home()
     lcd.clear()
     line1 = '%-16s' % (name, )
     line2 = '%-11s%5s' % (description or prev_name, position)
     lcd.message('%s\n%s' % (line1, line2))
     
     # finally process SELECT
     if btn == 'select' and not stop_select_propagation:
         selected_item = item['items'][item['selected']]
         if 'call' in selected_item:
             func, args = selected_item['call'], selected_item['args']
             func(*args)