add record

This commit is contained in:
flandre 2025-01-19 18:49:41 +08:00
parent 3f2cb53ebf
commit ca7c8f71df
3 changed files with 29 additions and 5 deletions

View File

@ -1,5 +1,6 @@
import logging
import struct
from pathlib import Path
import cupy as cp
import cv2
@ -8,7 +9,7 @@ import zmq
from config import PLAYBACK_SOCKET, VIDEO_WIDTH, VIDEO_HEIGHT, LIVE_SOCKET
from nodes.Node import Node
from utils.Msg import BMMsg, ImageArgMsg, KillMsg, SeqMetaMsg, SetPlayMode, SetDeviceConfigMsg
from utils.Msg import BMMsg, ImageArgMsg, KillMsg, SeqMetaMsg, SetPlayMode, SetDeviceConfigMsg, SetRecordMsg
from utils.RfFile import RfFrame, RfSequenceMeta
from utils.RfMat import RfMat
@ -16,12 +17,15 @@ logger = logging.getLogger(__name__)
class Beamformer(Node):
topics = [ImageArgMsg, SeqMetaMsg, SetPlayMode, SetDeviceConfigMsg]
topics = [ImageArgMsg, SeqMetaMsg, SetPlayMode, SetDeviceConfigMsg, SetRecordMsg]
def __init__(self):
super(Beamformer, self).__init__()
self.arg = ImageArgMsg('', v1=1499)
self.seq_meta = None
self.record_enable = False
self.record_commit = None
self.record_path: Path | None = None
def process(self, data: RfMat):
if data is None:
@ -62,6 +66,8 @@ class Beamformer(Node):
encoder=encoder,
sequence_id=sequence_id,
), self.seq_meta)
if self.record_enable:
(self.record_path / mat.frame_meta.filename).write_bytes(mat.__bytes__())
if self.c.sub in socks and socks[self.c.sub] == zmq.POLLIN:
msg = self.recv()
@ -79,5 +85,13 @@ class Beamformer(Node):
elif msg.value == 'playback':
device_socket.disconnect(f"tcp://{LIVE_SOCKET}")
device_socket.connect(f"tcp://{PLAYBACK_SOCKET}")
if isinstance(msg, SetRecordMsg):
self.record_enable = msg.enable
if msg.enable:
self.record_commit = msg.commit
self.seq_meta.commit = msg.commit
p = Path('/tmp/flandre_record') / self.seq_meta.name
p.mkdir(parents=True, exist_ok=True)
self.record_path = p
self.process(mat)

View File

@ -8,7 +8,7 @@ from PyQt6.QtWidgets import QMainWindow, QApplication, QFrame
from Main import Ui_MainWindow
from utils.Msg import KillMsg, Msg, ImageArgMsg, SelectSeqMsg, SeqIdMinMax, MoveAxisMsg, SeqListMsg, SetBaseMsg, \
SeqMetaMsg, SetPlayMode, DeviceConnectedMsg, DeviceEnabledMsg, DeviceOnlineMsg, SetDeviceEnabledMsg, \
SetDeviceConnectedMsg, DeviceConfigListMsg, SetDeviceConfigMsg
SetDeviceConnectedMsg, DeviceConfigListMsg, SetDeviceConfigMsg, SetRecordMsg
from ZMQReceiver import ZMQReceiver
from nodes.Node import Node
from utils.RfFile import RfSequenceMeta
@ -59,12 +59,15 @@ class Adv(QMainWindow, Ui_MainWindow):
def on_record(self):
if self.record:
self.p.send(SetRecordMsg(False))
self.record = False
self.b_record.setStyleSheet('')
else:
self.record = True
self.b_record.setStyleSheet('background-color: red;')
if self.l_record_commit.text() != '':
self.p.send(SetRecordMsg(True, self.l_record_commit.text()))
self.record = True
self.b_record.setStyleSheet('background-color: red;')
def on_zmq_event(self, msg: QByteArray):
msg = Msg.decode_msg(msg.data())

View File

@ -26,6 +26,7 @@ class BG(Enum):
SetDeviceConfigMsg = auto()
DeviceOnlineMsg = auto()
DeviceConfigListMsg = auto()
SetRecordMsg = auto()
class Msg:
@ -110,6 +111,12 @@ class DeviceOnlineMsg(BoolMsg):
pass
@dataclasses.dataclass
class SetRecordMsg(Msg):
enable: bool
commit: str = ''
class SetDeviceConfigMsg(StrMsg):
pass