# HG changeset patch # User Mitchell Kember # Date 1354507656 18000 # Node ID 647c5d352bceee55862da9f2b13a03632a39c041 # Parent 90f524718f3df23ae66aa0bb7b7a57ab822e4ebf# Parent 37d47f09f98120072dae60bb5e442571741f04a6 Merged changes from upstream. diff -r 37d47f09f981 -r 647c5d352bce QTfrontend/CMakeLists.txt --- a/QTfrontend/CMakeLists.txt Mon Dec 03 01:45:59 2012 +0100 +++ b/QTfrontend/CMakeLists.txt Sun Dec 02 23:07:36 2012 -0500 @@ -20,6 +20,9 @@ find_package(SDL_net REQUIRED) #network frontlib if(NOT NOVIDEOREC) find_package(FFMPEG) + if(${FFMPEG_FOUND}) + add_definitions(-DVIDEOREC -D__STDC_CONSTANT_MACROS) + endif() endif() include_directories(.) @@ -66,10 +69,6 @@ file(GLOB_RECURSE UIcpp ui/*.cpp) file(GLOB UtilCpp util/*.cpp) -if(${FFMPEG_FOUND}) - add_definitions(-DVIDEOREC -D__STDC_CONSTANT_MACROS) -endif() - set(hwfr_src ${ModelCpp} ${NetCpp} diff -r 37d47f09f981 -r 647c5d352bce QTfrontend/gameuiconfig.cpp --- a/QTfrontend/gameuiconfig.cpp Mon Dec 03 01:45:59 2012 +0100 +++ b/QTfrontend/gameuiconfig.cpp Sun Dec 02 23:07:36 2012 -0500 @@ -142,33 +142,33 @@ void GameUIConfig::reloadVideosValues(void) { // one pass with default values - Form->ui.pageVideos->setDefaultOptions(); + Form->ui.pageOptions->setDefaultOptions(); // then load user configuration - Form->ui.pageVideos->framerateBox->setCurrentIndex( - Form->ui.pageVideos->framerateBox->findData( + Form->ui.pageOptions->framerateBox->setCurrentIndex( + Form->ui.pageOptions->framerateBox->findData( value("videorec/framerate", rec_Framerate()).toString() + " fps", Qt::MatchExactly) ); - Form->ui.pageVideos->bitrateBox->setValue(value("videorec/bitrate", rec_Bitrate()).toUInt()); - bool useGameRes = value("videorec/usegameres",Form->ui.pageVideos->checkUseGameRes->isChecked()).toBool(); + Form->ui.pageOptions->bitrateBox->setValue(value("videorec/bitrate", rec_Bitrate()).toUInt()); + bool useGameRes = value("videorec/usegameres",Form->ui.pageOptions->checkUseGameRes->isChecked()).toBool(); if (useGameRes) { QRect res = vid_Resolution(); - Form->ui.pageVideos->widthEdit->setText(QString::number(res.width())); - Form->ui.pageVideos->heightEdit->setText(QString::number(res.height())); + Form->ui.pageOptions->widthEdit->setText(QString::number(res.width())); + Form->ui.pageOptions->heightEdit->setText(QString::number(res.height())); } else { - Form->ui.pageVideos->widthEdit->setText(value("videorec/width","800").toString()); - Form->ui.pageVideos->heightEdit->setText(value("videorec/height","600").toString()); + Form->ui.pageOptions->widthEdit->setText(value("videorec/width","800").toString()); + Form->ui.pageOptions->heightEdit->setText(value("videorec/height","600").toString()); } - Form->ui.pageVideos->checkUseGameRes->setChecked(useGameRes); - Form->ui.pageVideos->checkRecordAudio->setChecked( - value("videorec/audio",Form->ui.pageVideos->checkRecordAudio->isChecked()).toBool() ); - if (!Form->ui.pageVideos->tryCodecs(value("videorec/format","no").toString(), + Form->ui.pageOptions->checkUseGameRes->setChecked(useGameRes); + Form->ui.pageOptions->checkRecordAudio->setChecked( + value("videorec/audio",Form->ui.pageOptions->checkRecordAudio->isChecked()).toBool() ); + if (!Form->ui.pageOptions->tryCodecs(value("videorec/format","no").toString(), value("videorec/videocodec","no").toString(), value("videorec/audiocodec","no").toString())) - Form->ui.pageVideos->setDefaultCodecs(); + Form->ui.pageOptions->setDefaultCodecs(); } QStringList GameUIConfig::GetTeamsList() @@ -302,7 +302,7 @@ setValue("videorec/bitrate", rec_Bitrate()); setValue("videorec/width", res.width()); setValue("videorec/height", res.height()); - setValue("videorec/usegameres", Form->ui.pageVideos->checkUseGameRes->isChecked()); + setValue("videorec/usegameres", Form->ui.pageOptions->checkUseGameRes->isChecked()); setValue("videorec/audio", recordAudio()); sync(); @@ -512,43 +512,43 @@ QString GameUIConfig::AVFormat() { - return Form->ui.pageVideos->format(); + return Form->ui.pageOptions->format(); } QString GameUIConfig::videoCodec() { - return Form->ui.pageVideos->videoCodec(); + return Form->ui.pageOptions->videoCodec(); } QString GameUIConfig::audioCodec() { - return Form->ui.pageVideos->audioCodec(); + return Form->ui.pageOptions->audioCodec(); } QRect GameUIConfig::rec_Resolution() { - if (Form->ui.pageVideos->checkUseGameRes->isChecked()) + if (Form->ui.pageOptions->checkUseGameRes->isChecked()) return vid_Resolution(); QRect res(0,0,0,0); - res.setWidth(Form->ui.pageVideos->widthEdit->text().toUInt()); - res.setHeight(Form->ui.pageVideos->heightEdit->text().toUInt()); + res.setWidth(Form->ui.pageOptions->widthEdit->text().toUInt()); + res.setHeight(Form->ui.pageOptions->heightEdit->text().toUInt()); return res; } int GameUIConfig::rec_Framerate() { // remove the "fps" label - QString fpsText = Form->ui.pageVideos->framerateBox->currentText(); + QString fpsText = Form->ui.pageOptions->framerateBox->currentText(); QStringList fpsList = fpsText.split(" "); return fpsList.first().toInt(); } int GameUIConfig::rec_Bitrate() { - return Form->ui.pageVideos->bitrateBox->value(); + return Form->ui.pageOptions->bitrateBox->value(); } bool GameUIConfig::recordAudio() { - return Form->ui.pageVideos->checkRecordAudio->isChecked(); + return Form->ui.pageOptions->checkRecordAudio->isChecked(); } diff -r 37d47f09f981 -r 647c5d352bce QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Mon Dec 03 01:45:59 2012 +0100 +++ b/QTfrontend/hwform.cpp Sun Dec 02 23:07:36 2012 -0500 @@ -141,7 +141,10 @@ ui.pageRoomsList->setSettings(config); ui.pageNetGame->chatWidget->setSettings(config); ui.pageRoomsList->chatWidget->setSettings(config); +#ifdef VIDEOREC ui.pageVideos->init(config); + ui.pageOptions->setConfig(config); +#endif #ifdef __APPLE__ panel = new M3Panel; diff -r 37d47f09f981 -r 647c5d352bce QTfrontend/ui/page/pageoptions.cpp --- a/QTfrontend/ui/page/pageoptions.cpp Mon Dec 03 01:45:59 2012 +0100 +++ b/QTfrontend/ui/page/pageoptions.cpp Sun Dec 02 23:07:36 2012 -0500 @@ -33,10 +33,12 @@ #include #include "pageoptions.h" +#include "gameuiconfig.h" #include "hwconsts.h" #include "fpsedit.h" #include "igbox.h" #include "DataManager.h" +#include "LibavInteraction.h" // TODO cleanup QLayout * PageOptions::bodyLayoutDefinition() @@ -50,6 +52,11 @@ tabs->addTab(page1, tr("General")); tabs->addTab(page2, tr("Advanced")); +#ifdef VIDEOREC + QWidget * page3 = new QWidget(this); + tabs->addTab(page3, tr("Video Recording")); +#endif + { // page 1 QGridLayout * page1Layout = new QGridLayout(page1); //gbTBLayout->setMargin(0); @@ -477,6 +484,121 @@ page2Layout->addWidget(new QWidget(this), 2, 0); } +#ifdef VIDEOREC + { // page 3 + QGridLayout * page3Layout = new QGridLayout(page3); + + IconedGroupBox* pOptionsGroup = new IconedGroupBox(this); + pOptionsGroup->setIcon(QIcon(":/res/Settings.png")); // FIXME + pOptionsGroup->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); + pOptionsGroup->setTitle(QGroupBox::tr("Video recording options")); + QGridLayout * pOptLayout = new QGridLayout(pOptionsGroup); + + // label for format + QLabel *labelFormat = new QLabel(pOptionsGroup); + labelFormat->setText(QLabel::tr("Format")); + pOptLayout->addWidget(labelFormat, 0, 0); + + // list of supported formats + comboAVFormats = new QComboBox(pOptionsGroup); + pOptLayout->addWidget(comboAVFormats, 0, 1, 1, 4); + LibavInteraction::instance().fillFormats(comboAVFormats); + + // separator + QFrame * hr = new QFrame(pOptionsGroup); + hr->setFrameStyle(QFrame::HLine); + hr->setLineWidth(3); + hr->setFixedHeight(10); + pOptLayout->addWidget(hr, 1, 0, 1, 5); + + // label for audio codec + QLabel *labelACodec = new QLabel(pOptionsGroup); + labelACodec->setText(QLabel::tr("Audio codec")); + pOptLayout->addWidget(labelACodec, 2, 0); + + // list of supported audio codecs + comboAudioCodecs = new QComboBox(pOptionsGroup); + pOptLayout->addWidget(comboAudioCodecs, 2, 1, 1, 3); + + // checkbox 'record audio' + checkRecordAudio = new QCheckBox(pOptionsGroup); + checkRecordAudio->setText(QCheckBox::tr("Record audio")); + pOptLayout->addWidget(checkRecordAudio, 2, 4); + + // separator + hr = new QFrame(pOptionsGroup); + hr->setFrameStyle(QFrame::HLine); + hr->setLineWidth(3); + hr->setFixedHeight(10); + pOptLayout->addWidget(hr, 3, 0, 1, 5); + + // label for video codec + QLabel *labelVCodec = new QLabel(pOptionsGroup); + labelVCodec->setText(QLabel::tr("Video codec")); + pOptLayout->addWidget(labelVCodec, 4, 0); + + // list of supported video codecs + comboVideoCodecs = new QComboBox(pOptionsGroup); + pOptLayout->addWidget(comboVideoCodecs, 4, 1, 1, 4); + + // label for resolution + QLabel *labelRes = new QLabel(pOptionsGroup); + labelRes->setText(QLabel::tr("Resolution")); + pOptLayout->addWidget(labelRes, 5, 0); + + // width + widthEdit = new QLineEdit(pOptionsGroup); + widthEdit->setValidator(new QIntValidator(this)); + pOptLayout->addWidget(widthEdit, 5, 1); + + // x + QLabel *labelX = new QLabel(pOptionsGroup); + labelX->setText("X"); + pOptLayout->addWidget(labelX, 5, 2); + + // height + heightEdit = new QLineEdit(pOptionsGroup); + heightEdit->setValidator(new QIntValidator(pOptionsGroup)); + pOptLayout->addWidget(heightEdit, 5, 3); + + // checkbox 'use game resolution' + checkUseGameRes = new QCheckBox(pOptionsGroup); + checkUseGameRes->setText(QCheckBox::tr("Use game resolution")); + pOptLayout->addWidget(checkUseGameRes, 5, 4); + + // label for framerate + QLabel *labelFramerate = new QLabel(pOptionsGroup); + labelFramerate->setText(QLabel::tr("Framerate")); + pOptLayout->addWidget(labelFramerate, 6, 0); + + framerateBox = new QComboBox(pOptionsGroup); + framerateBox->addItem("24 fps", 24); + framerateBox->addItem("25 fps", 25); + framerateBox->addItem("30 fps", 30); + framerateBox->addItem("50 fps", 50); + framerateBox->addItem("60 fps", 60); + pOptLayout->addWidget(framerateBox, 6, 1); + + // label for Bitrate + QLabel *labelBitrate = new QLabel(pOptionsGroup); + labelBitrate->setText(QLabel::tr("Bitrate (Kbps)")); + pOptLayout->addWidget(labelBitrate, 6, 2); + + // bitrate + bitrateBox = new QSpinBox(pOptionsGroup); + bitrateBox->setRange(100, 5000); + bitrateBox->setSingleStep(100); + pOptLayout->addWidget(bitrateBox, 6, 3); + + // button 'set default options' + btnDefaults = new QPushButton(pOptionsGroup); + btnDefaults->setText(QPushButton::tr("Set default options")); + btnDefaults->setWhatsThis(QPushButton::tr("Restore default coding parameters")); + pOptLayout->addWidget(btnDefaults, 7, 0, 1, 5); + + page3Layout->addWidget(pOptionsGroup, 1, 0); + } +#endif previousQuality = this->SLQuality->value(); previousResolutionIndex = this->CBResolution->currentIndex(); @@ -492,6 +614,13 @@ void PageOptions::connectSignals() { +#ifdef VIDEOREC + connect(checkUseGameRes, SIGNAL(stateChanged(int)), this, SLOT(changeUseGameRes(int))); + connect(checkRecordAudio, SIGNAL(stateChanged(int)), this, SLOT(changeRecordAudio(int))); + connect(comboAVFormats, SIGNAL(currentIndexChanged(int)), this, SLOT(changeAVFormat(int))); + connect(btnDefaults, SIGNAL(clicked()), this, SLOT(setDefaultOptions())); +#endif + connect(SLQuality, SIGNAL(valueChanged(int)), this, SLOT(setQuality(int))); connect(CBResolution, SIGNAL(currentIndexChanged(int)), this, SLOT(setResolution(int))); connect(CBFullscreen, SIGNAL(stateChanged(int)), this, SLOT(setFullscreen(int))); @@ -500,7 +629,7 @@ connect(CBSavePassword, SIGNAL(stateChanged(int)), this, SLOT(savePwdChanged(int))); } -PageOptions::PageOptions(QWidget* parent) : AbstractPage(parent) +PageOptions::PageOptions(QWidget* parent) : AbstractPage(parent), config(0) { initPage(); } @@ -619,3 +748,128 @@ leProxyLogin->setEnabled(b); leProxyPassword->setEnabled(b); } + +// Video Recording + +void PageOptions::setConfig(GameUIConfig * config) +{ + this->config = config; +} + +// user changed file format, we need to update list of codecs +void PageOptions::changeAVFormat(int index) +{ + // remember selected codecs + QString prevVCodec = videoCodec(); + QString prevACodec = audioCodec(); + + // clear lists of codecs + comboVideoCodecs->clear(); + comboAudioCodecs->clear(); + + // get list of codecs for specified format + LibavInteraction::instance().fillCodecs(comboAVFormats->itemData(index).toString(), comboVideoCodecs, comboAudioCodecs); + + // disable audio if there is no audio codec + if (comboAudioCodecs->count() == 0) + { + checkRecordAudio->setChecked(false); + checkRecordAudio->setEnabled(false); + } + else + checkRecordAudio->setEnabled(true); + + // restore selected codecs if possible + int iVCodec = comboVideoCodecs->findData(prevVCodec); + if (iVCodec != -1) + comboVideoCodecs->setCurrentIndex(iVCodec); + int iACodec = comboAudioCodecs->findData(prevACodec); + if (iACodec != -1) + comboAudioCodecs->setCurrentIndex(iACodec); +} + +// user switched checkbox 'use game resolution' +void PageOptions::changeUseGameRes(int state) +{ + if (state && config) + { + // set resolution to game resolution + QRect resolution = config->vid_Resolution(); + widthEdit->setText(QString::number(resolution.width())); + heightEdit->setText(QString::number(resolution.height())); + } + widthEdit->setEnabled(!state); + heightEdit->setEnabled(!state); +} + +// user switched checkbox 'record audio' +void PageOptions::changeRecordAudio(int state) +{ + comboAudioCodecs->setEnabled(!!state); +} + +void PageOptions::setDefaultCodecs() +{ + // VLC should be able to handle any of these configurations + // Quicktime X only opens the first one + // Windows Media Player TODO + if (tryCodecs("mp4", "libx264", "aac")) + return; + if (tryCodecs("mp4", "libx264", "libfaac")) + return; + if (tryCodecs("mp4", "libx264", "libmp3lame")) + return; + if (tryCodecs("mp4", "libx264", "mp2")) + return; + if (tryCodecs("avi", "libxvid", "libmp3lame")) + return; + if (tryCodecs("avi", "libxvid", "ac3_fixed")) + return; + if (tryCodecs("avi", "libxvid", "mp2")) + return; + if (tryCodecs("avi", "mpeg4", "libmp3lame")) + return; + if (tryCodecs("avi", "mpeg4", "ac3_fixed")) + return; + if (tryCodecs("avi", "mpeg4", "mp2")) + return; + + // this shouldn't happen, just in case + if (tryCodecs("ogg", "libtheora", "libvorbis")) + return; + tryCodecs("ogg", "libtheora", "flac"); +} + +void PageOptions::setDefaultOptions() +{ + framerateBox->setCurrentIndex(2); + bitrateBox->setValue(1000); + checkRecordAudio->setChecked(true); + checkUseGameRes->setChecked(true); + setDefaultCodecs(); +} + +bool PageOptions::tryCodecs(const QString & format, const QString & vcodec, const QString & acodec) +{ + // first we should change format + int iFormat = comboAVFormats->findData(format); + if (iFormat == -1) + return false; + comboAVFormats->setCurrentIndex(iFormat); + // format was changed, so lists of codecs were automatically updated to codecs supported by this format + + // try to find video codec + int iVCodec = comboVideoCodecs->findData(vcodec); + if (iVCodec == -1) + return false; + comboVideoCodecs->setCurrentIndex(iVCodec); + + // try to find audio codec + int iACodec = comboAudioCodecs->findData(acodec); + if (iACodec == -1 && checkRecordAudio->isChecked()) + return false; + if (iACodec != -1) + comboAudioCodecs->setCurrentIndex(iACodec); + + return true; +} diff -r 37d47f09f981 -r 647c5d352bce QTfrontend/ui/page/pageoptions.h --- a/QTfrontend/ui/page/pageoptions.h Mon Dec 03 01:45:59 2012 +0100 +++ b/QTfrontend/ui/page/pageoptions.h Sun Dec 02 23:07:36 2012 -0500 @@ -21,6 +21,7 @@ #include "AbstractPage.h" +class GameUIConfig; class FPSEdit; class IconedGroupBox; class QSignalMapper; @@ -84,6 +85,28 @@ QLineEdit * leProxyLogin; QLineEdit * leProxyPassword; +#ifdef VIDEOREC + QComboBox *framerateBox; + QSpinBox *bitrateBox; + QLineEdit *widthEdit; + QLineEdit *heightEdit; + QCheckBox *checkUseGameRes; + QCheckBox *checkRecordAudio; + + QString format() + { return comboAVFormats->itemData(comboAVFormats->currentIndex()).toString(); } + + QString videoCodec() + { return comboVideoCodecs->itemData(comboVideoCodecs->currentIndex()).toString(); } + + QString audioCodec() + { return comboAudioCodecs->itemData(comboAudioCodecs->currentIndex()).toString(); } + + void setDefaultCodecs(); + bool tryCodecs(const QString & format, const QString & vcodec, const QString & acodec); + void setConfig(GameUIConfig * config); +#endif + void setTeamOptionsEnabled(bool enabled); signals: @@ -106,6 +129,14 @@ QPushButton *BtnDeleteTeam; QList m_colorButtons; +#ifdef VIDEOREC + QComboBox *comboAVFormats; + QComboBox *comboVideoCodecs; + QComboBox *comboAudioCodecs; + QPushButton *btnDefaults; + GameUIConfig * config; +#endif + private slots: void forceFullscreen(int index); void setFullscreen(int state); @@ -118,6 +149,14 @@ void colorButtonClicked(int i); void onColorModelDataChanged(const QModelIndex & topLeft, const QModelIndex & bottomRight); void onProxyTypeChanged(); +#ifdef VIDEOREC + void changeAVFormat(int index); + void changeUseGameRes(int state); + void changeRecordAudio(int state); + + public slots: + void setDefaultOptions(); +#endif }; #endif diff -r 37d47f09f981 -r 647c5d352bce QTfrontend/ui/page/pagevideos.cpp --- a/QTfrontend/ui/page/pagevideos.cpp Mon Dec 03 01:45:59 2012 +0100 +++ b/QTfrontend/ui/page/pagevideos.cpp Sun Dec 02 23:07:36 2012 -0500 @@ -109,122 +109,6 @@ QGridLayout * pPageLayout = new QGridLayout(); pPageLayout->setColumnStretch(0, 1); pPageLayout->setColumnStretch(1, 2); - pPageLayout->setRowStretch(0, 1); - pPageLayout->setRowStretch(1, 1); - - // options - { - IconedGroupBox* pOptionsGroup = new IconedGroupBox(this); - pOptionsGroup->setIcon(QIcon(":/res/Settings.png")); // FIXME - pOptionsGroup->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - pOptionsGroup->setTitle(QGroupBox::tr("Video recording options")); - QGridLayout * pOptLayout = new QGridLayout(pOptionsGroup); - - // label for format - QLabel *labelFormat = new QLabel(pOptionsGroup); - labelFormat->setText(QLabel::tr("Format")); - pOptLayout->addWidget(labelFormat, 0, 0); - - // list of supported formats - comboAVFormats = new QComboBox(pOptionsGroup); - pOptLayout->addWidget(comboAVFormats, 0, 1, 1, 4); - LibavInteraction::instance().fillFormats(comboAVFormats); - - // separator - QFrame * hr = new QFrame(pOptionsGroup); - hr->setFrameStyle(QFrame::HLine); - hr->setLineWidth(3); - hr->setFixedHeight(10); - pOptLayout->addWidget(hr, 1, 0, 1, 5); - - // label for audio codec - QLabel *labelACodec = new QLabel(pOptionsGroup); - labelACodec->setText(QLabel::tr("Audio codec")); - pOptLayout->addWidget(labelACodec, 2, 0); - - // list of supported audio codecs - comboAudioCodecs = new QComboBox(pOptionsGroup); - pOptLayout->addWidget(comboAudioCodecs, 2, 1, 1, 3); - - // checkbox 'record audio' - checkRecordAudio = new QCheckBox(pOptionsGroup); - checkRecordAudio->setText(QCheckBox::tr("Record audio")); - pOptLayout->addWidget(checkRecordAudio, 2, 4); - - // separator - hr = new QFrame(pOptionsGroup); - hr->setFrameStyle(QFrame::HLine); - hr->setLineWidth(3); - hr->setFixedHeight(10); - pOptLayout->addWidget(hr, 3, 0, 1, 5); - - // label for video codec - QLabel *labelVCodec = new QLabel(pOptionsGroup); - labelVCodec->setText(QLabel::tr("Video codec")); - pOptLayout->addWidget(labelVCodec, 4, 0); - - // list of supported video codecs - comboVideoCodecs = new QComboBox(pOptionsGroup); - pOptLayout->addWidget(comboVideoCodecs, 4, 1, 1, 4); - - // label for resolution - QLabel *labelRes = new QLabel(pOptionsGroup); - labelRes->setText(QLabel::tr("Resolution")); - pOptLayout->addWidget(labelRes, 5, 0); - - // width - widthEdit = new QLineEdit(pOptionsGroup); - widthEdit->setValidator(new QIntValidator(this)); - pOptLayout->addWidget(widthEdit, 5, 1); - - // x - QLabel *labelX = new QLabel(pOptionsGroup); - labelX->setText("X"); - pOptLayout->addWidget(labelX, 5, 2); - - // height - heightEdit = new QLineEdit(pOptionsGroup); - heightEdit->setValidator(new QIntValidator(pOptionsGroup)); - pOptLayout->addWidget(heightEdit, 5, 3); - - // checkbox 'use game resolution' - checkUseGameRes = new QCheckBox(pOptionsGroup); - checkUseGameRes->setText(QCheckBox::tr("Use game resolution")); - pOptLayout->addWidget(checkUseGameRes, 5, 4); - - // label for framerate - QLabel *labelFramerate = new QLabel(pOptionsGroup); - labelFramerate->setText(QLabel::tr("Framerate")); - pOptLayout->addWidget(labelFramerate, 6, 0); - - // framerate - framerateBox = new QComboBox(pOptionsGroup); - framerateBox->addItem("24 fps", 24); - framerateBox->addItem("25 fps", 25); - framerateBox->addItem("30 fps", 30); - framerateBox->addItem("50 fps", 50); - framerateBox->addItem("60 fps", 60); - pOptLayout->addWidget(framerateBox, 6, 1); - - // label for Bitrate - QLabel *labelBitrate = new QLabel(pOptionsGroup); - labelBitrate->setText(QLabel::tr("Bitrate (Kbps)")); - pOptLayout->addWidget(labelBitrate, 6, 2); - - // bitrate - bitrateBox = new QSpinBox(pOptionsGroup); - bitrateBox->setRange(100, 5000); - bitrateBox->setSingleStep(100); - pOptLayout->addWidget(bitrateBox, 6, 3); - - // button 'set default options' - btnDefaults = new QPushButton(pOptionsGroup); - btnDefaults->setText(QPushButton::tr("Set default options")); - btnDefaults->setWhatsThis(QPushButton::tr("Restore default coding parameters")); - pOptLayout->addWidget(btnDefaults, 7, 0, 1, 5); - - pPageLayout->addWidget(pOptionsGroup, 1, 0); - } // list of videos { @@ -260,7 +144,7 @@ box->addWidget(filesTable); box->addWidget(btnOpenDir); - pPageLayout->addWidget(pTableGroup, 0, 1, 2, 1); + pPageLayout->addWidget(pTableGroup, 0, 1); } // description @@ -270,7 +154,6 @@ pDescGroup->setTitle(QGroupBox::tr("Description")); QVBoxLayout* pDescLayout = new QVBoxLayout(pDescGroup); - QHBoxLayout* pTopDescLayout = new QHBoxLayout(0); // picture and text QHBoxLayout* pBottomDescLayout = new QHBoxLayout(0); // buttons // label with thumbnail picture @@ -285,7 +168,6 @@ "border-radius: 4px;" "}" ); clearThumbnail(); - pTopDescLayout->addWidget(labelThumbnail, 2); // label with file description labelDesc = new QLabel(pDescGroup); @@ -296,7 +178,7 @@ Qt::LinksAccessibleByKeyboard); labelDesc->setTextFormat(Qt::RichText); labelDesc->setOpenExternalLinks(true); - pTopDescLayout->addWidget(labelDesc, 1); + //pTopDescLayout->addWidget(labelDesc, 1); // buttons: play and delete btnPlay = new QPushButton(QPushButton::tr("Play"), pDescGroup); @@ -313,7 +195,9 @@ pBottomDescLayout->addWidget(btnToYouTube); pDescLayout->addStretch(1); - pDescLayout->addLayout(pTopDescLayout, 0); + pDescLayout->addWidget(labelThumbnail, 0); + pDescLayout->addStretch(1); + pDescLayout->addWidget(labelDesc, 0); pDescLayout->addStretch(1); pDescLayout->addLayout(pBottomDescLayout, 0); @@ -330,10 +214,6 @@ void PageVideos::connectSignals() { - connect(checkUseGameRes, SIGNAL(stateChanged(int)), this, SLOT(changeUseGameRes(int))); - connect(checkRecordAudio, SIGNAL(stateChanged(int)), this, SLOT(changeRecordAudio(int))); - connect(comboAVFormats, SIGNAL(currentIndexChanged(int)), this, SLOT(changeAVFormat(int))); - connect(btnDefaults, SIGNAL(clicked()), this, SLOT(setDefaultOptions())); connect(filesTable, SIGNAL(cellDoubleClicked(int, int)), this, SLOT(cellDoubleClicked(int, int))); connect(filesTable, SIGNAL(cellChanged(int,int)), this, SLOT(cellChanged(int, int))); connect(filesTable, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(currentCellChanged())); @@ -365,124 +245,6 @@ startEncoding(); // this is for videos recorded from demos which were executed directly (without frontend) } -// user changed file format, we need to update list of codecs -void PageVideos::changeAVFormat(int index) -{ - // remember selected codecs - QString prevVCodec = videoCodec(); - QString prevACodec = audioCodec(); - - // clear lists of codecs - comboVideoCodecs->clear(); - comboAudioCodecs->clear(); - - // get list of codecs for specified format - LibavInteraction::instance().fillCodecs(comboAVFormats->itemData(index).toString(), comboVideoCodecs, comboAudioCodecs); - - // disable audio if there is no audio codec - if (comboAudioCodecs->count() == 0) - { - checkRecordAudio->setChecked(false); - checkRecordAudio->setEnabled(false); - } - else - checkRecordAudio->setEnabled(true); - - // restore selected codecs if possible - int iVCodec = comboVideoCodecs->findData(prevVCodec); - if (iVCodec != -1) - comboVideoCodecs->setCurrentIndex(iVCodec); - int iACodec = comboAudioCodecs->findData(prevACodec); - if (iACodec != -1) - comboAudioCodecs->setCurrentIndex(iACodec); -} - -// user switched checkbox 'use game resolution' -void PageVideos::changeUseGameRes(int state) -{ - if (state && config) - { - // set resolution to game resolution - QRect resolution = config->vid_Resolution(); - widthEdit->setText(QString::number(resolution.width())); - heightEdit->setText(QString::number(resolution.height())); - } - widthEdit->setEnabled(!state); - heightEdit->setEnabled(!state); -} - -// user switched checkbox 'record audio' -void PageVideos::changeRecordAudio(int state) -{ - comboAudioCodecs->setEnabled(!!state); -} - -void PageVideos::setDefaultCodecs() -{ - // VLC should be able to handle any of these configurations - // Quicktime X only opens the first one - // Windows Media Player TODO - if (tryCodecs("mp4", "libx264", "aac")) - return; - if (tryCodecs("mp4", "libx264", "libfaac")) - return; - if (tryCodecs("mp4", "libx264", "libmp3lame")) - return; - if (tryCodecs("mp4", "libx264", "mp2")) - return; - if (tryCodecs("avi", "libxvid", "libmp3lame")) - return; - if (tryCodecs("avi", "libxvid", "ac3_fixed")) - return; - if (tryCodecs("avi", "libxvid", "mp2")) - return; - if (tryCodecs("avi", "mpeg4", "libmp3lame")) - return; - if (tryCodecs("avi", "mpeg4", "ac3_fixed")) - return; - if (tryCodecs("avi", "mpeg4", "mp2")) - return; - - // this shouldn't happen, just in case - if (tryCodecs("ogg", "libtheora", "libvorbis")) - return; - tryCodecs("ogg", "libtheora", "flac"); -} - -void PageVideos::setDefaultOptions() -{ - framerateBox->setCurrentIndex(2); //set to 30fps - bitrateBox->setValue(1000); - checkRecordAudio->setChecked(true); - checkUseGameRes->setChecked(true); - setDefaultCodecs(); -} - -bool PageVideos::tryCodecs(const QString & format, const QString & vcodec, const QString & acodec) -{ - // first we should change format - int iFormat = comboAVFormats->findData(format); - if (iFormat == -1) - return false; - comboAVFormats->setCurrentIndex(iFormat); - // format was changed, so lists of codecs were automatically updated to codecs supported by this format - - // try to find video codec - int iVCodec = comboVideoCodecs->findData(vcodec); - if (iVCodec == -1) - return false; - comboVideoCodecs->setCurrentIndex(iVCodec); - - // try to find audio codec - int iACodec = comboAudioCodecs->findData(acodec); - if (iACodec == -1 && checkRecordAudio->isChecked()) - return false; - if (iACodec != -1) - comboAudioCodecs->setCurrentIndex(iACodec); - - return true; -} - // get file size as string static QString FileSizeStr(const QString & path) { diff -r 37d47f09f981 -r 647c5d352bce QTfrontend/ui/page/pagevideos.h --- a/QTfrontend/ui/page/pagevideos.h Mon Dec 03 01:45:59 2012 +0100 +++ b/QTfrontend/ui/page/pagevideos.h Sun Dec 02 23:07:36 2012 -0500 @@ -36,24 +36,6 @@ public: PageVideos(QWidget* parent = 0); - QComboBox *framerateBox; - QSpinBox *bitrateBox; - QLineEdit *widthEdit; - QLineEdit *heightEdit; - QCheckBox *checkUseGameRes; - QCheckBox *checkRecordAudio; - - QString format() - { return comboAVFormats->itemData(comboAVFormats->currentIndex()).toString(); } - - QString videoCodec() - { return comboVideoCodecs->itemData(comboVideoCodecs->currentIndex()).toString(); } - - QString audioCodec() - { return comboAudioCodecs->itemData(comboAudioCodecs->currentIndex()).toString(); } - - void setDefaultCodecs(); - bool tryCodecs(const QString & format, const QString & vcodec, const QString & acodec); void addRecorder(HWRecorder* pRecorder); bool tryQuit(HWForm *form); QString getVideosInProgress(); // get multi-line string with list of videos in progress @@ -83,12 +65,6 @@ GameUIConfig * config; QNetworkAccessManager* netManager; - // options group - QComboBox *comboAVFormats; - QComboBox *comboVideoCodecs; - QComboBox *comboAudioCodecs; - QPushButton *btnDefaults; - // file list group QTableWidget *filesTable; QPushButton *btnOpenDir; @@ -105,9 +81,6 @@ int numRecorders, numUploads; private slots: - void changeAVFormat(int index); - void changeUseGameRes(int state); - void changeRecordAudio(int state); void encodingFinished(bool success); void updateProgress(float value); void cellDoubleClicked(int row, int column); @@ -120,9 +93,6 @@ void uploadToYouTube(); void uploadProgress(qint64 bytesSent, qint64 bytesTotal); void uploadFinished(); - - public slots: - void setDefaultOptions(); }; #endif // PAGE_VIDEOS_H diff -r 37d47f09f981 -r 647c5d352bce hedgewars/CMakeLists.txt --- a/hedgewars/CMakeLists.txt Mon Dec 03 01:45:59 2012 +0100 +++ b/hedgewars/CMakeLists.txt Sun Dec 02 23:07:36 2012 -0500 @@ -111,7 +111,13 @@ find_package(Freepascal) if (FPC_VERSION VERSION_LESS required_fpc_version) +<<<<<<< local + message(FATAL_ERROR "Necessary FPC version not found (required version = ${required_fpc_version})") +else() + message(STATUS "Found FPC: ${FPC_EXECUTABLE} (version ${FPC_VERSION})") +======= message(FATAL_ERROR "Freepascal is too old, minimum version required is ${required_fpc_version}") +>>>>>>> other endif() @@ -163,7 +169,11 @@ #this command is a workaround to some inlining issues present in older FreePascal versions and fixed in 2.6 +<<<<<<< local +if(FPC_VERSION LESS "020600") +======= if(FPC_VERSION VERSION_LESS "2.6") +>>>>>>> other #under some configurations CMAKE_BUILD_TOOL fails to pass on the jobserver, breaking parallel compilation if(UNIX) set(SAFE_BUILD_TOOL $(MAKE))