✨
This commit is contained in:
33
selflocalization/framebuffer.py
Normal file
33
selflocalization/framebuffer.py
Normal file
@ -0,0 +1,33 @@
|
||||
# import copy
|
||||
import threading
|
||||
|
||||
|
||||
class FrameBuffer(object):
|
||||
"""This class represents a framebuffer with a front and back buffer storing frames.
|
||||
Access to the class is thread safe (controlled via an internal lock)."""
|
||||
|
||||
def __init__(self):
|
||||
self.frameBuffer = [None, None] # Initialize the framebuffer with None references
|
||||
self.currentBufferIndex = 0
|
||||
self.lock = threading.Lock()
|
||||
|
||||
def get_frame(self):
|
||||
"""Return latest frame from the framebuffer"""
|
||||
|
||||
# Obtain lock and release it when done
|
||||
with self.lock:
|
||||
if self.frameBuffer[self.currentBufferIndex] is not None:
|
||||
# return copy.deepcopy(self.frameBuffer[self.currentBufferIndex])
|
||||
return self.frameBuffer[self.currentBufferIndex]
|
||||
else:
|
||||
return None
|
||||
|
||||
def new_frame(self, frame):
|
||||
"""Add a new frame to the frame buffer"""
|
||||
# self.frameBuffer[int(not self.currentBufferIndex)] = copy.deepcopy(frame)
|
||||
self.frameBuffer[int(not self.currentBufferIndex)] = frame
|
||||
|
||||
# Obtain lock and release it when done
|
||||
with self.lock:
|
||||
# Switch buffer index
|
||||
self.currentBufferIndex = int(not self.currentBufferIndex)
|
Reference in New Issue
Block a user