Skip to content

Commit 95a67d5

Browse files
committed
Encapsulate video logger
1 parent d0e0c6d commit 95a67d5

File tree

2 files changed

+363
-366
lines changed

2 files changed

+363
-366
lines changed
Lines changed: 362 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,362 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<WorkflowBuilder Version="2.8.5"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns:rx="clr-namespace:Bonsai.Reactive;assembly=Bonsai.Core"
5+
xmlns:p1="clr-namespace:AindTelekinesisDataSchema.Rig;assembly=Extensions"
6+
xmlns="https://bonsai-rx.org/2018/workflow">
7+
<Workflow>
8+
<Nodes>
9+
<Expression xsi:type="SubscribeSubject">
10+
<Name>TriggeredCameraController</Name>
11+
</Expression>
12+
<Expression xsi:type="MemberSelector">
13+
<Selector>Cameras</Selector>
14+
</Expression>
15+
<Expression xsi:type="Combinator">
16+
<Combinator xsi:type="rx:Merge" />
17+
</Expression>
18+
<Expression xsi:type="MemberSelector">
19+
<Selector>Value.VideoWriter</Selector>
20+
</Expression>
21+
<Expression xsi:type="IncludeWorkflow" Path="AllenNeuralDynamics.Core:FilterNotNull.bonsai" />
22+
<Expression xsi:type="p1:MatchVideoWriter">
23+
<p1:Type xsi:type="TypeMapping" TypeArguments="p1:VideoWriterFfmpeg" />
24+
</Expression>
25+
<Expression xsi:type="MemberSelector">
26+
<Selector>Key</Selector>
27+
</Expression>
28+
<Expression xsi:type="Combinator">
29+
<Combinator xsi:type="rx:WithLatestFrom" />
30+
</Expression>
31+
<Expression xsi:type="rx:CreateObservable">
32+
<Name>FfmpegWriter</Name>
33+
<Workflow>
34+
<Nodes>
35+
<Expression xsi:type="WorkflowInput">
36+
<Name>Source1</Name>
37+
</Expression>
38+
<Expression xsi:type="Combinator">
39+
<Combinator xsi:type="rx:Take">
40+
<rx:Count>1</rx:Count>
41+
</Combinator>
42+
</Expression>
43+
<Expression xsi:type="rx:AsyncSubject">
44+
<Name>This</Name>
45+
</Expression>
46+
<Expression xsi:type="SubscribeSubject">
47+
<Name>This</Name>
48+
</Expression>
49+
<Expression xsi:type="MemberSelector">
50+
<Selector>Item2</Selector>
51+
</Expression>
52+
<Expression xsi:type="rx:AsyncSubject">
53+
<Name>ThisCameraName</Name>
54+
</Expression>
55+
<Expression xsi:type="SubscribeSubject">
56+
<Name>This</Name>
57+
</Expression>
58+
<Expression xsi:type="MemberSelector">
59+
<Selector>Item1</Selector>
60+
</Expression>
61+
<Expression xsi:type="rx:AsyncSubject">
62+
<Name>ThisWriter</Name>
63+
</Expression>
64+
<Expression xsi:type="SubscribeSubject">
65+
<Name>TriggeredCamerasStream</Name>
66+
</Expression>
67+
<Expression xsi:type="rx:Condition">
68+
<Workflow>
69+
<Nodes>
70+
<Expression xsi:type="WorkflowInput">
71+
<Name>Source1</Name>
72+
</Expression>
73+
<Expression xsi:type="MemberSelector">
74+
<Selector>Key</Selector>
75+
</Expression>
76+
<Expression xsi:type="SubscribeSubject">
77+
<Name>ThisCameraName</Name>
78+
</Expression>
79+
<Expression xsi:type="Combinator">
80+
<Combinator xsi:type="rx:CombineLatest" />
81+
</Expression>
82+
<Expression xsi:type="Equal" />
83+
<Expression xsi:type="WorkflowOutput" />
84+
</Nodes>
85+
<Edges>
86+
<Edge From="0" To="1" Label="Source1" />
87+
<Edge From="1" To="3" Label="Source1" />
88+
<Edge From="2" To="3" Label="Source2" />
89+
<Edge From="3" To="4" Label="Source1" />
90+
<Edge From="4" To="5" Label="Source1" />
91+
</Edges>
92+
</Workflow>
93+
</Expression>
94+
<Expression xsi:type="Combinator">
95+
<Combinator xsi:type="rx:Take">
96+
<rx:Count>1</rx:Count>
97+
</Combinator>
98+
</Expression>
99+
<Expression xsi:type="Combinator">
100+
<Combinator xsi:type="rx:Merge" />
101+
</Expression>
102+
<Expression xsi:type="SubscribeSubject">
103+
<Name>ThisCameraName</Name>
104+
</Expression>
105+
<Expression xsi:type="PropertyMapping">
106+
<PropertyMappings>
107+
<Property Name="LogName" />
108+
</PropertyMappings>
109+
</Expression>
110+
<Expression xsi:type="SubscribeSubject">
111+
<Name>ThisWriter</Name>
112+
</Expression>
113+
<Expression xsi:type="MemberSelector">
114+
<Selector>ContainerExtension</Selector>
115+
</Expression>
116+
<Expression xsi:type="PropertyMapping">
117+
<PropertyMappings>
118+
<Property Name="VideoExtension" />
119+
</PropertyMappings>
120+
</Expression>
121+
<Expression xsi:type="SubscribeSubject">
122+
<Name>Modality</Name>
123+
</Expression>
124+
<Expression xsi:type="PropertyMapping">
125+
<PropertyMappings>
126+
<Property Name="Modality" />
127+
</PropertyMappings>
128+
</Expression>
129+
<Expression xsi:type="SubscribeSubject">
130+
<Name>ThisWriter</Name>
131+
</Expression>
132+
<Expression xsi:type="PropertyMapping">
133+
<PropertyMappings>
134+
<Property Name="OutputArguments" Selector="OutputArguments" />
135+
<Property Name="InputArguments" Selector="InputArguments" />
136+
<Property Name="FrameRate" Selector="FrameRate" />
137+
</PropertyMappings>
138+
</Expression>
139+
<Expression xsi:type="IncludeWorkflow" Path="AllenNeuralDynamics.Core:LogSpinnakerFfmpeg.bonsai">
140+
<Modality>BehaviorVideos</Modality>
141+
<LogName>FaceCamera</LogName>
142+
<VideoExtension>mp4</VideoExtension>
143+
<OutputArguments>-vf "scale=out_color_matrix=bt709:out_range=full" -c:v h264_nvenc -pix_fmt nv12 -color_range full -colorspace bt709 -color_trc linear -tune hq -preset p4 -rc vbr -cq 12 -b:v 0M -maxrate 700M -bufsize 350M</OutputArguments>
144+
<InputArguments>-colorspace rgb -color_primaries bt709 -color_trc linear</InputArguments>
145+
<Verbosity>Verbose</Verbosity>
146+
<FrameRate>0</FrameRate>
147+
</Expression>
148+
</Nodes>
149+
<Edges>
150+
<Edge From="0" To="1" Label="Source1" />
151+
<Edge From="1" To="2" Label="Source1" />
152+
<Edge From="3" To="4" Label="Source1" />
153+
<Edge From="4" To="5" Label="Source1" />
154+
<Edge From="6" To="7" Label="Source1" />
155+
<Edge From="7" To="8" Label="Source1" />
156+
<Edge From="9" To="10" Label="Source1" />
157+
<Edge From="10" To="11" Label="Source1" />
158+
<Edge From="11" To="12" Label="Source1" />
159+
<Edge From="12" To="22" Label="Source1" />
160+
<Edge From="13" To="14" Label="Source1" />
161+
<Edge From="14" To="22" Label="Source2" />
162+
<Edge From="15" To="16" Label="Source1" />
163+
<Edge From="16" To="17" Label="Source1" />
164+
<Edge From="17" To="22" Label="Source3" />
165+
<Edge From="18" To="19" Label="Source1" />
166+
<Edge From="19" To="22" Label="Source4" />
167+
<Edge From="20" To="21" Label="Source1" />
168+
<Edge From="21" To="22" Label="Source5" />
169+
</Edges>
170+
</Workflow>
171+
</Expression>
172+
<Expression xsi:type="Combinator">
173+
<Combinator xsi:type="rx:Merge" />
174+
</Expression>
175+
<Expression xsi:type="SubscribeSubject">
176+
<Name>TriggeredCameraController</Name>
177+
</Expression>
178+
<Expression xsi:type="MemberSelector">
179+
<Selector>Cameras</Selector>
180+
</Expression>
181+
<Expression xsi:type="Combinator">
182+
<Combinator xsi:type="rx:Merge" />
183+
</Expression>
184+
<Expression xsi:type="MemberSelector">
185+
<Selector>Value.VideoWriter</Selector>
186+
</Expression>
187+
<Expression xsi:type="IncludeWorkflow" Path="AllenNeuralDynamics.Core:FilterNotNull.bonsai" />
188+
<Expression xsi:type="p1:MatchVideoWriter">
189+
<p1:Type xsi:type="TypeMapping" TypeArguments="p1:VideoWriterOpenCv" />
190+
</Expression>
191+
<Expression xsi:type="MemberSelector">
192+
<Selector>Key</Selector>
193+
</Expression>
194+
<Expression xsi:type="Combinator">
195+
<Combinator xsi:type="rx:WithLatestFrom" />
196+
</Expression>
197+
<Expression xsi:type="rx:CreateObservable">
198+
<Name>OpenCvWriter</Name>
199+
<Workflow>
200+
<Nodes>
201+
<Expression xsi:type="WorkflowInput">
202+
<Name>Source1</Name>
203+
</Expression>
204+
<Expression xsi:type="Combinator">
205+
<Combinator xsi:type="rx:Take">
206+
<rx:Count>1</rx:Count>
207+
</Combinator>
208+
</Expression>
209+
<Expression xsi:type="rx:AsyncSubject">
210+
<Name>This</Name>
211+
</Expression>
212+
<Expression xsi:type="SubscribeSubject">
213+
<Name>This</Name>
214+
</Expression>
215+
<Expression xsi:type="MemberSelector">
216+
<Selector>Item2</Selector>
217+
</Expression>
218+
<Expression xsi:type="rx:AsyncSubject">
219+
<Name>ThisCameraName</Name>
220+
</Expression>
221+
<Expression xsi:type="SubscribeSubject">
222+
<Name>This</Name>
223+
</Expression>
224+
<Expression xsi:type="MemberSelector">
225+
<Selector>Item1</Selector>
226+
</Expression>
227+
<Expression xsi:type="rx:AsyncSubject">
228+
<Name>ThisWriter</Name>
229+
</Expression>
230+
<Expression xsi:type="SubscribeSubject">
231+
<Name>TriggeredCamerasStream</Name>
232+
</Expression>
233+
<Expression xsi:type="rx:Condition">
234+
<Workflow>
235+
<Nodes>
236+
<Expression xsi:type="WorkflowInput">
237+
<Name>Source1</Name>
238+
</Expression>
239+
<Expression xsi:type="MemberSelector">
240+
<Selector>Key</Selector>
241+
</Expression>
242+
<Expression xsi:type="SubscribeSubject">
243+
<Name>ThisCameraName</Name>
244+
</Expression>
245+
<Expression xsi:type="Combinator">
246+
<Combinator xsi:type="rx:CombineLatest" />
247+
</Expression>
248+
<Expression xsi:type="Equal" />
249+
<Expression xsi:type="WorkflowOutput" />
250+
</Nodes>
251+
<Edges>
252+
<Edge From="0" To="1" Label="Source1" />
253+
<Edge From="1" To="3" Label="Source1" />
254+
<Edge From="2" To="3" Label="Source2" />
255+
<Edge From="3" To="4" Label="Source1" />
256+
<Edge From="4" To="5" Label="Source1" />
257+
</Edges>
258+
</Workflow>
259+
</Expression>
260+
<Expression xsi:type="Combinator">
261+
<Combinator xsi:type="rx:Take">
262+
<rx:Count>1</rx:Count>
263+
</Combinator>
264+
</Expression>
265+
<Expression xsi:type="Combinator">
266+
<Combinator xsi:type="rx:Merge" />
267+
</Expression>
268+
<Expression xsi:type="SubscribeSubject">
269+
<Name>ThisCameraName</Name>
270+
</Expression>
271+
<Expression xsi:type="PropertyMapping">
272+
<PropertyMappings>
273+
<Property Name="LogName" />
274+
</PropertyMappings>
275+
</Expression>
276+
<Expression xsi:type="SubscribeSubject">
277+
<Name>ThisWriter</Name>
278+
</Expression>
279+
<Expression xsi:type="MemberSelector">
280+
<Selector>ContainerExtension</Selector>
281+
</Expression>
282+
<Expression xsi:type="PropertyMapping">
283+
<PropertyMappings>
284+
<Property Name="VideoExtension" />
285+
</PropertyMappings>
286+
</Expression>
287+
<Expression xsi:type="SubscribeSubject">
288+
<Name>Modality</Name>
289+
</Expression>
290+
<Expression xsi:type="PropertyMapping">
291+
<PropertyMappings>
292+
<Property Name="Modality" />
293+
</PropertyMappings>
294+
</Expression>
295+
<Expression xsi:type="SubscribeSubject">
296+
<Name>ThisWriter</Name>
297+
</Expression>
298+
<Expression xsi:type="PropertyMapping">
299+
<PropertyMappings>
300+
<Property Name="FrameRate" Selector="FrameRate" />
301+
<Property Name="FourCC" Selector="FourCc" />
302+
</PropertyMappings>
303+
</Expression>
304+
<Expression xsi:type="IncludeWorkflow" Path="AllenNeuralDynamics.Core:LogSpinnakerOpenCv.bonsai">
305+
<Modality>BehaviorVideos</Modality>
306+
<LogName>FaceCamera</LogName>
307+
<VideoExtension>mp4</VideoExtension>
308+
<FrameRate>30</FrameRate>
309+
<FourCC>FMP4</FourCC>
310+
</Expression>
311+
</Nodes>
312+
<Edges>
313+
<Edge From="0" To="1" Label="Source1" />
314+
<Edge From="1" To="2" Label="Source1" />
315+
<Edge From="3" To="4" Label="Source1" />
316+
<Edge From="4" To="5" Label="Source1" />
317+
<Edge From="6" To="7" Label="Source1" />
318+
<Edge From="7" To="8" Label="Source1" />
319+
<Edge From="9" To="10" Label="Source1" />
320+
<Edge From="10" To="11" Label="Source1" />
321+
<Edge From="11" To="12" Label="Source1" />
322+
<Edge From="12" To="22" Label="Source1" />
323+
<Edge From="13" To="14" Label="Source1" />
324+
<Edge From="14" To="22" Label="Source2" />
325+
<Edge From="15" To="16" Label="Source1" />
326+
<Edge From="16" To="17" Label="Source1" />
327+
<Edge From="17" To="22" Label="Source3" />
328+
<Edge From="18" To="19" Label="Source1" />
329+
<Edge From="19" To="22" Label="Source4" />
330+
<Edge From="20" To="21" Label="Source1" />
331+
<Edge From="21" To="22" Label="Source5" />
332+
</Edges>
333+
</Workflow>
334+
</Expression>
335+
<Expression xsi:type="Combinator">
336+
<Combinator xsi:type="rx:Merge" />
337+
</Expression>
338+
</Nodes>
339+
<Edges>
340+
<Edge From="0" To="1" Label="Source1" />
341+
<Edge From="1" To="2" Label="Source1" />
342+
<Edge From="2" To="3" Label="Source1" />
343+
<Edge From="2" To="6" Label="Source1" />
344+
<Edge From="3" To="4" Label="Source1" />
345+
<Edge From="4" To="5" Label="Source1" />
346+
<Edge From="5" To="7" Label="Source1" />
347+
<Edge From="6" To="7" Label="Source2" />
348+
<Edge From="7" To="8" Label="Source1" />
349+
<Edge From="8" To="9" Label="Source1" />
350+
<Edge From="10" To="11" Label="Source1" />
351+
<Edge From="11" To="12" Label="Source1" />
352+
<Edge From="12" To="13" Label="Source1" />
353+
<Edge From="12" To="16" Label="Source1" />
354+
<Edge From="13" To="14" Label="Source1" />
355+
<Edge From="14" To="15" Label="Source1" />
356+
<Edge From="15" To="17" Label="Source1" />
357+
<Edge From="16" To="17" Label="Source2" />
358+
<Edge From="17" To="18" Label="Source1" />
359+
<Edge From="18" To="19" Label="Source1" />
360+
</Edges>
361+
</Workflow>
362+
</WorkflowBuilder>

0 commit comments

Comments
 (0)