#include "ChannelUSB.h"#include <QDateTime>#include <QDir>#include <QFileInfo>#include "Json.h"#include <QVariant>ChannelUSB::ChannelUSB(QObject *parent) : Channel(parent){alsa=Link::create("InputAlsa");audio=Link::create("Resample");video=Link::create("DecodeV");encA=Link::create("EncodeA");encV=Link::create("EncodeV");encV2=Link::create("EncodeV");usb=Link::create("InputV4l2");camOpen=false;connect(usb,SIGNAL(newEvent(QString,QVariant)),this,SLOT(onNewEvent(QString,QVariant)));}void ChannelUSB::init(QVariantMap){usb->linkV(video);overlay->linkV(encV);overlay->linkV(encV2);alsa->linkA(audio);gain->linkA(encA);Channel::init();presetPath=QString("/link/config/misc/preset_ch%1.json").arg(id);if(QFile::exists(presetPath))presetList=Json::loadFile(presetPath).toList();else{QVariantList list;list<<0<<0<<100;for(int i=0;i<8;i++){presetList<<list;}}}void ChannelUSB::updateConfig(QVariantMap cfg){if(cfg["enable"].toBool()){audio->start();video->start();QVariantMap dd;if(cfg.contains("capture")){dd["width"]=cfg["capture"].toMap()["width"].toInt();dd["height"]=cfg["capture"].toMap()["height"].toInt();dd["framerate"]=cfg["capture"].toMap()["framerate"].toInt();}else{dd["width"]=cfg["encv"].toMap()["width"].toInt();dd["height"]=cfg["encv"].toMap()["height"].toInt();dd["framerate"]=cfg["encv"].toMap()["framerate"].toInt();}if(cfg.contains("lnk")){dd["path"]="";dd["lnk"]=cfg["lnk"];}usb->start(dd);if(cfg["encv"].toMap()["codec"].toString()!="close")encV->start(cfg["encv"].toMap());elseencV->stop();if(cfg["encv2"].toMap()["codec"].toString()!="close")encV2->start(cfg["encv2"].toMap());elseencV2->stop();if(cfg["enca"].toMap()["codec"].toString()!="close")encA->start(cfg["enca"].toMap());elseencA->stop();}else{audio->stop();alsa->stop();usb->stop();encV->stop();encV2->stop();}Channel::updateConfig(cfg);}bool ChannelUSB::presetSet(int index, int p, int t, int z){QVariantList args;args<<p<<t<<z;presetList[index]=args;Json::saveFile(presetList,"/link/config/misc/preset.json");return true;}bool ChannelUSB::presetCall(int index){QVariantList ptzList = presetList[index].toList();//qDebug() << ptzList;usb->invoke("ptz_abs_p",ptzList[0]);usb->invoke("ptz_abs_t",ptzList[1]);usb->invoke("ptz_abs_z",ptzList[2]);return true;}QVariantMap ChannelUSB::uvcInvoke(QVariantMap map){QVariant ret;if(!map.contains("func"))return QVariantMap();if(!map.contains("arg"))ret = usb->invoke(map["func"].toString());elseret =usb->invoke(map["func"].toString(),map["arg"]);if(ret.type() != QVariant::Map)return QVariantMap{{"data",ret}};return ret.toMap();}void ChannelUSB::onNewEvent(QString type, QVariant info){if(sender()==usb && type=="CameraInfo")camInfo = info.toMap();else if(sender()==usb && type=="CameraOpen"){camOpen=info.toBool();emit newEvent(type,info);}else if(sender()==usb && type=="lnk"){QString lnk = info.toString();if(lkToPath(lnk).isEmpty()){alsa->stop();return;}QVariantMap dataAlsa;dataAlsa["lnk"] = lnk;if(data.contains("channels"))dataAlsa["channels"] = data["channels"].toInt();alsa->start(dataAlsa);}}QString ChannelUSB::lkToPath(QString lnk){QString path;QStringList lnks = lnk.split("|", QString::SkipEmptyParts);for (int i = 0; i < 10; ++i){QString dp="/sys/class/sound/card"+QString::number(i);if (!QFileInfo::exists(dp))break;QFileInfo fi(dp);QString realPath = fi.canonicalFilePath();if (realPath.isEmpty())continue;QDir dir(realPath);QString usbRoot;while (dir.cdUp()){QString name = dir.dirName();if(!name.isEmpty() && lnks.contains(name)){usbRoot = name;break;}}if (usbRoot.isEmpty())continue;path = "hw:" + QString::number(i);break;}return path;}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。