Changeset - 083137dae55d
[Not reviewed]
default
0 1 0
drewp@bigasterisk.com - 7 years ago 2018-06-08 21:50:09
drewp@bigasterisk.com
vidref don't mangle the picurl from config
Ignore-this: c7be3e2063937a8e3c6629b6bcd99fc5
1 file changed with 1 insertions and 2 deletions:
0 comments (0 inline, 0 general)
light9/vidref/remotepivideo.py
Show inline comments
 
"""
 
like videorecorder.py, but talks to a bin/picamserve instance
 
"""
 
import os, time, logging
 
import gtk
 
import numpy
 
import treq
 
from twisted.internet import defer
 
from light9.vidref.replay import framerate, songDir, takeDir, snapshotDir
 
from light9 import prof, showconfig
 
from light9.namespaces import L9
 
from PIL import Image
 
from StringIO import StringIO
 
log = logging.getLogger('remotepi')
 

	
 
class Pipeline(object):
 
    def __init__(self, liveVideo, musicTime, recordingTo, graph):
 
        self.musicTime = musicTime
 
        self.recordingTo = recordingTo
 

	
 
        self.liveVideo = self._replaceLiveVideoWidget(liveVideo)
 
        
 
        self._snapshotRequests = []
 
        self.graph = graph
 
        self.graph.addHandler(self.updateCamUrl)
 

	
 
    def updateCamUrl(self):
 
        show = showconfig.showUri()
 
        self.picsUrl = self.graph.value(show, L9['vidrefCamRequest'])
 
        log.info("picsUrl now %r", self.picsUrl)
 
        if not self.picsUrl:
 
            return
 
        
 
        # this cannot yet survive being called a second time
 
        self._startRequest(str(self.picsUrl.replace('/pic', '/pics')) +
 
                           '&res=1080&resize=450')
 
        self._startRequest(str(self.picsUrl))
 
        
 
    def _replaceLiveVideoWidget(self, liveVideo):
 
        aspectFrame = liveVideo.get_parent()
 
        liveVideo.destroy()
 
        img = gtk.Image()
 
        img.set_visible(True)
 
        #img.set_size_request(320, 240)
 
        aspectFrame.add(img)
 
        return img
 
        
 
    def _startRequest(self, url):
 
        self._buffer = ''
 
        log.info('start request to %r', url)
 
        d = treq.get(url)
 
        d.addCallback(treq.collect, self._dataReceived)
 
        # not sure how to stop this
 
        return d
 

	
 
    def _dataReceived(self, chunk):
 
        self._buffer += chunk
 
        if len(self._buffer) < 100:
 
            return
 
        i = self._buffer.index('\n')
 
        size, frameTime = self._buffer[:i].split()
 
        size = int(size)
 
        if len(self._buffer) - i - 1 < size:
 
            return
 
        jpg = self._buffer[i+1:i+1+size]
 
        self.onFrame(jpg, float(frameTime))
 
        self._buffer = self._buffer[i+1+size:]
 
        
 
    def snapshot(self):
 
        """
 
        returns deferred to the path (which is under snapshotDir()) where
 
        we saved the image.
 
        """
 
        filename = "%s/%s.jpg" % (snapshotDir(), time.time())
 
        d = defer.Deferred()
 
        self._snapshotRequests.append((d, filename))
 
        return d
 

	
 
    def setInput(self, name):
 
        pass
 

	
 
    def setLiveVideo(self, on):
 
        print "setLiveVideo", on
 

	
 
    def onFrame(self, jpg, frameTime):
0 comments (0 inline, 0 general)