forked from openkylin/libqapt
147 lines
4.3 KiB
C++
147 lines
4.3 KiB
C++
/***************************************************************************
|
|
* Copyright © 2011 Jonathan Thomas <echidnaman@kubuntu.org> *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or *
|
|
* modify it under the terms of the GNU General Public License as *
|
|
* published by the Free Software Foundation; either version 2 of *
|
|
* the License or (at your option) version 3 or any later version *
|
|
* accepted by the membership of KDE e.V. (or its successor approved *
|
|
* by the membership of KDE e.V.), which shall act as a proxy *
|
|
* defined in Section 14 of version 3 of the license. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License for more details. *
|
|
* *
|
|
* You should have received a copy of the GNU General Public License *
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
|
***************************************************************************/
|
|
|
|
#include "PluginInfo.h"
|
|
|
|
#include <QDebug>
|
|
#include <QStringBuilder>
|
|
#include <QStringList>
|
|
|
|
PluginInfo::PluginInfo(const QString &gstDetails)
|
|
: m_structure(nullptr)
|
|
, m_pluginType(InvalidType)
|
|
, m_data(gstDetails)
|
|
, m_isValid(true)
|
|
{
|
|
parseDetails(gstDetails);
|
|
}
|
|
|
|
PluginInfo::~PluginInfo()
|
|
{
|
|
gst_structure_free(m_structure);
|
|
}
|
|
|
|
void PluginInfo::parseDetails(const QString &gstDetails)
|
|
{
|
|
QStringList parts = gstDetails.split('|');
|
|
|
|
if (parts.count() != 5) {
|
|
m_isValid = false;
|
|
return;
|
|
}
|
|
|
|
m_version = parts.at(1);
|
|
m_requestedBy = parts.at(2);
|
|
m_name = parts.at(3);
|
|
m_capsInfo = parts.at(4);
|
|
|
|
QStringList ss;
|
|
|
|
if (m_capsInfo.startsWith(QLatin1String("uri"))) {
|
|
// Split URI
|
|
ss = parts.at(4).split(QLatin1Char(' '));
|
|
|
|
if (!ss.isEmpty()) {
|
|
m_typeName = parts.at(0);
|
|
} else {
|
|
m_isValid = false;
|
|
}
|
|
return;
|
|
}
|
|
|
|
// Everything up to the first '-' is the typeName
|
|
m_typeName = parts.at(4).section('-', 0, 0);
|
|
m_capsInfo.remove(m_typeName + '-');
|
|
|
|
if (m_typeName == "encoder") {
|
|
m_pluginType = Encoder;
|
|
} else if (m_typeName == "decoder") {
|
|
m_pluginType = Decoder;
|
|
} else if (m_typeName== "urisource") {
|
|
m_pluginType = UriSource;
|
|
} else if (m_typeName == "urisink") {
|
|
m_pluginType = UriSink;
|
|
} else if (m_typeName == "element") {
|
|
m_pluginType = Element;
|
|
} else {
|
|
qDebug() << "invalid plugin type";
|
|
m_pluginType = InvalidType;
|
|
}
|
|
|
|
m_structure = gst_structure_new_from_string(m_capsInfo.toUtf8().constData());
|
|
if (!m_structure) {
|
|
qDebug() << "Failed to parse structure: " << m_capsInfo;
|
|
m_isValid = false;
|
|
return;
|
|
}
|
|
|
|
/* remove fields that are almost always just MIN-MAX of some sort
|
|
* in order to make the caps look less messy */
|
|
gst_structure_remove_field(m_structure, "pixel-aspect-ratio");
|
|
gst_structure_remove_field(m_structure, "framerate");
|
|
gst_structure_remove_field(m_structure, "channels");
|
|
gst_structure_remove_field(m_structure, "width");
|
|
gst_structure_remove_field(m_structure, "height");
|
|
gst_structure_remove_field(m_structure, "rate");
|
|
gst_structure_remove_field(m_structure, "depth");
|
|
gst_structure_remove_field(m_structure, "clock-rate");
|
|
gst_structure_remove_field(m_structure, "bitrate");
|
|
}
|
|
|
|
QString PluginInfo::version() const
|
|
{
|
|
return m_version;
|
|
}
|
|
|
|
QString PluginInfo::requestedBy() const
|
|
{
|
|
return m_requestedBy;
|
|
}
|
|
|
|
QString PluginInfo::name() const
|
|
{
|
|
return m_name;
|
|
}
|
|
|
|
QString PluginInfo::capsInfo() const
|
|
{
|
|
return m_capsInfo;
|
|
}
|
|
|
|
int PluginInfo::pluginType() const
|
|
{
|
|
return m_pluginType;
|
|
}
|
|
|
|
QString PluginInfo::data() const
|
|
{
|
|
return m_data;
|
|
}
|
|
|
|
QString PluginInfo::typeName() const
|
|
{
|
|
return m_typeName;
|
|
}
|
|
|
|
bool PluginInfo::isValid() const
|
|
{
|
|
return m_isValid;
|
|
}
|