@Override public List<Frame> execute(List<CVParticle> input) throws Exception { Frame frame = null; List<Feature> features = new ArrayList<Feature>(); for (CVParticle particle : input) { if (particle instanceof Feature) { features.add((Feature) particle); } else if (particle instanceof Frame && frame == null) { frame = (Frame) particle; } } if (frame == null) frame = new Frame( input.get(0).getStreamId(), input.get(0).getSequenceNr(), Frame.NO_IMAGE, (byte[]) null, 0L, new Rectangle()); // merge new features with already existing features in the Frame f1: for (Feature newF : features) { for (Feature oldF : frame.getFeatures()) { if (newF.getName().equals(oldF.getName())) { oldF.getSparseDescriptors().addAll(newF.getSparseDescriptors()); continue f1; } } frame.getFeatures().add(newF); } List<Frame> result = new ArrayList<Frame>(); result.add(frame); return result; }