X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fmodel_options.cpp;h=aa2cabf42e81b44435520146df6a0aef396a2819;hb=04519a63016ab3fde0cb1984241361d82eb082df;hp=9888ca67eda070473f3ec260e9c3ef727ccd05a9;hpb=5d9c70db0395971a8950cca4872ef34687697c1f;p=x264-launcher%2Fx264-launcher.git diff --git a/src/model_options.cpp b/src/model_options.cpp index 9888ca6..aa2cabf 100644 --- a/src/model_options.cpp +++ b/src/model_options.cpp @@ -1,6 +1,6 @@ /////////////////////////////////////////////////////////////////////////////// // Simple x264 Launcher -// Copyright (C) 2004-2014 LoRd_MuldeR +// Copyright (C) 2004-2018 LoRd_MuldeR // // 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 @@ -21,8 +21,14 @@ #include "model_options.h" +//Internal #include "global.h" +#include "model_sysinfo.h" +//Mutils +#include + +//Qt #include #include #include @@ -32,19 +38,35 @@ #define COMPARE_STR(OTHER, NAME) ((this->NAME).compare((model->NAME), Qt::CaseInsensitive) == 0) #define ASSIGN_FROM(OTHER, NAME) ((this->NAME) = (OTHER.NAME)) -OptionsModel::OptionsModel(void) +//Template keys +static const char *KEY_ENCODER_TYPE = "encoder_type"; +static const char *KEY_ENCODER_ARCH = "encoder_arch"; +static const char *KEY_ENCODER_VARIANT = "encoder_variant"; +static const char *KEY_RATECTRL_MODE = "rate_control_mode"; +static const char *KEY_TARGET_BITRATE = "target_bitrate"; +static const char *KEY_TARGET_QUANT = "target_quantizer"; +static const char *KEY_PRESET_NAME = "preset_name"; +static const char *KEY_TUNING_NAME = "tuning_name"; +static const char *KEY_PROFILE_NAME = "profile_name"; +static const char *KEY_CUSTOM_ENCODER = "custom_params_encoder"; +static const char *KEY_CUSTOM_AVS2YUV = "custom_params_avs2yuv"; + +const char *const OptionsModel::SETTING_UNSPECIFIED = ""; +const char *const OptionsModel::PROFILE_UNRESTRICTED = ""; + +OptionsModel::OptionsModel(const SysinfoModel *sysinfo) { m_encoderType = EncType_X264; - m_encoderArch = EncArch_x32; - m_encoderVariant = EncVariant_LoBit; - m_rcMode = RCMode_CRF; + m_encoderArch = sysinfo->getCPUFeatures(SysinfoModel::CPUFeatures_X64) ? 0 : 1; + m_encoderVariant = 0; + m_rcMode = 0; m_bitrate = 1200; m_quantizer = 22; m_preset = "Medium"; - m_tune = "None"; - m_profile = "Auto"; - m_custom_encoder = ""; - m_custom_avs2yuv = ""; + m_tune = QString::fromLatin1(OptionsModel::SETTING_UNSPECIFIED); + m_profile = QString::fromLatin1(OptionsModel::PROFILE_UNRESTRICTED); + m_custom_encoder = QString(); + m_custom_avs2yuv = QString(); } OptionsModel::OptionsModel(const OptionsModel &rhs) @@ -66,29 +88,7 @@ OptionsModel::~OptionsModel(void) { } -QString OptionsModel::rcMode2String(RCMode mode) -{ - switch(mode) - { - case RCMode_CRF: - return QObject::tr("CRF"); - break; - case RCMode_CQ: - return QObject::tr("CQ"); - break; - case RCMode_2Pass: - return QObject::tr("2-Pass"); - break; - case RCMode_ABR: - return QObject::tr("ABR"); - break; - default: - return QString(); - break; - } -} - -bool OptionsModel::equals(OptionsModel *model) +bool OptionsModel::equals(const OptionsModel *model) { bool equal = true; @@ -107,7 +107,7 @@ bool OptionsModel::equals(OptionsModel *model) return equal; } -bool OptionsModel::saveTemplate(OptionsModel *model, const QString &name) +bool OptionsModel::saveTemplate(const OptionsModel *model, const QString &name) { const QString templateName = name.simplified(); const QString appDir = x264_data_path(); @@ -119,23 +119,13 @@ bool OptionsModel::saveTemplate(OptionsModel *model, const QString &name) QSettings settings(QString("%1/templates.ini").arg(appDir), QSettings::IniFormat); settings.beginGroup(templateName); - - settings.setValue("encoder_type", model->m_encoderType); - settings.setValue("encoder_arch", model->m_encoderArch); - settings.setValue("encoder_variant", model->m_encoderVariant); - settings.setValue("rate_control_mode", model->m_rcMode); - settings.setValue("target_bitrate", model->m_bitrate); - settings.setValue("target_quantizer", model->m_quantizer); - settings.setValue("preset_name", model->m_preset); - settings.setValue("tuning_name", model->m_tune); - settings.setValue("profile_name", model->m_profile); - settings.setValue("custom_params_encoder", model->m_custom_encoder); - settings.setValue("custom_params_avs2yuv", model->m_custom_avs2yuv); - + + const bool okay = saveOptions(model, settings); + settings.endGroup(); settings.sync(); - return true; + return okay; } bool OptionsModel::loadTemplate(OptionsModel *model, const QString &name) @@ -148,48 +138,15 @@ bool OptionsModel::loadTemplate(OptionsModel *model, const QString &name) } QSettings settings(QString("%1/templates.ini").arg(appDir), QSettings::IniFormat); + settings.beginGroup(name); - - //For backward-compatibility - if(settings.contains("custom_params")) - { - settings.setValue("custom_params_x264", settings.value("custom_params")); - settings.remove("custom_params"); settings.sync(); - } - - bool complete = true; - if(!settings.contains("encoder_type")) complete = false; - if(!settings.contains("encoder_arch")) complete = false; - if(!settings.contains("encoder_variant")) complete = false; - if(!settings.contains("rate_control_mode")) complete = false; - if(!settings.contains("target_bitrate")) complete = false; - if(!settings.contains("target_quantizer")) complete = false; - if(!settings.contains("preset_name")) complete = false; - if(!settings.contains("tuning_name")) complete = false; - if(!settings.contains("profile_name")) complete = false; - if(!settings.contains("custom_params_encoder")) complete = false; - if(!settings.contains("custom_params_avs2yuv")) complete = false; - - if(complete) - { - model->setEncType(static_cast(settings.value("encoder_type", model->m_encoderType).toInt())); - model->setEncArch(static_cast(settings.value("encoder_arch", model->m_encoderArch).toInt())); - model->setEncVariant(static_cast(settings.value("encoder_variant", model->m_encoderVariant).toInt())); - model->setRCMode(static_cast(settings.value("rate_control_mode", model->m_rcMode).toInt())); - model->setBitrate(settings.value("target_bitrate", model->m_bitrate).toUInt()); - model->setQuantizer(settings.value("target_quantizer", model->m_quantizer).toDouble()); - model->setPreset(settings.value("preset_name", model->m_preset).toString()); - model->setTune(settings.value("tuning_name", model->m_tune).toString()); - model->setProfile(settings.value("profile_name", model->m_profile).toString()); - model->setCustomEncParams(settings.value("custom_params_x264", model->m_custom_encoder).toString()); - model->setCustomAvs2YUV(settings.value("custom_params_avs2yuv", model->m_custom_avs2yuv).toString()); - } - + const bool okay = loadOptions(model, settings); settings.endGroup(); - return complete; + + return okay; } -QMap OptionsModel::loadAllTemplates(void) +QMap OptionsModel::loadAllTemplates(const SysinfoModel *sysinfo) { QMap list; const QString appDir = x264_data_path(); @@ -201,13 +158,13 @@ QMap OptionsModel::loadAllTemplates(void) QString name = allTemplates.takeFirst(); if(!(name.contains('<') || name.contains('>') || name.contains('\\') || name.contains('/'))) { - OptionsModel *options = new OptionsModel(); + OptionsModel *options = new OptionsModel(sysinfo); if(loadTemplate(options, name)) { list.insert(name, options); continue; } - X264_DELETE(options); + MUTILS_DELETE(options); } } @@ -235,3 +192,84 @@ bool OptionsModel::deleteTemplate(const QString &name) return false; } + +bool OptionsModel::saveOptions(const OptionsModel *model, QSettings &settingsFile) +{ + settingsFile.setValue(KEY_ENCODER_TYPE, model->m_encoderType); + settingsFile.setValue(KEY_ENCODER_ARCH, model->m_encoderArch); + settingsFile.setValue(KEY_ENCODER_VARIANT, model->m_encoderVariant); + settingsFile.setValue(KEY_RATECTRL_MODE, model->m_rcMode); + settingsFile.setValue(KEY_TARGET_BITRATE, model->m_bitrate); + settingsFile.setValue(KEY_TARGET_QUANT, model->m_quantizer); + settingsFile.setValue(KEY_PRESET_NAME, model->m_preset); + settingsFile.setValue(KEY_TUNING_NAME, model->m_tune); + settingsFile.setValue(KEY_PROFILE_NAME, model->m_profile); + settingsFile.setValue(KEY_CUSTOM_ENCODER, model->m_custom_encoder); + settingsFile.setValue(KEY_CUSTOM_AVS2YUV, model->m_custom_avs2yuv); + + return true; +} + +bool OptionsModel::loadOptions(OptionsModel *model, QSettings &settingsFile) +{ + fixTemplate(settingsFile); /*for backward compatibility*/ + + bool complete = true; + if(!settingsFile.contains(KEY_ENCODER_TYPE)) complete = false; + if(!settingsFile.contains(KEY_ENCODER_ARCH)) complete = false; + if(!settingsFile.contains(KEY_ENCODER_VARIANT)) complete = false; + if(!settingsFile.contains(KEY_RATECTRL_MODE)) complete = false; + if(!settingsFile.contains(KEY_TARGET_BITRATE)) complete = false; + if(!settingsFile.contains(KEY_TARGET_QUANT)) complete = false; + if(!settingsFile.contains(KEY_PRESET_NAME)) complete = false; + if(!settingsFile.contains(KEY_TUNING_NAME)) complete = false; + if(!settingsFile.contains(KEY_PROFILE_NAME)) complete = false; + if(!settingsFile.contains(KEY_CUSTOM_ENCODER)) complete = false; + if(!settingsFile.contains(KEY_CUSTOM_AVS2YUV)) complete = false; + + if(complete) + { + model->setEncType (settingsFile.value(KEY_ENCODER_TYPE, model->m_encoderType) .toInt()); + model->setEncArch (settingsFile.value(KEY_ENCODER_ARCH, model->m_encoderArch) .toInt()); + model->setEncVariant (settingsFile.value(KEY_ENCODER_VARIANT, model->m_encoderVariant).toInt()); + model->setRCMode (settingsFile.value(KEY_RATECTRL_MODE, model->m_rcMode) .toInt()); + model->setBitrate (settingsFile.value(KEY_TARGET_BITRATE, model->m_bitrate) .toUInt()); + model->setQuantizer (settingsFile.value(KEY_TARGET_QUANT, model->m_quantizer) .toDouble()); + model->setPreset (settingsFile.value(KEY_PRESET_NAME, model->m_preset) .toString()); + model->setTune (settingsFile.value(KEY_TUNING_NAME, model->m_tune) .toString()); + model->setProfile (settingsFile.value(KEY_PROFILE_NAME, model->m_profile) .toString()); + model->setCustomEncParams(settingsFile.value(KEY_CUSTOM_ENCODER, model->m_custom_encoder).toString()); + model->setCustomAvs2YUV (settingsFile.value(KEY_CUSTOM_AVS2YUV, model->m_custom_avs2yuv).toString()); + } + + return complete; +} + +void OptionsModel::fixTemplate(QSettings &settingsFile) +{ + if(!(settingsFile.contains(KEY_ENCODER_TYPE) || settingsFile.contains(KEY_ENCODER_ARCH) || settingsFile.contains(KEY_ENCODER_VARIANT))) + { + settingsFile.setValue(KEY_ENCODER_TYPE, 0); + settingsFile.setValue(KEY_ENCODER_ARCH, 0); + settingsFile.setValue(KEY_ENCODER_VARIANT, 0); + } + + static const char *legacyKey[] = { "custom_params", "custom_params_x264", NULL }; + for(int i = 0; legacyKey[i]; i++) + { + if(settingsFile.contains(legacyKey[i])) + { + settingsFile.setValue(KEY_CUSTOM_ENCODER, settingsFile.value(legacyKey[i])); + settingsFile.remove(legacyKey[i]); + } + } + + if(settingsFile.value(KEY_PROFILE_NAME).toString().compare("auto", Qt::CaseInsensitive) == 0) + { + settingsFile.setValue(KEY_PROFILE_NAME, QString::fromLatin1(OptionsModel::PROFILE_UNRESTRICTED)); + } + if(settingsFile.value(KEY_TUNING_NAME).toString().compare("none", Qt::CaseInsensitive) == 0) + { + settingsFile.setValue(KEY_TUNING_NAME, QString::fromLatin1(OptionsModel::SETTING_UNSPECIFIED)); + } +}