QGst::BinPtr GstExporter::createFileSrcBin(const QString path, const int i) { qDebug() << "creating filesrc bin, path: " << path << " i: " << i; QGst::BinPtr videoBin; QDir current = QDir::current(); current.cd("recordings"); const QString fullPath = current.absoluteFilePath(path); try { char* srcname = nameWithIndex("file", i); QGst::ElementPtr src = QGst::ElementFactory::make("filesrc", srcname); src->setProperty("location", fullPath); char* demuxName = nameWithIndex("demux", i); QGst::ElementPtr demuxer = QGst::ElementFactory::make("qtdemux", demuxName); QGst::BinPtr decoder = createDecoder(i); QGst::ElementPtr scale = QGst::ElementFactory::make("videoscale"); QGst::ElementPtr capsfilter = createCapsFilter(elementWidthPx, elementHeightPx); char* binname = nameWithIndex("filebin", i); videoBin = QGst::Bin::create(binname); videoBin->add(src, demuxer, decoder, capsfilter, scale); src->link(demuxer); videoBin->linkMany(decoder, scale, capsfilter); qDebug() << "filesrc bin: Added and linked all elements"; QGst::PadPtr filterPadSrc = capsfilter->getStaticPad("src"); videoBin->addPad(QGst::GhostPad::create(filterPadSrc, "src")); qDebug() << "filesrc bin: Added Ghostpad to the bin"; QGlib::connect(demuxer, "pad-added", this, &GstExporter::callbackNewPad, QGlib::PassSender); } catch (const QGlib::Error& error) { qCritical() << "Failed to create a filesource:" << error; return QGst::BinPtr(); } return videoBin; }
QGst::BinPtr GstRecorder::createVideoSrcBin() { QGst::BinPtr videoBin; try { videoBin = QGst::Bin::create(); QGst::ElementPtr src = QGst::ElementFactory::make("v4l2src"); src->setProperty("device", devicepath); qDebug() << "GstRecorder: v4l2src with device: " << devicepath; QGst::ElementPtr encoder; QGst::ElementPtr capsfilter = createCapsFilter(videoWitdhPx, videoHeightPx, framerate); //QGst::ElementPtr parse = QGst::ElementFactory::make("h264parse"); //QGst::ElementPtr queue = QGst::ElementFactory::make("queue"); if (usesOmx) { encoder = QGst::ElementFactory::make("omxh264enc"); } else { encoder = QGst::ElementFactory::make("x264enc"); qDebug() << "GstRecoder: created x264enc"; } videoBin->add(src, capsfilter, encoder); videoBin->linkMany(src, capsfilter, encoder); qDebug() << "GstRecorder: createVideoSrcBin: added and linked the elements"; QGst::PadPtr encoderSrcPad = encoder->getStaticPad("src"); videoBin->addPad(QGst::GhostPad::create(encoderSrcPad, "src")); } catch (const QGlib::Error &error) { qDebug() << "Failed to create video source bin:" << error; return QGst::BinPtr(); } return videoBin; }