def process_frame(self, frame, frame_number, frame_count, frame_time, current_time, state):
        time.sleep(0.1)
        if self._i > self._n:
            raise PluginFinished
        self._i += 1
        self.logger.debug("%s got %r as state" % (self._k, state.keys()))
        return {self._k: self._vfunc()}

    def stop(self):
        self.logger.debug("finished")

if __name__ == "__main__":
    import logging
    logging.basicConfig(level=logging.DEBUG)

    fview = Microfview.new_from_commandline(cap_fallback=get_capture_object("synth:class=dot:fps=2:nframes=10"))

    chain = PluginChain(
                MyPlugin('even',
                         lambda: random.choice((2,4,6,8)),
                         5),
                MyPlugin('odd',
                         lambda: random.choice((1,3,5,7)),
                         10)
    )
    fview.attach_plugin(chain)
    fview.attach_plugin(TestNonBlocking())
    fview.main()


        self.uses_color = True
        self.human_name = "%s(channel=%s)" % (self.__class__.__name__, self._channel)

    def process_frame(self, frame, frame_number, frame_count, frame_time, current_time, state):
        return cv2.inRange(frame[:,:,self._channel], self._vmin, self._vmax)

class Slow(BlockingPlugin):
    def process_frame(self, *args):
        time.sleep(0.05)

if __name__ == "__main__":
    import logging
    logging.basicConfig(level=logging.DEBUG)

    fview = Microfview.new_from_commandline(cap_fallback=get_capture_object("synth:class=dot:bg=graffiti.png"))

    blue = PluginChain(ChannelSeparator(0),
                       DisplayPlugin('blue', original_frame=False),
                       Slow())
    fview.attach_parallel_plugin(blue)
    green = PluginChain(ChannelSeparator(1),
                        DisplayPlugin('green', original_frame=False))
    fview.attach_parallel_plugin(green)
    red = PluginChain(ChannelSeparator(2),
                      DisplayPlugin('red', original_frame=False),
                      Slow())
    fview.attach_parallel_plugin(red)

    fview.main()