Skip to content
Snippets Groups Projects
Commit b371c7c3 authored by Stepan Salenikovich's avatar Stepan Salenikovich
Browse files

codecmodel: add missing codec parameters

This allows the reading and writing of these additional parameters
via LRC.

Change-Id: Ibfbe07a8cb7bcfc99d577438abe6b76efefab76c
Tuleap: #215
parent bf8750e2
Branches
No related tags found
No related merge requests found
...@@ -41,13 +41,19 @@ class CodecModelPrivate final : public QObject ...@@ -41,13 +41,19 @@ class CodecModelPrivate final : public QObject
Q_OBJECT Q_OBJECT
public: public:
CodecModelPrivate(CodecModel* parent); CodecModelPrivate(CodecModel* parent);
///@struct CodecData store audio codec information ///@struct CodecData store audio/video codec information
struct CodecData { struct CodecData {
int id ; int id ;
QString name ; QString name ;
QString bitrate ; QString bitrate ;
QString samplerate; QString min_bitrate;
QString type ; QString max_bitrate;
QString samplerate ;
QString type ;
QString quality ;
QString min_quality;
QString max_quality;
QString auto_quality_enabled;
}; };
//Attributes //Attributes
...@@ -128,11 +134,17 @@ QHash<int,QByteArray> CodecModel::roleNames() const ...@@ -128,11 +134,17 @@ QHash<int,QByteArray> CodecModel::roleNames() const
static bool initRoles = false; static bool initRoles = false;
if (!initRoles) { if (!initRoles) {
initRoles = true; initRoles = true;
roles.insert(CodecModel::Role::ID ,QByteArray("id")); roles.insert(CodecModel::Role::ID ,QByteArray("id"));
roles.insert(CodecModel::Role::NAME ,QByteArray("name")); roles.insert(CodecModel::Role::NAME ,QByteArray("name"));
roles.insert(CodecModel::Role::BITRATE ,QByteArray("bitrate")); roles.insert(CodecModel::Role::BITRATE ,QByteArray("bitrate"));
roles.insert(CodecModel::Role::SAMPLERATE,QByteArray("samplerate")); roles.insert(CodecModel::Role::MIN_BITRATE,QByteArray("min_bitrate"));
roles.insert(CodecModel::Role::TYPE ,QByteArray("type")); roles.insert(CodecModel::Role::MAX_BITRATE,QByteArray("max_bitrate"));
roles.insert(CodecModel::Role::SAMPLERATE ,QByteArray("samplerate"));
roles.insert(CodecModel::Role::TYPE ,QByteArray("type"));
roles.insert(CodecModel::Role::QUALITY ,QByteArray("quality"));
roles.insert(CodecModel::Role::MIN_QUALITY,QByteArray("min_quality"));
roles.insert(CodecModel::Role::MAX_QUALITY,QByteArray("max_quality"));
roles.insert(CodecModel::Role::AUTO_QUALITY_ENABLED,QByteArray("autoQualityEnabled"));
} }
return roles; return roles;
} }
...@@ -147,28 +159,40 @@ QItemSelectionModel* CodecModel::selectionModel() const ...@@ -147,28 +159,40 @@ QItemSelectionModel* CodecModel::selectionModel() const
///Model data ///Model data
QVariant CodecModel::data(const QModelIndex& idx, int role) const QVariant CodecModel::data(const QModelIndex& idx, int role) const
{ {
if(idx.column() == 0 && role == Qt::DisplayRole ) { if (idx.column() != 0)
return QVariant(d_ptr->m_lCodecs[idx.row()]->name); return QVariant();
}
else if(idx.column() == 0 && role == Qt::CheckStateRole ) { switch (role) {
return QVariant(d_ptr->m_lEnabledCodecs[d_ptr->m_lCodecs[idx.row()]->id] ? Qt::Checked : Qt::Unchecked); case Qt::DisplayRole:
} return QVariant(d_ptr->m_lCodecs[idx.row()]->name);
else if (idx.column() == 0 && role == CodecModel::Role::NAME ) { case Qt::CheckStateRole:
return d_ptr->m_lCodecs[idx.row()]->name; return QVariant(d_ptr->m_lEnabledCodecs[d_ptr->m_lCodecs[idx.row()]->id] ? Qt::Checked : Qt::Unchecked);
} case CodecModel::Role::NAME:
else if (idx.column() == 0 && role == CodecModel::Role::BITRATE ) { return d_ptr->m_lCodecs[idx.row()]->name;
return d_ptr->m_lCodecs[idx.row()]->bitrate; case CodecModel::Role::BITRATE:
} return d_ptr->m_lCodecs[idx.row()]->bitrate;
else if (idx.column() == 0 && role == CodecModel::Role::SAMPLERATE ) { case CodecModel::Role::MIN_BITRATE:
return d_ptr->m_lCodecs[idx.row()]->samplerate; return d_ptr->m_lCodecs[idx.row()]->min_bitrate;
} case CodecModel::Role::MAX_BITRATE:
else if (idx.column() == 0 && role == CodecModel::Role::ID ) { return d_ptr->m_lCodecs[idx.row()]->max_bitrate;
return d_ptr->m_lCodecs[idx.row()]->id; case CodecModel::Role::SAMPLERATE:
} return d_ptr->m_lCodecs[idx.row()]->samplerate;
else if (idx.column() == 0 && role == CodecModel::Role::TYPE ) { case CodecModel::Role::ID:
return d_ptr->m_lCodecs[idx.row()]->type; return d_ptr->m_lCodecs[idx.row()]->id;
} case CodecModel::Role::TYPE:
return QVariant(); return d_ptr->m_lCodecs[idx.row()]->type;
case CodecModel::Role::QUALITY:
return d_ptr->m_lCodecs[idx.row()]->quality;
case CodecModel::Role::MIN_QUALITY:
return d_ptr->m_lCodecs[idx.row()]->min_quality;
case CodecModel::Role::MAX_QUALITY:
return d_ptr->m_lCodecs[idx.row()]->max_quality;
case CodecModel::Role::AUTO_QUALITY_ENABLED:
return d_ptr->m_lCodecs[idx.row()]->auto_quality_enabled;
default:
return QVariant();
}
return QVariant();
} }
///Number of audio codecs ///Number of audio codecs
...@@ -192,43 +216,54 @@ Qt::ItemFlags CodecModel::flags(const QModelIndex& idx) const ...@@ -192,43 +216,54 @@ Qt::ItemFlags CodecModel::flags(const QModelIndex& idx) const
///Set audio codec data ///Set audio codec data
bool CodecModel::setData( const QModelIndex& idx, const QVariant &value, int role) bool CodecModel::setData( const QModelIndex& idx, const QVariant &value, int role)
{ {
if (idx.column() == 0 && role == CodecModel::NAME) { if (idx.column() != 0)
d_ptr->m_lCodecs[idx.row()]->name = value.toString(); return false;
emit dataChanged(idx, idx);
this << EditAction::MODIFY; switch (role) {
return true; case CodecModel::NAME :
} d_ptr->m_lCodecs[idx.row()]->name = value.toString();
else if (idx.column() == 0 && role == CodecModel::BITRATE) { break;
d_ptr->m_lCodecs[idx.row()]->bitrate = value.toString(); case CodecModel::BITRATE :
emit dataChanged(idx, idx); d_ptr->m_lCodecs[idx.row()]->bitrate = value.toString();
this << EditAction::MODIFY; break;
return true; case CodecModel::MIN_BITRATE :
} d_ptr->m_lCodecs[idx.row()]->min_bitrate = value.toString();
else if(idx.column() == 0 && role == Qt::CheckStateRole) { break;
d_ptr->m_lEnabledCodecs[d_ptr->m_lCodecs[idx.row()]->id] = value.toBool(); case CodecModel::MAX_BITRATE :
emit dataChanged(idx, idx); d_ptr->m_lCodecs[idx.row()]->max_bitrate = value.toString();
this << EditAction::MODIFY; break;
return true; case Qt::CheckStateRole :
} d_ptr->m_lEnabledCodecs[d_ptr->m_lCodecs[idx.row()]->id] = value.toBool();
else if (idx.column() == 0 && role == CodecModel::SAMPLERATE) { break;
d_ptr->m_lCodecs[idx.row()]->samplerate = value.toString(); case CodecModel::SAMPLERATE :
emit dataChanged(idx, idx); d_ptr->m_lCodecs[idx.row()]->samplerate = value.toString();
this << EditAction::MODIFY; break;
return true; case CodecModel::ID :
} d_ptr->m_lCodecs[idx.row()]->id = value.toInt();
else if (idx.column() == 0 && role == CodecModel::ID) { break;
d_ptr->m_lCodecs[idx.row()]->id = value.toInt(); case CodecModel::TYPE :
emit dataChanged(idx, idx); d_ptr->m_lCodecs[idx.row()]->type = value.toString();
this << EditAction::MODIFY; break;
return true; case CodecModel::QUALITY :
} d_ptr->m_lCodecs[idx.row()]->quality = value.toString();
else if (idx.column() == 0 && role == CodecModel::TYPE) { break;
d_ptr->m_lCodecs[idx.row()]->type = value.toString(); case CodecModel::MIN_QUALITY :
emit dataChanged(idx, idx); d_ptr->m_lCodecs[idx.row()]->min_quality = value.toString();
this << EditAction::MODIFY; break;
return true; case CodecModel::MAX_QUALITY :
} d_ptr->m_lCodecs[idx.row()]->max_quality = value.toString();
return false; break;
case CodecModel::AUTO_QUALITY_ENABLED :
d_ptr->m_lCodecs[idx.row()]->auto_quality_enabled = value.toString();
break;
default:
return false;
}
//if we did not return yet, then we modified the codec
emit dataChanged(idx, idx);
this << EditAction::MODIFY;
return true;
} }
///Add a new audio codec ///Add a new audio codec
...@@ -306,7 +341,13 @@ void CodecModelPrivate::reload() ...@@ -306,7 +341,13 @@ void CodecModelPrivate::reload()
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::NAME ] ,CodecModel::Role::NAME ); q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::NAME ] ,CodecModel::Role::NAME );
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::SAMPLE_RATE ] ,CodecModel::Role::SAMPLERATE ); q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::SAMPLE_RATE ] ,CodecModel::Role::SAMPLERATE );
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::BITRATE ] ,CodecModel::Role::BITRATE ); q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::BITRATE ] ,CodecModel::Role::BITRATE );
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::MIN_BITRATE ] ,CodecModel::Role::MIN_BITRATE);
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::MAX_BITRATE ] ,CodecModel::Role::MAX_BITRATE);
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::TYPE ] ,CodecModel::Role::TYPE ); q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::TYPE ] ,CodecModel::Role::TYPE );
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::QUALITY ] ,CodecModel::Role::QUALITY );
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::MIN_QUALITY ] ,CodecModel::Role::MIN_QUALITY);
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::MAX_QUALITY ] ,CodecModel::Role::MAX_QUALITY);
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::AUTO_QUALITY_ENABLED] ,CodecModel::Role::AUTO_QUALITY_ENABLED);
q_ptr->setData(idx, Qt::Checked ,Qt::CheckStateRole); q_ptr->setData(idx, Qt::Checked ,Qt::CheckStateRole);
// remove from list of all codecs, since we have already updated it // remove from list of all codecs, since we have already updated it
...@@ -331,7 +372,13 @@ void CodecModelPrivate::reload() ...@@ -331,7 +372,13 @@ void CodecModelPrivate::reload()
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::NAME ] ,CodecModel::Role::NAME ); q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::NAME ] ,CodecModel::Role::NAME );
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::SAMPLE_RATE ] ,CodecModel::Role::SAMPLERATE ); q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::SAMPLE_RATE ] ,CodecModel::Role::SAMPLERATE );
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::BITRATE ] ,CodecModel::Role::BITRATE ); q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::BITRATE ] ,CodecModel::Role::BITRATE );
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::MIN_BITRATE ] ,CodecModel::Role::MIN_BITRATE);
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::MAX_BITRATE ] ,CodecModel::Role::MAX_BITRATE);
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::TYPE ] ,CodecModel::Role::TYPE ); q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::TYPE ] ,CodecModel::Role::TYPE );
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::QUALITY ] ,CodecModel::Role::QUALITY );
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::MIN_QUALITY ] ,CodecModel::Role::MIN_QUALITY);
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::MAX_QUALITY ] ,CodecModel::Role::MAX_QUALITY);
q_ptr->setData(idx,codec[ DRing::Account::ConfProperties::CodecInfo::AUTO_QUALITY_ENABLED] ,CodecModel::Role::AUTO_QUALITY_ENABLED);
q_ptr->setData(idx, Qt::Unchecked ,Qt::CheckStateRole); q_ptr->setData(idx, Qt::Unchecked ,Qt::CheckStateRole);
} }
...@@ -362,7 +409,13 @@ void CodecModelPrivate::save() ...@@ -362,7 +409,13 @@ void CodecModelPrivate::save()
codecDetails[ DRing::Account::ConfProperties::CodecInfo::NAME ] = q_ptr->data(idx,CodecModel::Role::NAME).toString(); codecDetails[ DRing::Account::ConfProperties::CodecInfo::NAME ] = q_ptr->data(idx,CodecModel::Role::NAME).toString();
codecDetails[ DRing::Account::ConfProperties::CodecInfo::SAMPLE_RATE ] = q_ptr->data(idx,CodecModel::Role::SAMPLERATE).toString(); codecDetails[ DRing::Account::ConfProperties::CodecInfo::SAMPLE_RATE ] = q_ptr->data(idx,CodecModel::Role::SAMPLERATE).toString();
codecDetails[ DRing::Account::ConfProperties::CodecInfo::BITRATE ] = q_ptr->data(idx,CodecModel::Role::BITRATE).toString(); codecDetails[ DRing::Account::ConfProperties::CodecInfo::BITRATE ] = q_ptr->data(idx,CodecModel::Role::BITRATE).toString();
codecDetails[ DRing::Account::ConfProperties::CodecInfo::MIN_BITRATE ] = q_ptr->data(idx,CodecModel::Role::MIN_BITRATE).toString();
codecDetails[ DRing::Account::ConfProperties::CodecInfo::MAX_BITRATE ] = q_ptr->data(idx,CodecModel::Role::MAX_BITRATE).toString();
codecDetails[ DRing::Account::ConfProperties::CodecInfo::TYPE ] = q_ptr->data(idx,CodecModel::Role::TYPE).toString(); codecDetails[ DRing::Account::ConfProperties::CodecInfo::TYPE ] = q_ptr->data(idx,CodecModel::Role::TYPE).toString();
codecDetails[ DRing::Account::ConfProperties::CodecInfo::QUALITY ] = q_ptr->data(idx,CodecModel::Role::QUALITY).toString();
codecDetails[ DRing::Account::ConfProperties::CodecInfo::MIN_QUALITY ] = q_ptr->data(idx,CodecModel::Role::MIN_QUALITY).toString();
codecDetails[ DRing::Account::ConfProperties::CodecInfo::MAX_QUALITY ] = q_ptr->data(idx,CodecModel::Role::MAX_QUALITY).toString();
codecDetails[ DRing::Account::ConfProperties::CodecInfo::AUTO_QUALITY_ENABLED] = q_ptr->data(idx,CodecModel::Role::AUTO_QUALITY_ENABLED).toString();
qDebug() << "setting codec details for " << q_ptr->data(idx,CodecModel::Role::NAME).toString(); qDebug() << "setting codec details for " << q_ptr->data(idx,CodecModel::Role::NAME).toString();
......
...@@ -44,11 +44,17 @@ public: ...@@ -44,11 +44,17 @@ public:
//Roles //Roles
enum Role { enum Role {
ID = 103, ID = 103,
NAME = 100, NAME = 100,
BITRATE = 101, BITRATE = 101,
SAMPLERATE = 102, MIN_BITRATE = 105,
TYPE = 104, MAX_BITRATE = 106,
SAMPLERATE = 102,
TYPE = 104,
QUALITY = 107,
MIN_QUALITY = 108,
MAX_QUALITY = 109,
AUTO_QUALITY_ENABLED = 110,
}; };
/// @enum CodecModel::Action Manage a CodecModel lifecycle /// @enum CodecModel::Action Manage a CodecModel lifecycle
...@@ -119,4 +125,3 @@ private: ...@@ -119,4 +125,3 @@ private:
Q_DECLARE_METATYPE(CodecModel*) Q_DECLARE_METATYPE(CodecModel*)
CodecModel* LIB_EXPORT operator<<(CodecModel* a, CodecModel::EditAction action); CodecModel* LIB_EXPORT operator<<(CodecModel* a, CodecModel::EditAction action);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment