Ticket #4712: tools_gui_tmp_lame_fix.patch

File tools_gui_tmp_lame_fix.patch, 23.3 KB (added by criezy, 14 years ago)

Proposed patch

  • scummvm/tools/trunk/compress.h

     
    8787        AudioFormat _format;
    8888
    8989        // Settings
     90        // These functions are used by the GUI Tools and by CLI argument parsing functions
    9091        // mp3 settings
    91         std::string _mp3CompressionType;
    92         std::string _mp3MpegQuality;
    93         std::string _mp3ABRBitrate;
    94         std::string _mp3VBRMinBitrate;
    95         std::string _mp3VBRMaxBitrate;
    96         std::string _mp3VBRQuality;
     92        void setMp3LamePath(const std::string&);
     93        void setMp3CompressionType(const std::string&);
     94        void setMp3MpegQuality(const std::string&);
     95        void setMp3ABRBitrate(const std::string&);
     96        void setMp3VBRMinBitrate(const std::string&);
     97        void setMp3VBRMaxBitrate(const std::string&);
     98        void setMp3VBRQuality(const std::string&);
    9799
    98100        // flac
    99         std::string _flacCompressionLevel;
    100         std::string _flacBlockSize;
     101        void setFlacCompressionLevel(const std::string&);
     102        void setFlacBlockSize(const std::string&);
    101103
    102104        // vorbis
    103         std::string _oggQuality;
    104         std::string _oggMinBitrate;
    105         std::string _oggAvgBitrate;
    106         std::string _oggMaxBitrate;
     105        void setOggQuality(const std::string&);
     106        void setOggMinBitrate(const std::string&);
     107        void setOggAvgBitrate(const std::string&);
     108        void setOggMaxBitrate(const std::string&);
    107109
    108110public:
    109111        bool processMp3Parms();
  • scummvm/tools/trunk/gui/pages.cpp

     
    833833
    834834wxWindow *ChooseAudioOptionsMp3Page::CreatePanel(wxWindow *parent) {
    835835        wxWindow *panel = WizardPage::CreatePanel(parent);
     836       
     837        wxSizer *sizer = new wxBoxSizer(wxVERTICAL);
     838       
     839        // Add a ScrolledWindow in that panel as there is a lot of options
     840        // and there might not be enough place to display them all.
     841        wxScrolledWindow *scroll = new wxScrolledWindow(panel);
     842        scroll->SetScrollbars(10, 10, 60, 40);
     843       
     844        sizer->Add(scroll, 1, wxEXPAND | wxALL);
    836845
    837 
    838846        /*
    839847        "\nMP3 mode params:\n"
     848        " -lame-path <path> Path to the lame excutable to use (default: lame)\n"
    840849        " -b <rate>    <rate> is the target bitrate(ABR)/minimal bitrate(VBR) (default:" minBitrDef_str "%d)\n"
    841850        " -B <rate>    <rate> is the maximum VBR/ABR bitrate (default:%" maxBitrDef_str ")\n"
    842851        " --vbr        LAME uses the VBR mode (default)\n"
     
    846855        " --silent     the output of LAME is hidden (default:disabled)\n"
    847856        */
    848857
    849         wxFlexGridSizer *sizer = new wxFlexGridSizer(6, 2, 10, 25);
    850         sizer->AddGrowableCol(1);
     858        // Grid
     859        wxFlexGridSizer *gridSizer = new wxFlexGridSizer(7, 2, 10, 25);
     860        gridSizer->AddGrowableCol(1);
    851861
     862        // Create output selection
     863        gridSizer->Add(new wxStaticText(scroll, wxID_ANY, wxT("Lame executable:")));
    852864
     865        wxFilePickerCtrl *lamePicker = new wxFilePickerCtrl(
     866                        scroll, wxID_ANY, _configuration.outputPath, wxT("Select lame executable"),
     867                        wxT("lame"),
     868                        wxDefaultPosition, wxSize(250, -1),
     869                        wxFLP_USE_TEXTCTRL | wxFLP_FILE_MUST_EXIST | wxFLP_OPEN, wxDefaultValidator,
     870                        wxT("LamePath")
     871                );
     872               
     873        gridSizer->Add(lamePicker, wxSizerFlags().Expand());
     874
    853875        // Type of compression
    854         sizer->Add(new wxStaticText(panel, wxID_ANY, wxT("Compression Type:")));
     876        gridSizer->Add(new wxStaticText(scroll, wxID_ANY, wxT("Compression Type:")));
    855877
    856         wxRadioButton *abrButton = new wxRadioButton(panel, wxID_ANY, wxT("ABR"),
     878        wxRadioButton *abrButton = new wxRadioButton(scroll, wxID_ANY, wxT("ABR"),
    857879                wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("ABR"));
    858880
    859881        wxSizer *radioSizer = new wxBoxSizer(wxHORIZONTAL);
    860882        radioSizer->Add(abrButton);
    861883
    862         wxRadioButton *vbrButton = new wxRadioButton(panel, wxID_ANY, wxT("VBR"),
     884        wxRadioButton *vbrButton = new wxRadioButton(scroll, wxID_ANY, wxT("VBR"),
    863885                wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("VBR"));
    864886        radioSizer->Add(vbrButton);
    865887
    866         sizer->Add(radioSizer, wxSizerFlags().Expand());
     888        gridSizer->Add(radioSizer, wxSizerFlags().Expand());
    867889
    868890        // Bitrates
    869891        const int possibleBitrateCount = 160 / 8;
     
    872894                possibleBitrates[i] << (i+1)*8;
    873895        }
    874896
    875         sizer->Add(new wxStaticText(panel, wxID_ANY, wxT("Minimum Bitrate:")));
     897        gridSizer->Add(new wxStaticText(scroll, wxID_ANY, wxT("Minimum Bitrate:")));
    876898
    877899        wxChoice *vbrMinBitrate = new wxChoice(
    878                 panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
     900                scroll, wxID_ANY, wxDefaultPosition, wxDefaultSize,
    879901                possibleBitrateCount, possibleBitrates, 0, wxDefaultValidator, wxT("MinimumBitrate"));
    880         sizer->Add(vbrMinBitrate, wxSizerFlags().Expand().Border(wxRIGHT, 100));
     902        gridSizer->Add(vbrMinBitrate, wxSizerFlags().Expand().Border(wxRIGHT, 100));
    881903
    882904
    883         sizer->Add(new wxStaticText(panel, wxID_ANY, wxT("Maximum Bitrate:")));
     905        gridSizer->Add(new wxStaticText(scroll, wxID_ANY, wxT("Maximum Bitrate:")));
    884906
    885907        wxChoice *vbrMaxBitrate = new wxChoice(
    886                 panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
     908                scroll, wxID_ANY, wxDefaultPosition, wxDefaultSize,
    887909                possibleBitrateCount, possibleBitrates, 0, wxDefaultValidator, wxT("MaximumBitrate"));
    888         sizer->Add(vbrMaxBitrate, wxSizerFlags().Expand().Border(wxRIGHT, 100));
     910        gridSizer->Add(vbrMaxBitrate, wxSizerFlags().Expand().Border(wxRIGHT, 100));
    889911
    890912
    891         sizer->Add(new wxStaticText(panel, wxID_ANY, wxT("Average Bitrate:")));
     913        gridSizer->Add(new wxStaticText(scroll, wxID_ANY, wxT("Average Bitrate:")));
    892914
    893915        wxChoice *abrAvgBitrate = new wxChoice(
    894                 panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
     916                scroll, wxID_ANY, wxDefaultPosition, wxDefaultSize,
    895917                possibleBitrateCount, possibleBitrates, 0, wxDefaultValidator, wxT("AverageBitrate"));
    896         sizer->Add(abrAvgBitrate, wxSizerFlags().Expand().Border(wxRIGHT, 100));
     918        gridSizer->Add(abrAvgBitrate, wxSizerFlags().Expand().Border(wxRIGHT, 100));
    897919
    898920        abrButton->Connect(wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler(ChooseAudioOptionsMp3Page::onChangeCompressionType), NULL, this);
    899921        vbrButton->Connect(wxEVT_COMMAND_RADIOBUTTON_SELECTED, wxCommandEventHandler(ChooseAudioOptionsMp3Page::onChangeCompressionType), NULL, this);
     
    905927                possibleQualities[i] << i;
    906928        }
    907929
    908         sizer->Add(new wxStaticText(panel, wxID_ANY, wxT("VBR Quality:")));
     930        gridSizer->Add(new wxStaticText(scroll, wxID_ANY, wxT("VBR Quality:")));
    909931
    910932        wxChoice *vbrQuality = new wxChoice(
    911                 panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
     933                scroll, wxID_ANY, wxDefaultPosition, wxDefaultSize,
    912934                possibleQualityCount, possibleQualities, 0, wxDefaultValidator, wxT("VBRQuality"));
    913         sizer->Add(vbrQuality, wxSizerFlags().Expand().Border(wxRIGHT, 100));
     935        gridSizer->Add(vbrQuality, wxSizerFlags().Expand().Border(wxRIGHT, 100));
    914936
    915937
    916         sizer->Add(new wxStaticText(panel, wxID_ANY, wxT("MPEG Quality:")));
     938        gridSizer->Add(new wxStaticText(scroll, wxID_ANY, wxT("MPEG Quality:")));
    917939
    918940        wxChoice *mpegQuality = new wxChoice(
    919                 panel, wxID_ANY, wxDefaultPosition, wxDefaultSize,
     941                scroll, wxID_ANY, wxDefaultPosition, wxDefaultSize,
    920942                possibleQualityCount, possibleQualities, 0, wxDefaultValidator, wxT("MpegQuality"));
    921         sizer->Add(mpegQuality, wxSizerFlags().Expand().Border(wxRIGHT, 100));
     943        gridSizer->Add(mpegQuality, wxSizerFlags().Expand().Border(wxRIGHT, 100));
    922944
    923945        // Finish the window
     946        scroll->SetSizer(gridSizer);
    924947        SetAlignedSizer(panel, sizer);
    925948
    926949
    927950        // Load settings
     951        lamePicker->SetPath(_configuration.mp3LamePath);
    928952        if (_configuration.mp3CompressionType == wxT("ABR"))
    929953                abrButton->SetValue(true);
    930954        else
     
    941965}
    942966
    943967void ChooseAudioOptionsMp3Page::save(wxWindow *panel) {
     968        wxFilePickerCtrl *lamePath = static_cast<wxFilePickerCtrl *>(panel->FindWindowByName(wxT("LamePath")));
     969       
    944970        wxRadioButton *abr = static_cast<wxRadioButton *>(panel->FindWindowByName(wxT("ABR")));
    945971//      wxRadioButton *vbr = static_cast<wxRadioButton *>(panel->FindWindowByName(wxT("VBR")));
    946972
     
    950976        wxChoice *vbrQuality = static_cast<wxChoice *>(panel->FindWindowByName(wxT("VBRQuality")));
    951977        wxChoice *mpegQuality = static_cast<wxChoice *>(panel->FindWindowByName(wxT("MpegQuality")));
    952978
     979        _configuration.mp3LamePath      = lamePath->GetPath();
    953980        _configuration.mp3VBRMinBitrate = vbrMinBitrate->GetStringSelection();
    954981        _configuration.mp3VBRMaxBitrate = vbrMaxBitrate->GetStringSelection();
    955982        _configuration.mp3ABRBitrate    = abrAvgBitrate->GetStringSelection();
  • scummvm/tools/trunk/gui/gui_tools.cpp

     
    146146                compression->_format               = conf.selectedAudioFormat;
    147147
    148148                // mp3
    149                 compression->_mp3ABRBitrate        = (const char *)conf.mp3ABRBitrate.mb_str();
    150                 compression->_mp3CompressionType   = (const char *)conf.mp3CompressionType.mb_str();
    151                 compression->_mp3MpegQuality       = (const char *)conf.mp3MpegQuality.mb_str();
    152                 compression->_mp3ABRBitrate        = (const char *)conf.mp3ABRBitrate.mb_str();
    153                 compression->_mp3VBRMinBitrate     = (const char *)conf.mp3VBRMinBitrate.mb_str();
    154                 compression->_mp3VBRMaxBitrate     = (const char *)conf.mp3VBRMaxBitrate.mb_str();
    155                 compression->_mp3VBRQuality        = (const char *)conf.mp3VBRQuality.mb_str();
     149                compression->setMp3LamePath       ( (const char *)conf.mp3LamePath.mb_str()        );
     150                compression->setMp3CompressionType( (const char *)conf.mp3CompressionType.mb_str() );
     151                compression->setMp3MpegQuality    ( (const char *)conf.mp3MpegQuality.mb_str()     );
     152                compression->setMp3ABRBitrate     ( (const char *)conf.mp3ABRBitrate.mb_str()      );
     153                compression->setMp3VBRMinBitrate  ( (const char *)conf.mp3VBRMinBitrate.mb_str()   );
     154                compression->setMp3VBRMaxBitrate  ( (const char *)conf.mp3VBRMaxBitrate.mb_str()   );
     155                compression->setMp3VBRQuality     ( (const char *)conf.mp3VBRQuality.mb_str()      );
    156156
    157157                // flac
    158                 compression->_flacCompressionLevel = (const char *)conf.flacCompressionLevel.mb_str();
    159                 compression->_flacBlockSize        = (const char *)conf.flacBlockSize.mb_str();
     158                compression->setFlacCompressionLevel( (const char *)conf.flacCompressionLevel.mb_str() );
     159                compression->setFlacBlockSize       ( (const char *)conf.flacBlockSize.mb_str()        );
    160160
    161161                // vorbis
    162                 compression->_oggQuality           = (const char *)conf.oggQuality.mb_str();
    163                 compression->_oggMinBitrate        = (const char *)conf.oggMinBitrate.mb_str();
    164                 compression->_oggAvgBitrate        = (const char *)conf.oggAvgBitrate.mb_str();
    165                 compression->_oggMaxBitrate        = (const char *)conf.oggMaxBitrate.mb_str();
     162                compression->setOggQuality    ( (const char *)conf.oggQuality.mb_str()    );
     163                compression->setOggMinBitrate ( (const char *)conf.oggMinBitrate.mb_str() );
     164                compression->setOggAvgBitrate ( (const char *)conf.oggAvgBitrate.mb_str() );
     165                compression->setOggMaxBitrate ( (const char *)conf.oggMaxBitrate.mb_str() );
    166166        }
    167167
    168168        _backend->run();
  • scummvm/tools/trunk/gui/configuration.cpp

     
    3737        advancedAudioSettings = false;
    3838
    3939        // mp3 params
     40        mp3LamePath = wxT("lame");
    4041        mp3CompressionType = wxT("VBR");
    4142        mp3MpegQuality = wxT("2");
    4243
     
    6768        filecnf->Read(wxT("outputpath"), &outputPath);
    6869
    6970        // mp3 params
     71        filecnf->Read(wxT("mp3LamePath"), &mp3LamePath, mp3LamePath);
    7072        filecnf->Read(wxT("mp3CompressionType"), &mp3CompressionType, mp3CompressionType);
    7173        filecnf->Read(wxT("mp3MpegQuality"), &mp3MpegQuality, mp3MpegQuality);
    7274        filecnf->Read(wxT("mp3ABRBitrate"), &mp3ABRBitrate, mp3ABRBitrate);
     
    9294
    9395        wxFileName op(outputPath);
    9496        filecnf->Write(wxT("outputpath"), op.GetPath(wxPATH_GET_VOLUME | wxPATH_GET_SEPARATOR));
     97        filecnf->Write(wxT("mp3LamePath"), mp3LamePath);
    9598
    9699        if (all) {
    97100                // mp3 params
  • scummvm/tools/trunk/gui/configuration.h

     
    8484        bool advancedAudioSettings;
    8585
    8686        // mp3 settings
     87        wxString mp3LamePath;
    8788        wxString mp3CompressionType;
    8889        wxString mp3MpegQuality;
    8990        wxString mp3ABRBitrate;
  • scummvm/tools/trunk/compress.cpp

     
    4848        uint32 algqual;
    4949        uint32 vbrqual;
    5050        bool silent;
     51        std::string lamePath;
    5152};
    5253
    5354struct oggencparams {
     
    7071        uint8 bitsPerSample;
    7172};
    7273
    73 lameparams encparms = { minBitrDef, maxBitrDef, false, algqualDef, vbrqualDef, 0 };
     74lameparams encparms = { minBitrDef, maxBitrDef, false, algqualDef, vbrqualDef, 0, "lame" };
    7475oggencparams oggparms = { -1, -1, -1, (float)oggqualDef, 0 };
    7576flaccparams flacparms = { flacCompressDef, flacBlocksizeDef, false, false };
    7677rawtype rawAudioType = { false, false, 8 };
     
    123124        char *tmp = fbuf;
    124125
    125126        if (compmode == AUDIO_MP3) {
    126                 tmp += sprintf(tmp, "lame -t ");
     127                tmp += sprintf(tmp, "%s -t ", encparms.lamePath.c_str());
    127128                if (rawInput) {
    128129                        tmp += sprintf(tmp, "-r ");
    129130                        tmp += sprintf(tmp, "--bitwidth %d ", rawAudioType.bitsPerSample);
     
    772773        encodeAudio(outName, true, real_samplerate, tempEncoded, compMode);
    773774}
    774775
     776// mp3 settings
     777void CompressionTool::setMp3LamePath(const std::string& arg) {
     778        encparms.lamePath = arg;
     779}
     780
     781void CompressionTool::setMp3CompressionType(const std::string& arg) {
     782        encparms.abr = (arg == "ABR");
     783}
     784
     785void CompressionTool::setMp3MpegQuality(const std::string& arg) {
     786        encparms.algqual = atoi(arg.c_str());
     787       
     788        if (encparms.algqual == 0 && arg != "0")
     789                throw ToolException("Quality (-q) must be a number.");
     790       
     791        if (encparms.algqual > 9)
     792                throw ToolException("Quality (-q) out of bounds, must be between 0 and 9.");
     793}
     794
     795void CompressionTool::setMp3ABRBitrate(const std::string& arg) {
     796        setMp3VBRMinBitrate(arg);
     797}
     798
     799void CompressionTool::setMp3VBRMinBitrate(const std::string& arg) {
     800        encparms.minBitr = atoi(arg.c_str());
     801       
     802        if (encparms.minBitr == 0 && arg != "0")
     803                throw ToolException("Minimum bitrate (-b) must be a number.");
     804       
     805        if (encparms.minBitr < 8 || encparms.minBitr > 160)
     806                throw ToolException("Minimum bitrate out of bounds (-b), must be between 8 and 160.");
     807}
     808
     809void CompressionTool::setMp3VBRMaxBitrate(const std::string& arg) {
     810        encparms.maxBitr = atoi(arg.c_str());
     811       
     812        if (encparms.maxBitr == 0 && arg != "0")
     813                throw ToolException("Maximum bitrate (-B) must be a number.");
     814
     815        if ((encparms.maxBitr % 8) != 0)
     816                encparms.maxBitr -= encparms.maxBitr % 8;
     817
     818        if (encparms.maxBitr < 8 || encparms.maxBitr > 160)
     819                throw ToolException("Maximum bitrate out of bounds (-B), must be between 8 and 160.");
     820}
     821
     822void CompressionTool::setMp3VBRQuality(const std::string& arg) {
     823        encparms.vbrqual = atoi(arg.c_str());
     824        if (encparms.vbrqual > 9)
     825                throw ToolException("Quality (-q) out of bounds, must be between 0 and 9.");
     826}
     827
     828// flac
     829void CompressionTool::setFlacCompressionLevel(const std::string& arg) {
     830        flacparms.compressionLevel = atoi(arg.c_str());
     831       
     832        if (flacparms.compressionLevel == 0 && arg != "0")
     833                throw ToolException("FLAC compression level must be a number.");
     834
     835        if (flacparms.compressionLevel < 0 || flacparms.compressionLevel > 8)
     836                throw ToolException("FLAC compression level ot of bounds, must be between 0 and 8.");
     837               
     838}
     839
     840void CompressionTool::setFlacBlockSize(const std::string& arg) {
     841        flacparms.blocksize = atoi(arg.c_str());
     842
     843        if (flacparms.blocksize == 0 && arg != "0")
     844                throw ToolException("FLAC block size (-b) must be a number.");
     845}
     846
     847// vorbis
     848void CompressionTool::setOggQuality(const std::string& arg) {
     849        oggparms.quality = (float)atoi(arg.c_str());
     850       
     851        if (oggparms.quality == 0. && arg != "0")
     852                throw ToolException("Quality (-q) must be a number.");
     853       
     854        if (oggparms.quality < 0. || oggparms.quality > 10.)
     855                throw ToolException("Quality out of bounds (-q), must be between 0 and 10.");
     856}
     857
     858void CompressionTool::setOggMinBitrate(const std::string& arg) {
     859        oggparms.minBitr = atoi(arg.c_str());
     860
     861        if (oggparms.minBitr == 0 && arg != "0")
     862                throw ToolException("Minimum bitrate (-m) must be a number.");
     863
     864        if ((oggparms.minBitr % 8) != 0)
     865                oggparms.minBitr -= oggparms.minBitr % 8;
     866       
     867        if (oggparms.minBitr < 8 || oggparms.minBitr > 160)
     868                throw ToolException("Minimum bitrate out of bounds (-m), must be between 8 and 160.");
     869}
     870
     871void CompressionTool::setOggAvgBitrate(const std::string& arg) {
     872        oggparms.nominalBitr = atoi(arg.c_str());
     873       
     874        if (oggparms.nominalBitr == 0 && arg != "0")
     875                throw ToolException("Nominal bitrate (-b) must be a number.");
     876
     877        if ((oggparms.nominalBitr % 8) != 0)
     878                oggparms.nominalBitr -= oggparms.nominalBitr % 8;
     879
     880        if (oggparms.nominalBitr < 8 || oggparms.nominalBitr > 160)
     881                throw ToolException("Nominal bitrate out of bounds (-b), must be between 8 and 160.");
     882}
     883
     884void CompressionTool::setOggMaxBitrate(const std::string& arg) {
     885        oggparms.maxBitr = atoi(arg.c_str());
     886
     887        if (oggparms.maxBitr == 0 && arg != "0")
     888                throw ToolException("Maximum bitrate (-M) must be a number.");
     889
     890        if ((oggparms.maxBitr % 8) != 0)
     891                oggparms.maxBitr -= oggparms.maxBitr % 8;
     892
     893        if (oggparms.maxBitr < 8 || oggparms.maxBitr > 160)
     894                throw ToolException("Maximum bitrate out of bounds (-M), must be between 8 and 160.");
     895}
     896
    775897bool CompressionTool::processMp3Parms() {
    776898        while (!_arguments.empty()) {
    777899                std::string arg = _arguments.front();
     
    781903                        encparms.abr = 0;
    782904                } else if (arg == "--abr") {
    783905                        encparms.abr = 1;
     906                } else if (arg == "-lame-path") {
     907                        if (_arguments.empty())
     908                                throw ToolException("Could not parse command line options, expected value after -lame-path");
     909                        setMp3LamePath(_arguments.front());
     910                        _arguments.pop_front();
     911
    784912                } else if (arg == "-b") {
    785913                        if (_arguments.empty())
    786914                                throw ToolException("Could not parse command line options, expected value after -b");
    787                         encparms.minBitr = atoi(_arguments.front().c_str());
    788 
    789                         if (encparms.minBitr > 160)
    790                                 throw ToolException("Minimum bitrate out of bounds (-b), must be between 8 and 160.");
    791 
    792                         if (encparms.minBitr == 0 && _arguments.front() != "0")
    793                                 throw ToolException("Minimum bitrate (-b) must be a number.");
    794 
    795                         if (encparms.minBitr < 8)
    796                                 throw ToolException("Minimum bitrate out of bounds (-b), must be between 8 and 160.");
    797 
     915                        setMp3VBRMinBitrate(_arguments.front());
    798916                        _arguments.pop_front();
    799917
    800918                } else if (arg == "-B") {
    801919                        if (_arguments.empty())
    802920                                throw ToolException("Could not parse command line options, expected value after -B");
    803                         encparms.maxBitr = atoi(_arguments.front().c_str());
    804 
    805                         if ((encparms.maxBitr % 8) != 0) {
    806                                 encparms.maxBitr -= encparms.maxBitr % 8;
    807                         }
    808 
    809                         if (encparms.maxBitr > 160)
    810                                 throw ToolException("Maximum bitrate out of bounds (-B), must be between 8 and 160.");
    811 
    812                         if (encparms.maxBitr == 0 && _arguments.front() != "0")
    813                                 throw ToolException("Maximum bitrate (-B) must be a number.");
    814 
    815                         if (encparms.maxBitr < 8)
    816                                 throw ToolException("Maximum bitrate out of bounds (-B), must be between 8 and 160.");
    817 
     921                        setMp3VBRMaxBitrate(_arguments.front());
    818922                        _arguments.pop_front();
    819923
    820924                } else if (arg == "-V") {
    821925                        if (_arguments.empty())
    822926                                throw ToolException("Could not parse command line options, expected value after -V");
    823                         encparms.vbrqual = atoi(_arguments.front().c_str());
    824 
    825                         if (encparms.vbrqual > 9)
    826                                 throw ToolException("Quality (-q) out of bounds, must be between 0 and 9.");
    827 
     927                        setMp3VBRQuality(_arguments.front());
    828928                        _arguments.pop_front();
    829929
    830930                } else if (arg == "-q") {
    831931                        if (_arguments.empty())
    832932                                throw ToolException("Could not parse command line options, expected value after -q");
    833                         encparms.algqual = atoi(_arguments.front().c_str());
    834 
    835                         if (encparms.algqual > 9)
    836                                 throw ToolException("Quality (-q) out of bounds, must be between 0 and 9.");
    837 
     933                        setMp3MpegQuality(_arguments.front());
    838934                        _arguments.pop_front();
    839935
    840936                } else if (arg == "--silent") {
     
    856952                if (arg == "-b") {
    857953                        if (_arguments.empty())
    858954                                throw ToolException("Could not parse command line options, expected value after -b");
    859                         oggparms.nominalBitr = atoi(_arguments.front().c_str());
    860 
    861                         if ((oggparms.nominalBitr % 8) != 0)
    862                                 oggparms.nominalBitr -= oggparms.nominalBitr % 8;
    863 
    864                         if (oggparms.nominalBitr > 160)
    865                                 throw ToolException("Nominal bitrate out of bounds (-b), must be between 8 and 160.");
    866 
    867                         if (oggparms.nominalBitr == 0 && _arguments.front() != "0")
    868                                 throw ToolException("Nominal bitrate (-b) must be a number.");
    869 
    870                         if (oggparms.nominalBitr < 8)
    871                                 throw ToolException("Nominal bitrate out of bounds (-b), must be between 8 and 160.");
    872 
     955                        setOggAvgBitrate(_arguments.front());
    873956                        _arguments.pop_front();
    874957
    875958                } else if (arg == "-m") {
    876959                        if (_arguments.empty())
    877960                                throw ToolException("Could not parse command line options, expected value after -m");
    878                         oggparms.minBitr = atoi(_arguments.front().c_str());
    879 
    880                         if ((oggparms.minBitr % 8) != 0)
    881                                 oggparms.minBitr -= oggparms.minBitr % 8;
    882 
    883                         if (oggparms.minBitr > 160)
    884                                 throw ToolException("Minimal bitrate out of bounds (-m), must be between 8 and 160.");
    885 
    886                         if (oggparms.minBitr == 0 && _arguments.front() != "0")
    887                                 throw ToolException("Minimal bitrate (-m) must be a number.");
    888 
    889                         if (oggparms.minBitr < 8)
    890                                 throw ToolException("Minimal bitrate out of bounds (-m), must be between 8 and 160.");
    891 
     961                        setOggMinBitrate(_arguments.front());
    892962                        _arguments.pop_front();
    893963
    894964                } else if (arg == "-M") {
    895965                        if (_arguments.empty())
    896966                                throw ToolException("Could not parse command line options, expected value after -M");
    897                         oggparms.maxBitr = atoi(_arguments.front().c_str());
    898 
    899                         if ((oggparms.maxBitr % 8) != 0)
    900                                 oggparms.maxBitr -= oggparms.maxBitr % 8;
    901 
    902                         if (oggparms.maxBitr > 160)
    903                                 throw ToolException("Minimal bitrate out of bounds (-M), must be between 8 and 160.");
    904 
    905                         if (oggparms.maxBitr == 0 && _arguments.front() != "0")
    906                                 throw ToolException("Minimal bitrate (-M) must be a number.");
    907 
    908                         if (oggparms.maxBitr < 8)
    909                                 throw ToolException("Minimal bitrate out of bounds (-M), must be between 8 and 160.");
    910 
     967                        setOggMaxBitrate(_arguments.front());
    911968                        _arguments.pop_front();
    912969
    913970                } else if (arg == "-q") {
    914                         oggparms.quality = (float)atoi(_arguments.front().c_str());
    915 
    916                         if (oggparms.quality == 0 && _arguments.front() != "0")
    917                                 throw ToolException("Quality (-q) must be a number.");
    918 
     971                        if (_arguments.empty())
     972                                throw ToolException("Could not parse command line options, expected value after -q");
     973                        setOggQuality(_arguments.front());
    919974                        _arguments.pop_front();
    920975
    921976                } else if (arg == "--silent") {
     
    937992                if (arg == "-b") {
    938993                        if (_arguments.empty())
    939994                                throw ToolException("Could not parse command line options, expected value after -b");
    940                         flacparms.blocksize = atoi(_arguments.front().c_str());
     995                        setFlacBlockSize(_arguments.front());
    941996                        _arguments.pop_front();
    942997                } else if (arg == "--fast") {
    943998                        flacparms.compressionLevel = 0;
     
    10571112
    10581113        if (_supportedFormats & AUDIO_MP3) {
    10591114                os << "\nMP3 mode params:\n";
     1115                os << " -lame-path <path> Path to the lame excutable to use (default: lame)\n";
    10601116                os << " -b <rate>    <rate> is the target bitrate(ABR)/minimal bitrate(VBR) (default:" << minBitrDef << "%d)\n";
    10611117                os << " -B <rate>    <rate> is the maximum VBR/ABR bitrate (default:%" << maxBitrDef << ")\n";
    10621118                os << " --vbr        LAME uses the VBR mode (default)\n";