mirror of
https://github.com/EyeTrackVR/EyeTrackVR.git
synced 2025-11-04 14:39:42 +08:00
More stable version ig
This commit is contained in:
parent
b6044d2276
commit
28e2204ce1
@ -19,7 +19,7 @@ from .DataPacket import PacketHeader # Python imports stupid. missed a single ".
|
||||
WAIT_TIME = 0.1
|
||||
|
||||
IMAGE_BUFFER_SIZE = 1024
|
||||
NUM_FRAGMENTS = 12
|
||||
NUM_MAX_FRAGMENTS = 12
|
||||
HEADER_FORMAT = "iiii"
|
||||
|
||||
RED = "\033[91m"
|
||||
@ -50,10 +50,10 @@ class UDP_Camera(ICameraSource):
|
||||
self.host = "0.0.0.0"
|
||||
self.port = 3333
|
||||
self.num_loaded = 0
|
||||
self.packets = [None] * NUM_FRAGMENTS
|
||||
self.packets = [None] * NUM_MAX_FRAGMENTS
|
||||
self.headerSize = struct.calcsize(HEADER_FORMAT)
|
||||
self.rawDataBuffer = np.zeros(IMAGE_BUFFER_SIZE + self.headerSize, dtype=np.uint8)
|
||||
self.rawFullDataBuffer = np.zeros(IMAGE_BUFFER_SIZE*NUM_FRAGMENTS, dtype=np.uint8)
|
||||
self.rawFullDataBuffer = np.zeros(IMAGE_BUFFER_SIZE*NUM_MAX_FRAGMENTS, dtype=np.uint8)
|
||||
self.imageBuffView = memoryview(self.rawFullDataBuffer)
|
||||
self.currentFrameNum = 0
|
||||
self.totalDataSize = 0
|
||||
@ -86,12 +86,12 @@ class UDP_Camera(ICameraSource):
|
||||
# print(f"Packet {packet.id}: {offset}->{offset + packet.image_buf_size}")
|
||||
|
||||
def resetImageBuffer(self):
|
||||
self.rawFullDataBuffer = np.zeros(IMAGE_BUFFER_SIZE*NUM_FRAGMENTS, dtype=np.uint8)
|
||||
self.rawFullDataBuffer = np.zeros(IMAGE_BUFFER_SIZE*NUM_MAX_FRAGMENTS, dtype=np.uint8)
|
||||
|
||||
def handle_packet(self, dataSize, senderAddr):
|
||||
bufferView = memoryview(self.rawDataBuffer)
|
||||
packet = PacketHeader(HEADER_FORMAT, bufferView, dataSize)
|
||||
if packet.id < 0 or packet.id >= NUM_FRAGMENTS:
|
||||
if packet.id < 0 or packet.id >= NUM_MAX_FRAGMENTS:
|
||||
return
|
||||
|
||||
# Send acknowledgment
|
||||
@ -102,35 +102,34 @@ class UDP_Camera(ICameraSource):
|
||||
# self.sock.sendto(f"ERR".encode(), senderAddr)
|
||||
|
||||
if (packet.id == 0 or packet.frame_num != self.currentFrameNum):
|
||||
self.packets: list[PacketHeader|None] = [None] * packet.totalPackets # Reset packets
|
||||
self.packets: list[PacketHeader|None] = [None] * NUM_MAX_FRAGMENTS # Reset packets
|
||||
self.num_loaded = 0
|
||||
self.currentFrameNum = packet.frame_num
|
||||
self.rawFullDataBuffer[:] = 0
|
||||
# print(f"Reset frame capture. total packets: {packet.totalPackets}")
|
||||
|
||||
# if self.packets[0] is not None:
|
||||
# print(f"Got packet id: {packet.id} (total: {self.packets[0].totalPackets} loaded: {self.num_loaded})")
|
||||
|
||||
if (packet.id < len(self.packets)
|
||||
and self.packets[packet.id] is None
|
||||
and self.packets[0] is not None
|
||||
if (self.packets is not None
|
||||
and self.currentFrameNum == packet.frame_num
|
||||
or packet.id == 0 ):
|
||||
and self.packets[0] is not None
|
||||
and not packet in self.packets
|
||||
or packet.id == 0):
|
||||
self.num_loaded += 1
|
||||
self.packets[packet.id] = packet
|
||||
self.saveDataToBuff(bufferView, packet)
|
||||
|
||||
# if self.packets[0] is not None:
|
||||
# print(f"Got packet id: {packet.id} (total: {self.packets[0].totalPackets} loaded: {self.num_loaded})")
|
||||
# if self.packets[0] is not None:
|
||||
# formatted_list = "[" + ", ".join(f"{RED}x{RESET}" if item is None else f"{GREEN}x{RESET}" for item in self.packets[:self.packets[0].totalPackets]) + "]"
|
||||
# print(formatted_list)
|
||||
|
||||
|
||||
if (self.packets[0] is not None and self.num_loaded >= self.packets[0].totalPackets
|
||||
or self.num_loaded >= NUM_FRAGMENTS):
|
||||
if (packet.id < len(self.packets) and self.packets[0] is not None and self.num_loaded >= self.packets[0].totalPackets
|
||||
or self.num_loaded >= NUM_MAX_FRAGMENTS):
|
||||
# if self.packets[0] is not None:
|
||||
# formatted_list = "[" + ", ".join(f"{RED}x{RESET}" if item is None else f"{GREEN}x{RESET}" for item in self.packets[:self.packets[0].totalPackets]) + "]"
|
||||
# print(formatted_list)
|
||||
|
||||
self.process_and_push_image()
|
||||
|
||||
self.num_loaded = 0
|
||||
self.packets: list[PacketHeader|None] = [None] * NUM_FRAGMENTS # Reset packets
|
||||
self.packets: list[PacketHeader|None] = [None] * NUM_MAX_FRAGMENTS # Reset packets
|
||||
self.rawFullDataBuffer[:] = 0
|
||||
|
||||
|
||||
|
||||
@ -240,19 +240,26 @@ class Camera(ICameraSource):
|
||||
current_frame_time = time.time()
|
||||
delta_time = current_frame_time - self.last_frame_time
|
||||
self.last_frame_time = current_frame_time
|
||||
self.fps = (self.fps + self.pf_fps) / 2
|
||||
self.newft = time.time()
|
||||
self.fps = 1 / (self.newft - self.prevft)
|
||||
self.prevft = self.newft
|
||||
self.fps = int(self.fps)
|
||||
if len(self.fl) < 60:
|
||||
self.fl.append(self.fps)
|
||||
|
||||
# Avoid division by zero
|
||||
if delta_time > 0:
|
||||
fps = 1.0 / delta_time
|
||||
else:
|
||||
self.fl.pop(0)
|
||||
self.fl.append(self.fps)
|
||||
fps = 0
|
||||
|
||||
# Smooth the FPS using a moving average
|
||||
self.fl.append(fps)
|
||||
if len(self.fl) > 60:
|
||||
self.fl.pop(0) # Keep the list length constant
|
||||
|
||||
# Compute average FPS
|
||||
self.fps = sum(self.fl) / len(self.fl)
|
||||
|
||||
# Compute bandwidth per second (bps)
|
||||
self.bps = image.nbytes * self.fps
|
||||
self.frame_number = self.frame_number + 1
|
||||
|
||||
# Increment frame count
|
||||
self.frame_number += 1
|
||||
if should_push:
|
||||
self.push_image_to_queue(image, self.frame_number, self.fps)
|
||||
except Exception:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user