def testSettingFactoriesSimple(self): """Simple add/remove Factory tests""" ac = Action() p = Pipeline() src = common.FakeSourceFactory() sink = common.FakeSinkFactory() # you can't set a Sink element as a producer self.failUnlessRaises(ActionError, ac.addProducers, sink) # you can't set a Source element as a consumer self.failUnlessRaises(ActionError, ac.addConsumers, src) # if the action is active, you can't add anything ac.state = STATE_ACTIVE self.failUnlessRaises(ActionError, ac.addProducers, src) self.failUnlessRaises(ActionError, ac.addConsumers, sink) ac.state = STATE_NOT_ACTIVE # Set a producer and consumer on the action ac.addProducers(src) ac.addConsumers(sink) self.assertEquals(ac.producers, [src]) self.assertEquals(ac.consumers, [sink]) self.failUnlessRaises(ActionError, ac.removeProducers, sink) self.failUnlessRaises(ActionError, ac.removeConsumers, src) self.assertEquals(ac.producers, [src]) self.assertEquals(ac.consumers, [sink]) # you can't remove anything from an active action ac.state = STATE_ACTIVE self.failUnlessRaises(ActionError, ac.removeProducers, src) self.failUnlessRaises(ActionError, ac.removeConsumers, sink) ac.state = STATE_NOT_ACTIVE # finally, attempt correct removal ac.removeProducers(src) self.assertEquals(ac.producers, []) self.assertEquals(ac.consumers, [sink]) ac.removeConsumers(sink) self.assertEquals(ac.producers, []) self.assertEquals(ac.consumers, []) p.release()
def testSettingFactoriesSimple(self): """Simple add/remove Factory tests""" ac = Action() p = Pipeline() src = common.FakeSourceFactory() sink = common.FakeSinkFactory() # you can't set a Sink element as a producer self.failUnlessRaises(ActionError, ac.addProducers, sink) # you can't set a Source element as a consumer self.failUnlessRaises(ActionError, ac.addConsumers, src) # if the action is active, you can't add anything ac.state = STATE_ACTIVE self.failUnlessRaises(ActionError, ac.addProducers, src) self.failUnlessRaises(ActionError, ac.addConsumers, sink) ac.state = STATE_NOT_ACTIVE # Set a producer and consumer on the action ac.addProducers(src) ac.addConsumers(sink) self.assertEquals(ac.producers, [src]) self.assertEquals(ac.consumers, [sink]) self.failUnlessRaises(ActionError, ac.removeProducers, sink) self.failUnlessRaises(ActionError, ac.removeConsumers, src) self.assertEquals(ac.producers, [src]) self.assertEquals(ac.consumers, [sink]) # you can't remove anything from an active action ac.state = STATE_ACTIVE self.failUnlessRaises(ActionError, ac.removeProducers, src) self.failUnlessRaises(ActionError, ac.removeConsumers, sink) ac.state = STATE_NOT_ACTIVE # finally, attempt correct removal ac.removeProducers(src) self.assertEquals(ac.producers, []) self.assertEquals(ac.consumers, [sink]) ac.removeConsumers(sink) self.assertEquals(ac.producers, []) self.assertEquals(ac.consumers, []) p.release()
def testPipelineAction(self): """Testing pipeline state interaction""" p = Pipeline() a = Action() src = VideoTestSourceFactory() sink = common.FakeSinkFactory() sink.addInputStream(MultimediaStream(gst.Caps("any"), pad_name="sink")) # set the Action on the Pipeline p.setAction(a) self.assertEquals(p.actions, [a]) # set the Producer and Consumer a.addProducers(src) a.addConsumers(sink) a.setLink(src, sink) # activate the Action a.activate() self.failUnlessEqual(src.current_bins, 1) self.failUnlessEqual(sink.current_bins, 1) # call get*ForFactoryStream(..., automake=False). They will raise # exceptions if the action didn't create the elements. bin = p.getBinForFactoryStream(src, automake=False) p.releaseBinForFactoryStream(src) tee = p.getTeeForFactoryStream(src, automake=False) p.releaseTeeForFactoryStream(src) bin = p.getBinForFactoryStream(sink, automake=False) queue = p.getQueueForFactoryStream(sink, automake=False) self.failUnlessEqual(queue.get_pad('src').get_peer().get_parent(), bin) p.releaseBinForFactoryStream(sink) p.releaseQueueForFactoryStream(sink) # switch to PLAYING p.setState(STATE_PLAYING) # wait half a second # switch to READY p.setState(STATE_READY) # deactivate action a.deactivate() # since we're the last Action to be release, the tees # and queues should have gone self.failUnlessEqual(src.current_bins, 0) self.failUnlessEqual(sink.current_bins, 0) # remove the action from the pipeline p.removeAction(a) # the gst.Pipeline should be empty ! self.assertEquals(list(p._pipeline.elements()), []) p.release()