fix recorder

This commit is contained in:
remilia 2025-04-19 23:29:19 +08:00
parent b4239c3c74
commit 1900c0c528
5 changed files with 19 additions and 7 deletions

View File

@ -20,6 +20,7 @@ from flandre.nodes.ImageFFMPEG import ImageFFMPEG
from flandre.nodes.ImageQt import ImageQt
from flandre.nodes.Midi import Midi
from flandre.nodes.Mi import Mi
from flandre.nodes.Recorder import Recorder
from flandre.utils.Msg import KillMsg, NodeOnlineMsg, Msg1, Msg2
from flandre.config import CONFIG_FOLDER
@ -31,6 +32,7 @@ class LaunchComponent(Enum):
Robot = Robot
Loader = Loader
Device = Device
Recorder = Recorder
Beamformer = Beamformer
ImageFFMPEG = ImageFFMPEG
ImageQt = ImageQt

View File

@ -84,6 +84,8 @@ class Beamformer(Node):
arg_msg: ImageArgMsg = Msg.decode_msg(r[:id2])
rf_frame_msg: RfFrameMsg = Msg.decode_msg(r[id2:])
mat = RfMat.from_rf_frame(rf_frame_msg.rf_frame, 'gpu')
if mat is None:
continue
if arg_msg.v2 != last_v2 or arg_msg.f_rows != last_f_rows:
last_v2 = arg_msg.v2
last_f_rows = arg_msg.f_rows

View File

@ -29,6 +29,7 @@ class Muxer(Node):
self.play_mode: str | None = None
self.rep_socket: zmq.Socket = None
self.req_driver_socket: zmq.Socket = None
self.driver_pull_socket: zmq.Socket = None
self.playback_rf_msg: RfFrameMsg | None = None
self.device_enabled = False
self.driver_data_raw = b''
@ -38,6 +39,8 @@ class Muxer(Node):
self.rep_socket: zmq.Socket = self.c.ctx.socket(zmq.REP)
self.rep_socket.bind(f'tcp://localhost:{C.muxer_rep_port}')
self.req_driver_socket: zmq.Socket = self.c.ctx.socket(zmq.REQ)
# self.driver_pull_socket = self.c.ctx.socket(zmq.PULL)
# self.driver_pull_socket.connect(C.live_push_socket)
# self.req_driver_socket.connect(C.driver_rep_socket)
self.req_driver_socket.connect(C.live_rep_socket)
self.c.poller.register(self.rep_socket, zmq.POLLIN)
@ -45,6 +48,9 @@ class Muxer(Node):
def p_thread(self):
while self.run_p_thread:
if self.play_mode == 'live':
# ii = self.driver_pull_socket.poll(timeout=1000)
# if ii > 0:
# self.driver_data_raw = self.driver_pull_socket.recv()
self.req_driver_socket.send(struct.pack('i', Device.magic) + struct.pack('i', DeviceCmd.GetData.value))
self.driver_data_raw = self.req_driver_socket.recv()
else:

View File

@ -5,18 +5,17 @@ from pathlib import Path
import numpy as np
import zmq
from flandre.config import LIVE_SOCKET,C
from flandre.config import C
from flandre.nodes.Node import Node
from flandre.utils.Msg import ImageArgMsg, KillMsg, SetSeqMetaMsg, SetPlayMode, SetDeviceConfigMsg, SetRecordMsg, \
RfFrameWithMetaMsg, RequestRfFrameMsg, RecordFrameMsg, RobotRtsiMsg
from flandre.utils.RfFile import RfSequenceMeta
from flandre.utils.RfMeta import RfFrameMeta
RequestRfFrameMsg, RecordFrameMsg, RobotRtsiMsg, SeqMetaMsg
from flandre.utils.RfMeta import RfFrameMeta, RfSequenceMeta
logger = logging.getLogger(__name__)
class Recorder(Node):
topics = [SetSeqMetaMsg, SetPlayMode, SetDeviceConfigMsg, SetRecordMsg, RfFrameWithMetaMsg, RequestRfFrameMsg,
topics = [SetSeqMetaMsg, SeqMetaMsg, SetPlayMode, SetDeviceConfigMsg, SetRecordMsg, RequestRfFrameMsg,
ImageArgMsg, RobotRtsiMsg]
def __init__(self, level=logging.INFO):
@ -34,12 +33,13 @@ class Recorder(Node):
)
device_socket = self.context.socket(zmq.PULL)
self.c.poller.register(device_socket, zmq.POLLIN)
while True:
socks = dict(self.c.poller.poll())
for k in socks:
if k == device_socket:
buffer = device_socket.recv()
_, sequence_id, encoder = struct.unpack_from('=iqi', buffer)
_, sequence_id, encoder = struct.unpack_from('=IQi', buffer)
s = buffer[4 + 8 + 4:]
if self.seq_meta_live is not None and s.__len__() // 2 == np.prod(self.seq_meta_live.shape):
(self.record_path / RfFrameMeta(
@ -64,7 +64,7 @@ class Recorder(Node):
if isinstance(msg, KillMsg):
if msg.name == '':
return
elif isinstance(msg, SetSeqMetaMsg):
elif isinstance(msg, SeqMetaMsg):
match msg.target:
case 'live':
self.seq_meta_live = RfSequenceMeta.from_name(msg.name)

View File

@ -131,6 +131,8 @@ class RfMat:
seq_meta = frame.seq_meta
else:
raise NotImplementedError()
if seq_meta.prod() != frame.__bytes__().__len__() // 2:
return None
m = np.frombuffer(frame.__bytes__(), dtype=np.int16).reshape(seq_meta.shape).copy()
if device == 'gpu':
m = cp.asarray(m)