def grab_next_frame_blocking(self): curmsg = self._get_network_buf() self.last_timestamp = curmsg.timestamp self.last_framenumber = curmsg.framenumber outbuf = _cam_iface_shm.get_data_copy(curmsg) return outbuf
def grab_next_frame_into_buf_blocking(self, outbuf, bypass_buffer_checks=False): """grab frame into user-supplied buffer""" # XXX this method isn't done yet... # XXX change to read data out of shared memory as quickly as # possible (no self.savemsg) if self.savebuf is not None: # print 'ADS 1' if self.save_framenumber == self.next_framenumber: # print 'ADS 1.1' self.last_timestamp = self.save_timestamp self.last_framenumber = self.save_framenumber self.next_framenumber = self.save_framenumber + 1 outbuf = self.savebuf self.savebuf = None else: # print 'ADS 1.2' assert self.save_framenumber > self.next_framenumber self.next_framenumber += 1 raise FrameDataMissing("missing data") else: # print 'ADS 2' curmsg = self._get_network_buf() cur_timestamp = curmsg.timestamp cur_framenumber = curmsg.framenumber # print 'cur_framenumber',cur_framenumber curbuf = _cam_iface_shm.get_data_copy(curmsg, optional_preallocated_buf=outbuf) if self.last_framenumber is None: # print 'ADS 2.1' # first frame self.last_timestamp = cur_timestamp self.last_framenumber = cur_framenumber self.next_framenumber = cur_framenumber + 1 outbuf = curbuf else: # print 'ADS 2.2' if self.next_framenumber == cur_framenumber: # print 'ADS 2.3' # no frames skipped self.last_timestamp = cur_timestamp self.last_framenumber = cur_framenumber self.next_framenumber = cur_framenumber + 1 outbuf = curbuf else: # print 'ADS 2.4' assert cur_framenumber > self.next_framenumber self.savebuf = curbuf self.save_framenumber = cur_framenumber self.save_timestamp = cur_timestamp self.next_framenumber += 1 raise FrameDataMissing("missing data") return outbuf