def decode_frame(self): """Decodes the next frame of the animation. Returns: numpy.array: The frame image. float: The timestamp for the end of the frame. """ timestamp_ptr = ffi.new('int*') buf_ptr = ffi.new('uint8_t**') if lib.WebPAnimDecoderGetNext(self.ptr, buf_ptr, timestamp_ptr) == 0: raise WebPError('decoding error') size = self.anim_info.height * self.anim_info.width * 4 buf = ffi.buffer(buf_ptr[0], size) arr = np.copy(np.frombuffer(buf, dtype=np.uint8)) arr = np.reshape(arr, (self.anim_info.height, self.anim_info.width, 4)) # timestamp_ms contains the _end_ time of this frame timestamp_ms = timestamp_ptr[0] return arr, timestamp_ms
def buffer(self): buf = ffi.buffer(self._data_ref, self.size) return buf