[Scummvm-cvs-logs] scummvm-tools master -> 79ebea97c51e9eb4959797d39cb875775ec59150
criezy
criezy at scummvm.org
Wed Apr 6 19:24:48 CEST 2011
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm-tools' repo located at https://github.com/scummvm/scummvm-tools .
Summary:
79ebea97c5 TOOLS: Improve GUI for Ogg encoding options
Commit: 79ebea97c51e9eb4959797d39cb875775ec59150
https://github.com/scummvm/scummvm-tools/commit/79ebea97c51e9eb4959797d39cb875775ec59150
Author: Thierry Crozat (criezy at scummvm.org)
Date: 2011-04-06T10:23:21-07:00
Commit Message:
TOOLS: Improve GUI for Ogg encoding options
This makes it possible to encode using a target quality instead of
target bitrate and also makes min and max bitrates optionals.
This fixes bug #3092367.
Changed paths:
NEWS
compress.cpp
compress.h
gui/configuration.cpp
gui/configuration.h
gui/gui_tools.cpp
gui/pages.cpp
gui/pages.h
diff --git a/NEWS b/NEWS
index 8adaa97..2085ad1 100644
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,7 @@ For a more comprehensive changelog for the latest experimental SVN code, see:
http://scummvm.svn.sourceforge.net/viewvc/scummvm/tools/trunk/?view=log
1.3.0 (????-??-??)
+ - Fix bug #3092367: "TOOLS: Improve GUI for Ogg encoding options".
1.2.0 (2010-10-15)
- Add extract_fascination_cd tool for extracting STK archives from a mode1/2048
diff --git a/compress.cpp b/compress.cpp
index 59cb9d3..ac9c84a 100644
--- a/compress.cpp
+++ b/compress.cpp
@@ -892,6 +892,9 @@ void CompressionTool::setOggQuality(const std::string& arg) {
if (oggparms.quality < -1.f || oggparms.quality > 10.f)
throw ToolException("Quality out of bounds (-q), must be between -1 and 10.");
+
+ // Also unset nominal bitrate so that quality is used
+ oggparms.nominalBitr = -1;
}
void CompressionTool::setOggMinBitrate(const std::string& arg) {
@@ -924,6 +927,14 @@ void CompressionTool::setOggMaxBitrate(const std::string& arg) {
throw ToolException("Maximum bitrate out of bounds (-M), must be between 8 and 160.");
}
+void CompressionTool::unsetOggMinBitrate() {
+ oggparms.minBitr = -1;
+}
+
+void CompressionTool::unsetOggMaxBitrate() {
+ oggparms.maxBitr = -1;
+}
+
bool CompressionTool::processMp3Parms() {
while (!_arguments.empty()) {
std::string arg = _arguments.front();
diff --git a/compress.h b/compress.h
index b2d8b45..abc89d3 100644
--- a/compress.h
+++ b/compress.h
@@ -113,6 +113,9 @@ public:
void setOggMinBitrate(const std::string&);
void setOggAvgBitrate(const std::string&);
void setOggMaxBitrate(const std::string&);
+ void unsetOggMinBitrate();
+ void unsetOggMaxBitrate();
+
public:
bool processMp3Parms();
diff --git a/gui/configuration.cpp b/gui/configuration.cpp
index 991a129..ccc7a1e 100644
--- a/gui/configuration.cpp
+++ b/gui/configuration.cpp
@@ -52,11 +52,12 @@ Configuration::Configuration() {
flacCompressionLevel = wxT("8");
flacBlockSize = wxT("1152");
- // flac params
+ // ogg params
+ useOggQuality = true;
oggQuality = wxT("3");
- oggMinBitrate = wxT("24");
+ oggMinBitrate = wxT("None");
oggAvgBitrate = wxT("24");
- oggMaxBitrate = wxT("64");
+ oggMaxBitrate = wxT("None");
}
@@ -82,6 +83,7 @@ void Configuration::load() {
filecnf->Read(wxT("flacBlockSize"), &flacBlockSize, flacBlockSize);
// flac params
+ filecnf->Read(wxT("useOggQuality"), &useOggQuality, useOggQuality);
filecnf->Read(wxT("oggQuality"), &oggQuality, oggQuality);
filecnf->Read(wxT("oggMinBitrate"), &oggMinBitrate, oggMinBitrate);
filecnf->Read(wxT("oggAvgBitrate"), &oggAvgBitrate, oggAvgBitrate);
@@ -111,6 +113,7 @@ void Configuration::save(bool all) {
filecnf->Write(wxT("flacBlockSize"), flacBlockSize);
// flac params
+ filecnf->Write(wxT("useOggQuality"), useOggQuality);
filecnf->Write(wxT("oggQuality"), oggQuality);
filecnf->Write(wxT("oggMinBitrate"), oggMinBitrate);
filecnf->Write(wxT("oggAvgBitrate"), oggAvgBitrate);
diff --git a/gui/configuration.h b/gui/configuration.h
index 319e21b..9b41915 100644
--- a/gui/configuration.h
+++ b/gui/configuration.h
@@ -104,6 +104,7 @@ struct Configuration {
wxString flacBlockSize;
// flac
+ bool useOggQuality;
wxString oggQuality;
wxString oggMinBitrate;
wxString oggAvgBitrate;
diff --git a/gui/gui_tools.cpp b/gui/gui_tools.cpp
index 7a60c69..26214fd 100644
--- a/gui/gui_tools.cpp
+++ b/gui/gui_tools.cpp
@@ -164,10 +164,18 @@ void ToolGUI::run(const Configuration &conf) const {
compression->setFlacBlockSize ( (const char *)conf.flacBlockSize.mb_str() );
// vorbis
- compression->setOggQuality ( (const char *)conf.oggQuality.mb_str() );
- compression->setOggMinBitrate ( (const char *)conf.oggMinBitrate.mb_str() );
- compression->setOggAvgBitrate ( (const char *)conf.oggAvgBitrate.mb_str() );
- compression->setOggMaxBitrate ( (const char *)conf.oggMaxBitrate.mb_str() );
+ if (conf.useOggQuality)
+ compression->setOggQuality ( (const char *)conf.oggQuality.mb_str() );
+ else
+ compression->setOggAvgBitrate ( (const char *)conf.oggAvgBitrate.mb_str() );
+ if (conf.oggMinBitrate == wxT("None"))
+ compression->unsetOggMinBitrate();
+ else
+ compression->setOggMinBitrate ( (const char *)conf.oggMinBitrate.mb_str() );
+ if (conf.oggMaxBitrate == wxT("None"))
+ compression->unsetOggMaxBitrate();
+ else
+ compression->setOggMaxBitrate ( (const char *)conf.oggMaxBitrate.mb_str() );
}
_backend->run();
diff --git a/gui/pages.cpp b/gui/pages.cpp
index 3fbbe78..53dcfa1 100644
--- a/gui/pages.cpp
+++ b/gui/pages.cpp
@@ -1146,8 +1146,9 @@ ChooseAudioOptionsVorbisPage::ChooseAudioOptionsVorbisPage(Configuration &config
wxWindow *ChooseAudioOptionsVorbisPage::CreatePanel(wxWindow *parent) {
wxWindow *panel = WizardPage::CreatePanel(parent);
-
-
+
+ wxSizer *sizer = new wxBoxSizer(wxVERTICAL);
+
/* Vorbis mode params
" -b <rate> <rate> is the nominal bitrate (default:unset)\n" \
" -m <rate> <rate> is the minimum bitrate (default:unset)\n" \
@@ -1155,77 +1156,133 @@ wxWindow *ChooseAudioOptionsVorbisPage::CreatePanel(wxWindow *parent) {
" -q <value> specifies the value (0 - 10) of VBR quality (10=best) (default:" oggqualDef_str ")\n" \
" --silent the output of oggenc is hidden (default:disabled)\n" \
*/
+
+
+ // Grid
+ _gridSizer = new wxFlexGridSizer(5, 2, 10, 25);
+ _gridSizer->AddGrowableCol(1);
+
+
+ // Compression target type
+ _gridSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("Target Type:")));
+
+ wxRadioButton *qualityButton = new wxRadioButton(
+ panel, wxID_ANY, wxT("Quality Factor"),
+ wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Quality"));
+
+ wxSizer *radioSizer = new wxBoxSizer(wxHORIZONTAL);
+ radioSizer->Add(qualityButton);
+
+ wxRadioButton *bitrateButton = new wxRadioButton(
+ panel, wxID_ANY, wxT("Nominal Bitrate"),
+ wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("Bitrate"));
+ radioSizer->Add(bitrateButton);
+
+ _gridSizer->Add(radioSizer, wxSizerFlags().Expand());
+
+
+ // Quality
+ const int possibleQualityCount = 11;
+ wxString possibleQualities[possibleQualityCount + 1];
+ for (int i = 0; i <= possibleQualityCount; ++i) {
+ possibleQualities[i] << i;
+ }
+
+ _qualityFactorLabel = new wxStaticText(panel, wxID_ANY, wxT("Quality:"));
+ _gridSizer->Add(_qualityFactorLabel);
+
+ _qualityFactor = new wxChoice(
+ panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
+ possibleQualityCount, possibleQualities, 0, wxDefaultValidator, wxT("QualityFactor"));
+ _gridSizer->Add(_qualityFactor, wxSizerFlags().Expand().Border(wxRIGHT, 100));
- wxFlexGridSizer *sizer = new wxFlexGridSizer(4, 2, 10, 25);
- sizer->AddGrowableCol(1);
// Bitrates
const int possibleBitrateCount = 160 / 8;
- wxString possibleBitrates[possibleBitrateCount + 1];
- for (int i = 0; i <= possibleBitrateCount; ++i) {
+ wxString possibleBitrates[possibleBitrateCount];
+ wxString possibleMinMaxBitrates[possibleBitrateCount + 1];
+ possibleMinMaxBitrates[0] = wxT("None");
+ for (int i = 0; i < possibleBitrateCount; ++i) {
possibleBitrates[i] << (i+1)*8;
+ possibleMinMaxBitrates[i+1] << (i+1)*8;
}
+
+ _nominalBitrateLabel = new wxStaticText(panel, wxID_ANY, wxT("Nominal Bitrate:"));
+ _gridSizer->Add(_nominalBitrateLabel);
- sizer->Add(new wxStaticText(panel, wxID_ANY, wxT("Minimum Bitrate:")));
+ _nominalBitrate = new wxChoice(
+ panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
+ possibleBitrateCount, possibleBitrates, 0, wxDefaultValidator, wxT("NominalBitrate"));
+ _gridSizer->Add(_nominalBitrate, wxSizerFlags().Expand().Border(wxRIGHT, 100));
- wxChoice *MinBitrate = new wxChoice(
- panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
- possibleBitrateCount, possibleBitrates, 0, wxDefaultValidator, wxT("MinimumBitrate"));
- sizer->Add(MinBitrate, wxSizerFlags().Expand().Border(wxRIGHT, 100));
-
- sizer->Add(new wxStaticText(panel, wxID_ANY, wxT("Nominal Bitrate:")));
-
- wxChoice *AvgBitrate = new wxChoice(
- panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
- possibleBitrateCount, possibleBitrates, 0, wxDefaultValidator, wxT("NominalBitrate"));
- sizer->Add(AvgBitrate, wxSizerFlags().Expand().Border(wxRIGHT, 100));
-
-
- sizer->Add(new wxStaticText(panel, wxID_ANY, wxT("Maximum Bitrate:")));
+ _gridSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("Minimum Bitrate:")));
+
+ wxChoice *MinBitrate = new wxChoice(
+ panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
+ possibleBitrateCount+1, possibleMinMaxBitrates, 0, wxDefaultValidator, wxT("MinimumBitrate"));
+ _gridSizer->Add(MinBitrate, wxSizerFlags().Expand().Border(wxRIGHT, 100));
+
+
+ _gridSizer->Add(new wxStaticText(panel, wxID_ANY, wxT("Maximum Bitrate:")));
wxChoice *MaxBitrate = new wxChoice(
- panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
- possibleBitrateCount, possibleBitrates, 0, wxDefaultValidator, wxT("MaximumBitrate"));
- sizer->Add(MaxBitrate, wxSizerFlags().Expand().Border(wxRIGHT, 100));
+ panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
+ possibleBitrateCount+1, possibleMinMaxBitrates, 0, wxDefaultValidator, wxT("MaximumBitrate"));
+ _gridSizer->Add(MaxBitrate, wxSizerFlags().Expand().Border(wxRIGHT, 100));
+
- // Quality
- const int possibleQualityCount = 11;
- wxString possibleQualities[possibleQualityCount + 1];
- for (int i = 0; i <= possibleQualityCount; ++i) {
- possibleQualities[i] << i;
- }
+ qualityButton->Connect(wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler(ChooseAudioOptionsVorbisPage::onChangeTargetType), NULL, this);
+ bitrateButton->Connect(wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler(ChooseAudioOptionsVorbisPage::onChangeTargetType), NULL, this);
- sizer->Add(new wxStaticText(panel, wxID_ANY, wxT("Quality:")));
-
- wxChoice *quality = new wxChoice(
- panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
- possibleQualityCount, possibleQualities, 0, wxDefaultValidator, wxT("Quality"));
- sizer->Add(quality, wxSizerFlags().Expand().Border(wxRIGHT, 100));
// Finish the window
+ sizer->Add(_gridSizer, wxSizerFlags().Expand());
SetAlignedSizer(panel, sizer);
-
// Load settings
MinBitrate->SetStringSelection(_configuration.oggMinBitrate);
- AvgBitrate->SetStringSelection(_configuration.oggAvgBitrate);
MaxBitrate->SetStringSelection(_configuration.oggMaxBitrate);
- quality ->SetStringSelection(_configuration.oggQuality);
+ _qualityFactor->SetStringSelection(_configuration.oggQuality);
+ _nominalBitrate->SetStringSelection(_configuration.oggAvgBitrate);
+ if (_configuration.useOggQuality)
+ qualityButton->SetValue(true);
+ else
+ bitrateButton->SetValue(true);
+
+ updateFields(panel);
return panel;
}
void ChooseAudioOptionsVorbisPage::save(wxWindow *panel) {
- wxChoice *minBitrate = static_cast<wxChoice *>(panel->FindWindowByName(wxT("MinimumBitrate")));
- wxChoice *avgBitrate = static_cast<wxChoice *>(panel->FindWindowByName(wxT("NominalBitrate")));
- wxChoice *maxBitrate = static_cast<wxChoice *>(panel->FindWindowByName(wxT("MaximumBitrate")));
- wxChoice *quality = static_cast<wxChoice *>(panel->FindWindowByName(wxT("Quality")));
+ wxRadioButton *quality = static_cast<wxRadioButton *>(panel->FindWindowByName(wxT("Quality")));
+ wxChoice *minBitrate = static_cast<wxChoice *>(panel->FindWindowByName(wxT("MinimumBitrate")));
+ wxChoice *maxBitrate = static_cast<wxChoice *>(panel->FindWindowByName(wxT("MaximumBitrate")));
+ _configuration.useOggQuality = quality->GetValue();
_configuration.oggMinBitrate = minBitrate->GetStringSelection();
- _configuration.oggAvgBitrate = avgBitrate->GetStringSelection();
+ _configuration.oggAvgBitrate = _nominalBitrate->GetStringSelection();
_configuration.oggMaxBitrate = maxBitrate->GetStringSelection();
- _configuration.oggQuality = quality ->GetStringSelection();
+ _configuration.oggQuality = _qualityFactor->GetStringSelection();
+}
+
+void ChooseAudioOptionsVorbisPage::updateFields(wxWindow *panel) {
+ wxRadioButton *quality = static_cast<wxRadioButton *>(panel->FindWindowByName(wxT("Quality")));
+
+ bool isQualitySelected = quality->GetValue();
+ _gridSizer->Show(_qualityFactor, isQualitySelected);
+ _gridSizer->Show(_qualityFactorLabel, isQualitySelected);
+ _gridSizer->Show(_nominalBitrate, !isQualitySelected);
+ _gridSizer->Show(_nominalBitrateLabel, !isQualitySelected);
+
+ _gridSizer->Layout();
+}
+
+void ChooseAudioOptionsVorbisPage::onChangeTargetType(wxCommandEvent &evt) {
+ wxRadioButton *btn = static_cast<wxRadioButton *>(evt.GetEventObject());
+ wxWindow *parent = btn->GetParent();
+ updateFields(parent);
}
void ChooseAudioOptionsVorbisPage::onNext(wxWindow *panel) {
diff --git a/gui/pages.h b/gui/pages.h
index 3620dd6..2f49a8d 100644
--- a/gui/pages.h
+++ b/gui/pages.h
@@ -366,6 +366,25 @@ public:
void onNext(wxWindow *panel);
void save(wxWindow *panel);
+
+ /**
+ * Handles clicks on the radio buttons for Quality / Nominal bitrate
+ */
+ void onChangeTargetType(wxCommandEvent &evt);
+
+ /**
+ * Enables/Disables the different fields depending on ABR/VBR setting
+ *
+ * @param panel The panel to operate on
+ */
+ void updateFields(wxWindow *panel);
+
+private:
+ wxFlexGridSizer* _gridSizer;
+ wxStaticText* _qualityFactorLabel;
+ wxChoice* _qualityFactor;
+ wxStaticText* _nominalBitrateLabel;
+ wxChoice* _nominalBitrate;
};
More information about the Scummvm-git-logs
mailing list