void App::startListen(QGst::PipelinePtr pipe, int port) { QGst::ElementPtr rtcpudpsink = QGst::ElementFactory::make("udpsrc"); rtcpudpsink->setProperty("host", "127.0.0.1"); // TODO settings rtcpudpsink->setProperty("port", port); // source // rtcpudpsink->setProperty("sync", false); // rtcpudpsink->setProperty("async", false); rtcpudpsink->setProperty("caps", QGst::Caps::fromString("application/x-rtp,media=(string)audio, clock-rate=(int)8000, encoding-name=(string)SPEEX,payload=(int)110")); pipe->add(rtcpudpsink); QGst::ElementPtr bin; try { bin = QGst::Bin::fromDescription( "rtpspeexdepay ! speexdec ! audioconvert" ); } catch (const QGlib::Error & error) { qCritical() << error; qFatal("One ore more required elements are missing. Aborting..."); } pipe->add(bin); rtcpudpsink->link(bin); volumeIn = QGst::ElementFactory::make("volume"); // TODO settings pipe->add(volumeIn); bin->link(volumeIn); QGst::ElementPtr audioSynk = QGst::ElementFactory::make("autoaudiosink"); pipe->add(audioSynk); volumeIn->link(audioSynk); }
void RefPointerTest::cppWrappersTest() { QGst::ElementPtr e = QGst::ElementFactory::make("playbin"); QVERIFY(!e.isNull()); { QGst::PipelinePtr pipeline = e.dynamicCast<QGst::Pipeline>(); QVERIFY(!pipeline.isNull()); //the C++ wrappers must be the same QCOMPARE(static_cast<QGlib::RefCountedObject*>(pipeline.operator->()), static_cast<QGlib::RefCountedObject*>(e.operator->())); } { QGst::ChildProxyPtr proxy = e.dynamicCast<QGst::ChildProxy>(); QVERIFY(!proxy.isNull()); //the C++ wrappers must be the same QCOMPARE(static_cast<QGlib::RefCountedObject*>(proxy.operator->()), static_cast<QGlib::RefCountedObject*>(e.operator->())); } { //new wrap() should give the same C++ instance GstElement *gobj = e; QGst::ElementPtr e2 = QGst::ElementPtr::wrap(gobj); QCOMPARE(static_cast<QGlib::RefCountedObject*>(e2.operator->()), static_cast<QGlib::RefCountedObject*>(e.operator->())); } { QGst::StreamVolumePtr sv = e.dynamicCast<QGst::StreamVolume>(); QVERIFY(!sv.isNull()); //now the C++ wrapper must not be the same, since Pipeline does not inherit StreamVolume QVERIFY(static_cast<QGlib::RefCountedObject*>(sv.operator->()) != static_cast<QGlib::RefCountedObject*>(e.operator->())); } { QGst::MessagePtr msg = QGst::ApplicationMessage::create(e); QGst::MessagePtr msg2 = msg; QCOMPARE(static_cast<QGlib::RefCountedObject*>(msg.operator->()), static_cast<QGlib::RefCountedObject*>(msg2.operator->())); QVERIFY(msg2 == msg); QGst::MessagePtr msg3 = QGst::MessagePtr::wrap(msg2); QVERIFY(static_cast<QGlib::RefCountedObject*>(msg3.operator->()) != static_cast<QGlib::RefCountedObject*>(msg2.operator->())); QVERIFY(msg3 == msg2); } }
void BaseSinkController::releaseFromStreamingThread(const QGst::PipelinePtr & pipeline) { m_bin->setState(QGst::StateNull); // In GStreamer 1.6 it seems like the m_bin was removed from the // pipeline during onPadUnlink, additionally 1.6 gives a warning // when trying to remove an already removed bin. // So, only remove the bin if still has a parent. QGst::ObjectPtr parent = m_bin->parent(); if (!parent.isNull()) { pipeline->remove(m_bin); } else { // Since we're no longer attached to the pipeline // we need some place to make sure the pipeline is stopped pipeline->setState(QGst::StateNull); } m_bin.clear(); }
void AudioSinkController::initFromStreamingThread(const QGst::PadPtr & srcPad, const QGst::PipelinePtr & pipeline) { m_bin = QGst::Bin::fromDescription( "volume ! " "audioconvert ! " "audioresample ! " "level" ); pipeline->add(m_bin); qCDebug(LIBKTPCALL) << "add" << m_bin->name() << "to" << pipeline->name(); m_bin->syncStateWithParent(); m_bin->getStaticPad("src")->link(m_adderRequestPad); srcPad->link(m_bin->getStaticPad("sink")); }
void VideoSinkController::initFromStreamingThread(const QGst::PadPtr & srcPad, const QGst::PipelinePtr & pipeline) { m_bin = QGst::Bin::create(); m_tee = QGst::ElementFactory::make("tee"); QGst::ElementPtr fakesink = QGst::ElementFactory::make("fakesink"); fakesink->setProperty("sync", false); fakesink->setProperty("async", false); fakesink->setProperty("silent", true); fakesink->setProperty("enable-last-sample", false); m_bin->add(m_tee, fakesink); m_tee->getRequestPad("src_%u")->link(fakesink->getStaticPad("sink")); QGst::PadPtr binSinkPad = QGst::GhostPad::create(m_tee->getStaticPad("sink"), "sink"); m_bin->addPad(binSinkPad); pipeline->add(m_bin); m_bin->syncStateWithParent(); srcPad->link(binSinkPad); }
void BaseSinkController::releaseFromStreamingThread(const QGst::PipelinePtr & pipeline) { m_bin->setState(QGst::StateNull); pipeline->remove(m_bin); m_bin.clear(); }