fix recorder
This commit is contained in:
parent
b4239c3c74
commit
1900c0c528
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user