From f7b08934580ddc2716fbf4ac3ecd9684158d3cf7 Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Thu, 30 Jul 2009 16:03:36 +1000 Subject: Video size and aspect ratio. --- tools/qmlviewer/qmlviewer.cpp | 36 +++- tools/qmlviewer/qmlviewer.h | 1 + tools/qmlviewer/recopts.ui | 407 ++++++++++++++++++++++++++++++------------ 3 files changed, 326 insertions(+), 118 deletions(-) diff --git a/tools/qmlviewer/qmlviewer.cpp b/tools/qmlviewer/qmlviewer.cpp index d7d8b82..098f749 100644 --- a/tools/qmlviewer/qmlviewer.cpp +++ b/tools/qmlviewer/qmlviewer.cpp @@ -298,7 +298,7 @@ void QmlViewer::createMenu(QMenuBar *menu, QMenu *flatmenu) connect(recordAction, SIGNAL(triggered()), this, SLOT(toggleRecordingWithSelection())); recordMenu->addAction(recordAction); - QAction *recordOptions = new QAction(tr("Recording &Options..."), parent); + QAction *recordOptions = new QAction(tr("Video &Options..."), parent); connect(recordOptions, SIGNAL(triggered()), this, SLOT(chooseRecordingOptions())); recordMenu->addAction(recordOptions); @@ -416,7 +416,17 @@ void QmlViewer::pickRecordingFile() void QmlViewer::chooseRecordingOptions() { + // File recdlg->file->setText(record_file); + + // Size + recdlg->sizeOriginal->setText(tr("Original (%1x%2)").arg(canvas->width()).arg(canvas->height())); + if (recdlg->sizeWidth->value()<=1) { + recdlg->sizeWidth->setValue(canvas->width()); + recdlg->sizeHeight->setValue(canvas->height()); + } + + // Rate if (record_rate == 24) recdlg->hz24->setChecked(true); else if (record_rate == 25) @@ -429,9 +439,24 @@ void QmlViewer::chooseRecordingOptions() recdlg->hzCustom->setChecked(true); recdlg->hz->setText(QString::number(record_rate)); } + + // Profile recdlg->setArguments(record_args.join(" ")); if (recdlg->exec()) { + // File record_file = recdlg->file->text(); + // Size + if (recdlg->sizeOriginal->isChecked()) + record_outsize = QSize(); + else if (recdlg->size720p->isChecked()) + record_outsize = QSize(1280,720); + else if (recdlg->sizeVGA->isChecked()) + record_outsize = QSize(640,480); + else if (recdlg->sizeQVGA->isChecked()) + record_outsize = QSize(320,240); + else + record_outsize = QSize(recdlg->sizeWidth->value(),recdlg->sizeHeight->value()); + // Rate if (recdlg->hz24->isChecked()) record_rate = 24; else if (recdlg->hz25->isChecked()) @@ -443,6 +468,7 @@ void QmlViewer::chooseRecordingOptions() else { record_rate = recdlg->hz->text().toDouble(); } + // Profile record_args = recdlg->arguments().split(" ",QString::SkipEmptyParts); } } @@ -686,7 +712,7 @@ void QmlViewer::senseFfmpeg() proc.waitForFinished(2000); QString ffmpegHelp = proc.readAllStandardOutput(); ffmpegAvailable = ffmpegHelp.contains("-s "); - ffmpegHelp = tr("Video recording use ffmpeg:")+"\n\n"+ffmpegHelp; + ffmpegHelp = tr("Video recording uses ffmpeg:")+"\n\n"+ffmpegHelp; QDialog *d = new QDialog(recdlg); QVBoxLayout *l = new QVBoxLayout(d); @@ -729,6 +755,10 @@ void QmlViewer::setRecording(bool on) args << "-pix_fmt" << (frame_fmt == ".gif" ? "rgb24" : "rgb32"); args << "-s" << QString("%1x%2").arg(canvas->width()).arg(canvas->height()); args << "-i" << "-"; + if (record_outsize.isValid()) { + args << "-s" << QString("%1x%2").arg(record_outsize.width()).arg(record_outsize.height()); + args << "-aspect" << QString::number(double(canvas->width())/canvas->height()); + } args += record_args; args << record_file; proc->start("ffmpeg",args); @@ -770,6 +800,8 @@ void QmlViewer::setRecording(bool on) break; QString name; name.sprintf(framename.toLocal8Bit(),frame++); + if (record_outsize.isValid()) + *img = img->scaled(record_outsize,Qt::IgnoreAspectRatio,Qt::SmoothTransformation); if (record_dither=="ordered") img->convertToFormat(QImage::Format_Indexed8,Qt::PreferDither|Qt::OrderedDither).save(name); else if (record_dither=="threshold") diff --git a/tools/qmlviewer/qmlviewer.h b/tools/qmlviewer/qmlviewer.h index e3864eb..914f77d 100644 --- a/tools/qmlviewer/qmlviewer.h +++ b/tools/qmlviewer/qmlviewer.h @@ -88,6 +88,7 @@ private: QmlTimer autoStopTimer; QString record_dither; QString record_file; + QSize record_outsize; QStringList record_args; int record_rate; int record_autotime; diff --git a/tools/qmlviewer/recopts.ui b/tools/qmlviewer/recopts.ui index 041a4c4..ce2da30 100644 --- a/tools/qmlviewer/recopts.ui +++ b/tools/qmlviewer/recopts.ui @@ -6,133 +6,194 @@ 0 0 - 290 - 297 + 316 + 436 - Recording options + Video options - - - - - - 0 - 0 - - - - File: - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - + + + + + + + + 0 + 0 + + + + File: + + + + + + + + + + ... + + + + - - - - ... + + + + Size - - - - - - 0 - - - + + - Profile: + + + + true - - + + + + VGA + + - - + + + + 720p + + - - + + - Help + QVGA + + + + + + Width: + + + + + + + 1 + + + 9999 + + + + + + + + 0 + 0 + + + + Height: + + + + + + + 1 + + + 9999 + + + + + + + Qt::Horizontal + + + QSizePolicy::MinimumExpanding + + + + 40 + 20 + + + + + + + + + + Qt::Horizontal + + + QSizePolicy::MinimumExpanding + + + + 40 + 20 + + + + - - - - - 0 - + + + + Rate + + - + - + 0 0 - Rate: + 60Hz - - - - - - 24Hz + + true - + 50Hz - + 25Hz - - - - - 0 - 0 - - - - 60Hz - - - true - - - - + 0 @@ -178,6 +239,9 @@ Qt::Horizontal + + QSizePolicy::MinimumExpanding + 40 @@ -188,31 +252,110 @@ + + + + 24Hz + + + + + + + Qt::Horizontal + + + QSizePolicy::MinimumExpanding + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + - - - - Qt::Vertical - - - - 20 - 40 - + + + + Profile - + + + + + + + + + + + Help + + + + + - + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + file + pickfile + sizeOriginal + sizeVGA + size720p + sizeQVGA + sizeCustom + sizeWidth + sizeHeight + hz60 + hz25 + hz50 + hz24 + hzCustom + hz + profile + args + ffmpegHelp + buttonBox + @@ -222,12 +365,12 @@ setFocus() - 54 - 104 + 43 + 257 - 85 - 107 + 129 + 262 @@ -238,12 +381,12 @@ toggle() - 138 - 102 + 143 + 262 - 49 - 104 + 43 + 257 @@ -254,12 +397,12 @@ toggle() - 110 - 105 + 143 + 262 - 51 - 103 + 43 + 257 @@ -270,8 +413,8 @@ accept() - 280 - 287 + 258 + 424 60 @@ -286,8 +429,8 @@ reject() - 280 - 287 + 258 + 424 92 @@ -302,8 +445,8 @@ pickProfile(int) - 72 - 132 + 92 + 329 48 @@ -318,8 +461,8 @@ storeCustomArgs(QString) - 108 - 161 + 128 + 357 102 @@ -327,6 +470,38 @@ + + sizeWidth + valueChanged(int) + sizeCustom + toggle() + + + 108 + 133 + + + 48 + 133 + + + + + sizeHeight + valueChanged(int) + sizeCustom + toggle() + + + 212 + 133 + + + 64 + 129 + + + filePicked(QString) -- cgit v0.12