[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