def onFrame(self, jpg, frameTime): # We could pass frameTime here to try to compensate for lag, # but it ended up looking worse in a test. One suspect is the # rpi clock drift might be worse than the lag. The value of # (now - frameTime) stutters regularly between 40ms, 140ms, # and 200ms. position = self.musicTime.getLatest() for d, filename in self._snapshotRequests: with open(filename, 'w') as out: out.write(jpg) d.callback(filename) self._snapshotRequests[:] = [] if not position['song']: self.updateLiveFromTemp(jpg) return outDir = takeDir(songDir(position['song']), position['started']) outFilename = "%s/%08.03f.jpg" % (outDir, position['t']) if os.path.exists(outFilename): # we're paused on one time self.updateLiveFromTemp(jpg) return try: os.makedirs(outDir) except OSError: pass with open(outFilename, 'w') as out: out.write(jpg) self.updateLiveFromFile(outFilename) # if you're selecting the text while gtk is updating it, # you can get a crash in xcb_io if getattr(self, '_lastRecText', None) != outDir: with gtk.gdk.lock: self.recordingTo.set_text(outDir) self._lastRecText = outDir
def saveImg(self, position, img, bufferTimestamp): if not position['song']: return t1 = time.time() outDir = takeDir(songDir(position['song']), position['started']) outFilename = "%s/%08.03f.jpg" % (outDir, position['t']) if os.path.exists(outFilename): # we're paused on one time return try: os.makedirs(outDir) except OSError: pass img.save(outFilename) now = time.time() log.info("wrote %s delay of %.2fms, took %.2fms", outFilename, (now - self.lastTime) * 1000, (now - t1) * 1000) self.updateRecordingTo(outDir) self.lastTime = now