ExportVideoMenu.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #include "ExportVideoMenu.h"
  2. #include "ui_ExportVideoMenu.h"
  3. #include <QIntValidator>
  4. #include <QDoubleValidator>
  5. #include <QFileDialog>
  6. ExportVideoMenu::ExportVideoMenu(QWidget *parent) :
  7. QWidget{ parent },
  8. ui{ new Ui::ExportVideoMenu }
  9. {
  10. ui->setupUi(this);
  11. this->adjustSize();
  12. ui->maxIterTxt->setValidator(new QIntValidator(1, 1000000000, this));
  13. ui->widthTxt->setValidator(new QIntValidator(1, 10000000, this));
  14. ui->heightTxt->setValidator(new QIntValidator(1, 10000000, this));
  15. ui->bitrate->setValidator(new QIntValidator(1, 10000000, this));
  16. ui->fps->setValidator(new QIntValidator(1, 8000, this));
  17. ui->zoomSpeed->setValidator(new QDoubleValidator(0.0, 100.0, -1, this));
  18. const auto presets = {
  19. "ultrafast",
  20. "superfast",
  21. "veryfast",
  22. "faster",
  23. "fast",
  24. "medium",
  25. "slow",
  26. "slower",
  27. "veryslow",
  28. };
  29. for (auto& preset : presets) {
  30. ui->encodingPresetBox->addItem(preset);
  31. }
  32. ui->encodingPresetBox->setCurrentText("medium");
  33. setStartViewport(mnd::MandelViewport::standardView());
  34. }
  35. ExportVideoMenu::~ExportVideoMenu()
  36. {
  37. delete ui;
  38. }
  39. ExportVideoInfo ExportVideoMenu::getInfo(void) const
  40. {
  41. ExportVideoInfo evi;
  42. evi.path = ui->pathTxt->text().toStdString();
  43. evi.mi.bWidth = ui->widthTxt->text().toInt();
  44. evi.mi.bHeight = ui->heightTxt->text().toInt();
  45. evi.mi.maxIter = ui->maxIterTxt->text().toInt();
  46. evi.bitrate = ui->bitrate->text().toInt();
  47. evi.preset = ui->encodingPresetBox->currentText().toStdString();
  48. evi.fps = ui->fps->text().toInt();
  49. evi.zoomSpeed = QLocale::system().toDouble(ui->zoomSpeed->text());
  50. evi.start = mnd::MandelViewport {
  51. mnd::Real(ui->startX->text().toStdString().c_str()),
  52. mnd::Real(ui->startY->text().toStdString().c_str()),
  53. mnd::Real(ui->startW->text().toStdString().c_str()),
  54. mnd::Real(ui->startH->text().toStdString().c_str())
  55. };
  56. evi.end = mnd::MandelViewport {
  57. mnd::Real(ui->endX->text().toStdString().c_str()),
  58. mnd::Real(ui->endY->text().toStdString().c_str()),
  59. mnd::Real(ui->endW->text().toStdString().c_str()),
  60. mnd::Real(ui->endH->text().toStdString().c_str())
  61. };
  62. evi.start.adjustAspectRatio(evi.mi.bWidth, evi.mi.bHeight);
  63. evi.end.adjustAspectRatio(evi.mi.bWidth, evi.mi.bHeight);
  64. return evi;
  65. }
  66. void ExportVideoMenu::setStartViewport(const mnd::MandelViewport& mv)
  67. {
  68. ui->startX->setText(QString::fromStdString(mnd::toString(mv.x)));
  69. ui->startY->setText(QString::fromStdString(mnd::toString(mv.y)));
  70. ui->startW->setText(QString::fromStdString(mnd::toString(mv.width)));
  71. ui->startH->setText(QString::fromStdString(mnd::toString(mv.height)));
  72. }
  73. void ExportVideoMenu::setEndViewport(const mnd::MandelViewport& mv)
  74. {
  75. ui->endX->setText(QString::fromStdString(mnd::toString(mv.x)));
  76. ui->endY->setText(QString::fromStdString(mnd::toString(mv.y)));
  77. ui->endW->setText(QString::fromStdString(mnd::toString(mv.width)));
  78. ui->endH->setText(QString::fromStdString(mnd::toString(mv.height)));
  79. }
  80. void ExportVideoMenu::on_pathBtn_clicked()
  81. {
  82. QString saveAs = QFileDialog::getSaveFileName(this,
  83. tr("Save exported video"), "",
  84. tr("AVI video (*.avi);;MP4 video (*.mp4);;All Files (*)"));
  85. ui->pathTxt->setText(saveAs);
  86. }