def __next__(self): """ Read and return the required number of frames for 1 clip. Returns: was_read (bool): False if not enough frames to return. task (TaskInfo object): object contains metadata for the current clips. """ self.id += 1 task = TaskInfo() task.img_height = self.display_height task.img_width = self.display_width task.crop_size = self.test_crop_size task.clip_vis_size = self.clip_vis_size frames = [] if len(self.buffer) != 0: frames = self.buffer was_read = True while was_read and len(frames) < self.seq_length: was_read, frame = self.cap.read() frames.append(frame) if was_read and self.buffer_size != 0: self.buffer = frames[-self.buffer_size:] task.add_frames(self.id, frames) task.num_buffer_frames = 0 if self.id == 0 else self.buffer_size return was_read, task
def put_fn(self): """ Grabbing frames from VideoCapture. """ was_read = True while was_read and not self.stopped: task = TaskInfo() task.img_height = self.display_height task.img_width = self.display_width task.crop_size = self.test_crop_size task.clip_vis_size = self.clip_vis_size frames = [] if len(self.buffer) != 0: frames = self.buffer self.input_lock.acquire() while was_read and len(frames) < self.seq_length: was_read, frame = self.cap.read() if was_read: frames.append(frame) self.input_lock.release() if was_read: self.buffer = frames[-self.buffer_size :] task.add_frames(self.put_id + 1, frames) task.num_buffer_frames = ( 0 if self.put_id == -1 else self.buffer_size ) with self.put_id_lock: self.put_id += 1 self.not_end = was_read # If mode is to read the most recent clip or we reach task # index that is not supposed to be skipped. if self.num_skip == 0 or self.put_id % self.num_skip == 0: self.read_queue.put((was_read, copy.deepcopy(task))) else: with self.write_lock: self.write_queue[task.id] = (was_read, copy.deepcopy(task))