@@ -238,6 +238,48 @@ private void updatePipelineFromRequested() {
238
238
"fullsettings" , ConfigManager .getInstance ().getConfig ().toHashMap ()));
239
239
}
240
240
241
+ /**
242
+ * Recreate the current user pipeline with the current pipeline index. Useful to force a
243
+ * recreation after changing pipeline type
244
+ */
245
+ private void recreateUserPipeline () {
246
+ // Cleanup potential old native resources before swapping over from a user pipeline
247
+ if (currentUserPipeline != null && !(currentPipelineIndex < 0 )) {
248
+ currentUserPipeline .release ();
249
+ }
250
+
251
+ var desiredPipelineSettings = userPipelineSettings .get (currentPipelineIndex );
252
+ switch (desiredPipelineSettings .pipelineType ) {
253
+ case Reflective :
254
+ logger .debug ("Creating Reflective pipeline" );
255
+ currentUserPipeline =
256
+ new ReflectivePipeline ((ReflectivePipelineSettings ) desiredPipelineSettings );
257
+ break ;
258
+ case ColoredShape :
259
+ logger .debug ("Creating ColoredShape pipeline" );
260
+ currentUserPipeline =
261
+ new ColoredShapePipeline ((ColoredShapePipelineSettings ) desiredPipelineSettings );
262
+ break ;
263
+ case AprilTag :
264
+ logger .debug ("Creating AprilTag pipeline" );
265
+ currentUserPipeline =
266
+ new AprilTagPipeline ((AprilTagPipelineSettings ) desiredPipelineSettings );
267
+ break ;
268
+
269
+ case Aruco :
270
+ logger .debug ("Creating Aruco Pipeline" );
271
+ currentUserPipeline = new ArucoPipeline ((ArucoPipelineSettings ) desiredPipelineSettings );
272
+ break ;
273
+ case ObjectDetection :
274
+ logger .debug ("Creating ObjectDetection Pipeline" );
275
+ currentUserPipeline =
276
+ new ObjectDetectionPipeline ((ObjectDetectionPipelineSettings ) desiredPipelineSettings );
277
+ default :
278
+ // Can be calib3d or drivermode, both of which are special cases
279
+ break ;
280
+ }
281
+ }
282
+
241
283
/**
242
284
* Enters or exits calibration mode based on the parameter. <br>
243
285
* <br>
@@ -521,5 +563,6 @@ public void changePipelineType(int newType) {
521
563
userPipelineSettings .set (idx , newSettings );
522
564
setPipelineInternal (idx );
523
565
reassignIndexes ();
566
+ recreateUserPipeline ();
524
567
}
525
568
}
0 commit comments