VirtualBox

Changeset 46459 in vbox for trunk


Ignore:
Timestamp:
Jun 10, 2013 11:39:21 AM (12 years ago)
Author:
vboxsync
Message:

FE/Qt: Machine settings: Display page: Video Capture tab: Replacing combo-box with slider for bit-rate/quality value management.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsDisplay.cpp

    r46455 r46459  
    389389    setTabOrder(m_pEditorVideoCaptureHeight, m_pSliderVideoCaptureFrameRate);
    390390    setTabOrder(m_pSliderVideoCaptureFrameRate, m_pEditorVideoCaptureFrameRate);
    391     setTabOrder(m_pEditorVideoCaptureFrameRate, m_pComboVideoCaptureBitRate);
    392     setTabOrder(m_pComboVideoCaptureBitRate, m_pEditorVideoCaptureBitRate);
     391    setTabOrder(m_pEditorVideoCaptureFrameRate, m_pSliderVideoCaptureQuality);
     392    setTabOrder(m_pSliderVideoCaptureQuality, m_pEditorVideoCaptureBitRate);
    393393}
    394394
     
    415415    m_pLabelVideoCaptureFrameRateMax->setText(tr("%1 fps").arg(m_pSliderVideoCaptureFrameRate->maximum()));
    416416    m_pLabelVideoCaptureFrameRateUnits->setText(tr("fps"));
    417     m_pComboVideoCaptureBitRate->setItemText(0, tr("User Defined"));
    418     m_pComboVideoCaptureBitRate->setItemText(1, tr("%1 kbps").arg(32));
    419     m_pComboVideoCaptureBitRate->setItemText(2, tr("%1 kbps").arg(64));
    420     m_pComboVideoCaptureBitRate->setItemText(3, tr("%1 kbps").arg(128));
    421     m_pComboVideoCaptureBitRate->setItemText(4, tr("%1 kbps").arg(160));
    422     m_pComboVideoCaptureBitRate->setItemText(5, tr("%1 kbps").arg(256));
    423     m_pComboVideoCaptureBitRate->setItemText(6, tr("%1 kbps").arg(320));
    424     m_pComboVideoCaptureBitRate->setItemText(7, tr("%1 kbps").arg(512));
    425     m_pComboVideoCaptureBitRate->setItemText(8, tr("%1 kbps").arg(1024));
    426     m_pComboVideoCaptureBitRate->setItemText(9, tr("%1 kbps").arg(2048));
     417    m_pLabelVideoCaptureQualityMin->setText(tr("low", "quality"));
     418    m_pLabelVideoCaptureQualityMed->setText(tr("medium", "quality"));
     419    m_pLabelVideoCaptureQualityMax->setText(tr("high", "quality"));
    427420    m_pLabelVideoCaptureBitRateUnits->setText(tr("kbps"));
    428421}
     
    492485}
    493486
    494 void UIMachineSettingsDisplay::sltHandleVideoCaptureBitRateChange(int iCurrentIndex)
    495 {
    496     /* Get the proposed bit-rate: */
    497     int iVideoCaptureBitRate = m_pComboVideoCaptureBitRate->itemData(iCurrentIndex).toInt();
    498 
    499     /* Make sure its valid: */
    500     if (iVideoCaptureBitRate == 0)
    501         return;
    502 
    503     /* Apply proposed bit-rate: */
    504     m_pEditorVideoCaptureBitRate->setValue(iVideoCaptureBitRate);
    505 }
    506 
    507487void UIMachineSettingsDisplay::sltHandleVideoCaptureWidthChange()
    508488{
    509489    /* Look for preset: */
    510490    lookForCorrespondingSizePreset();
     491    /* Update quality and bit-rate: */
     492    sltHandleVideoCaptureQualitySliderChange();
    511493}
    512494
     
    515497    /* Look for preset: */
    516498    lookForCorrespondingSizePreset();
     499    /* Update quality and bit-rate: */
     500    sltHandleVideoCaptureQualitySliderChange();
    517501}
    518502
     
    521505    /* Apply proposed frame-rate: */
    522506    m_pSliderVideoCaptureFrameRate->setValue(m_pEditorVideoCaptureFrameRate->value());
    523 }
    524 
    525 void UIMachineSettingsDisplay::sltHandleVideoCaptureBitRateChange()
    526 {
    527     /* Look for preset: */
    528     lookForCorrespondingBitRatePreset();
     507    /* Update quality and bit-rate: */
     508    sltHandleVideoCaptureQualitySliderChange();
     509}
     510
     511void UIMachineSettingsDisplay::sltHandleVideoCaptureQualitySliderChange()
     512{
     513    /* Calculate/apply proposed bit-rate: */
     514    m_pEditorVideoCaptureBitRate->blockSignals(true);
     515    m_pEditorVideoCaptureBitRate->setValue(calculateBitRate(m_pEditorVideoCaptureWidth->value(),
     516                                                            m_pEditorVideoCaptureHeight->value(),
     517                                                            m_pEditorVideoCaptureFrameRate->value(),
     518                                                            m_pSliderVideoCaptureQuality->value()));
     519    m_pEditorVideoCaptureBitRate->blockSignals(false);
     520}
     521
     522void UIMachineSettingsDisplay::sltHandleVideoCaptureBitRateSpinboxChange()
     523{
     524    /* Calculate/apply proposed quality: */
     525    m_pSliderVideoCaptureQuality->blockSignals(true);
     526    m_pSliderVideoCaptureQuality->setValue(calculateQuality(m_pEditorVideoCaptureWidth->value(),
     527                                                            m_pEditorVideoCaptureHeight->value(),
     528                                                            m_pEditorVideoCaptureFrameRate->value(),
     529                                                            m_pEditorVideoCaptureBitRate->value()));
     530    m_pSliderVideoCaptureQuality->blockSignals(false);
    529531}
    530532
     
    660662    connect(m_pEditorVideoCaptureFrameRate, SIGNAL(valueChanged(int)), this, SLOT(sltHandleVideoCaptureFrameRateChange()));
    661663
    662     /* Prepare bit-rate combo-box: */
    663     m_pComboVideoCaptureBitRate->insertItem(0, QString()); /* User Defined */
    664     m_pComboVideoCaptureBitRate->insertItem(1, QString(), QVariant(32));
    665     m_pComboVideoCaptureBitRate->insertItem(2, QString(), QVariant(64));
    666     m_pComboVideoCaptureBitRate->insertItem(3, QString(), QVariant(128));
    667     m_pComboVideoCaptureBitRate->insertItem(4, QString(), QVariant(160));
    668     m_pComboVideoCaptureBitRate->insertItem(5, QString(), QVariant(256));
    669     m_pComboVideoCaptureBitRate->insertItem(6, QString(), QVariant(320));
    670     m_pComboVideoCaptureBitRate->insertItem(7, QString(), QVariant(512));
    671     m_pComboVideoCaptureBitRate->insertItem(8, QString(), QVariant(1024));
    672     m_pComboVideoCaptureBitRate->insertItem(9, QString(), QVariant(2048));
    673     connect(m_pComboVideoCaptureBitRate, SIGNAL(currentIndexChanged(int)), this, SLOT(sltHandleVideoCaptureBitRateChange(int)));
     664    /* Prepare quality combo-box: */
     665    m_pSliderLayoutVideoCaptureQuality->setColumnStretch(1, 4);
     666    m_pSliderLayoutVideoCaptureQuality->setColumnStretch(3, 5);
     667    m_pSliderVideoCaptureQuality->setMinimum(1);
     668    m_pSliderVideoCaptureQuality->setMaximum(10);
     669    m_pSliderVideoCaptureQuality->setPageStep(1);
     670    m_pSliderVideoCaptureQuality->setSingleStep(1);
     671    m_pSliderVideoCaptureQuality->setTickInterval(1);
     672    m_pSliderVideoCaptureQuality->setSnappingEnabled(true);
     673    m_pSliderVideoCaptureQuality->setOptimalHint(1, 5);
     674    m_pSliderVideoCaptureQuality->setWarningHint(5, 9);
     675    m_pSliderVideoCaptureQuality->setErrorHint(9, 10);
     676    connect(m_pSliderVideoCaptureQuality, SIGNAL(valueChanged(int)), this, SLOT(sltHandleVideoCaptureQualitySliderChange()));
    674677
    675678    /* Prepare bit-rate spin-box: */
     
    677680    m_pEditorVideoCaptureBitRate->setMinimum(32);
    678681    m_pEditorVideoCaptureBitRate->setMaximum(2048);
    679     connect(m_pEditorVideoCaptureBitRate, SIGNAL(valueChanged(int)), this, SLOT(sltHandleVideoCaptureBitRateChange()));
     682    connect(m_pEditorVideoCaptureBitRate, SIGNAL(valueChanged(int)), this, SLOT(sltHandleVideoCaptureBitRateSpinboxChange()));
    680683}
    681684
     
    759762}
    760763
    761 void UIMachineSettingsDisplay::lookForCorrespondingBitRatePreset()
    762 {
    763     /* Look for video-capture bit-rate preset: */
    764     lookForCorrespondingPreset(m_pComboVideoCaptureBitRate,
    765                                m_pEditorVideoCaptureBitRate->value());
    766 }
    767 
    768764/* static */
    769765void UIMachineSettingsDisplay::lookForCorrespondingPreset(QComboBox *pWhere, const QVariant &whichData)
     
    777773}
    778774
     775/* static */
     776int UIMachineSettingsDisplay::calculateBitRate(int iFrameWidth, int iFrameHeight, int iFrameRate, int iQuality)
     777{
     778    /* Linear quality<=>bit-rate scale-factor: */
     779    return   (double)iQuality
     780           * (double)iFrameWidth * (double)iFrameHeight * (double)iFrameRate
     781           / (double)10 /* translate quality to [%] */
     782           / (double)1024 /* translate bit-rate to [kbps] */
     783           / (double)18.75 /* linear scale factor */;
     784}
     785
     786/* static */
     787int UIMachineSettingsDisplay::calculateQuality(int iFrameWidth, int iFrameHeight, int iFrameRate, int iBitRate)
     788{
     789    /* Linear bit-rate<=>quality scale-factor: */
     790    return   (double)iBitRate
     791           / (double)iFrameWidth / (double)iFrameHeight / (double)iFrameRate
     792           * (double)10 /* translate quality to [%] */
     793           * (double)1024 /* translate bit-rate to [kbps] */
     794           * (double)18.75 /* linear scale factor */;
     795}
     796
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsDisplay.h

    r46455 r46459  
    169169    void sltHandleVideoCaptureSizeChange(int iCurrentIndex);
    170170    void sltHandleVideoCaptureFrameRateChange(int iFrameRate);
    171     void sltHandleVideoCaptureBitRateChange(int iCurrentIndex);
    172171    void sltHandleVideoCaptureWidthChange();
    173172    void sltHandleVideoCaptureHeightChange();
    174173    void sltHandleVideoCaptureFrameRateChange();
    175     void sltHandleVideoCaptureBitRateChange();
     174    void sltHandleVideoCaptureQualitySliderChange();
     175    void sltHandleVideoCaptureBitRateSpinboxChange();
    176176
    177177private:
     
    190190    /* Helpers: Video Capture stuff: */
    191191    void lookForCorrespondingSizePreset();
    192     void lookForCorrespondingBitRatePreset();
    193192    static void lookForCorrespondingPreset(QComboBox *pWhere, const QVariant &whichData);
     193    static int calculateBitRate(int iFrameWidth, int iFrameHeight, int iFrameRate, int iQuality);
     194    static int calculateQuality(int iFrameWidth, int iFrameHeight, int iFrameRate, int iBitRate);
    194195
    195196    /* Validation stuff: */
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsDisplay.ui

    r46455 r46459  
    585585              <widget class="QLabel" name="m_pLabelVideoCaptureRate">
    586586               <property name="text">
    587                 <string>&amp;Bit Rate:</string>
     587                <string>&amp;Quality:</string>
    588588               </property>
    589589               <property name="alignment">
     
    591591               </property>
    592592               <property name="buddy">
    593                 <cstring>m_pComboVideoCaptureBitRate</cstring>
    594                </property>
    595               </widget>
    596              </item>
    597              <item row="4" column="1">
    598               <widget class="QComboBox" name="m_pComboVideoCaptureBitRate">
    599                <property name="sizePolicy">
    600                 <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
    601                  <horstretch>1</horstretch>
    602                  <verstretch>0</verstretch>
    603                 </sizepolicy>
    604                </property>
    605                <property name="whatsThis">
    606                 <string>This setting determines the &lt;b>bitrate&lt;/b> in kilobits per second. Increasing this value makes the video look better for the cost of an increased file size.</string>
    607                </property>
    608               </widget>
     593                <cstring>m_pSliderVideoCaptureQuality</cstring>
     594               </property>
     595              </widget>
     596             </item>
     597             <item row="4" column="1" rowspan="2">
     598              <layout class="QGridLayout" name="m_pSliderLayoutVideoCaptureQuality">
     599               <property name="spacing">
     600                <number>0</number>
     601               </property>
     602               <item row="0" column="0" colspan="5">
     603                <widget class="QIAdvancedSlider" name="m_pSliderVideoCaptureQuality">
     604                 <property name="whatsThis">
     605                  <string>This setting determines the &lt;b>quality&lt;/b>. Increasing this value makes the video look better for the cost of an increased file size.</string>
     606                 </property>
     607                 <property name="orientation">
     608                  <enum>Qt::Horizontal</enum>
     609                 </property>
     610                 <property name="tickPosition">
     611                  <enum>QSlider::TicksBelow</enum>
     612                 </property>
     613                </widget>
     614               </item>
     615               <item row="1" column="0">
     616                <widget class="QLabel" name="m_pLabelVideoCaptureQualityMin"/>
     617               </item>
     618               <item row="1" column="1">
     619                <spacer name="m_pStretchVideoCaptureQualityLeft">
     620                 <property name="orientation">
     621                  <enum>Qt::Horizontal</enum>
     622                 </property>
     623                 <property name="sizeHint" stdset="0">
     624                  <size>
     625                   <width>0</width>
     626                   <height>0</height>
     627                  </size>
     628                 </property>
     629                </spacer>
     630               </item>
     631               <item row="1" column="2">
     632                <widget class="QLabel" name="m_pLabelVideoCaptureQualityMed"/>
     633               </item>
     634               <item row="1" column="3">
     635                <spacer name="m_pStretchVideoCaptureQualityRight">
     636                 <property name="orientation">
     637                  <enum>Qt::Horizontal</enum>
     638                 </property>
     639                 <property name="sizeHint" stdset="0">
     640                  <size>
     641                   <width>0</width>
     642                   <height>0</height>
     643                  </size>
     644                 </property>
     645                </spacer>
     646               </item>
     647               <item row="1" column="4">
     648                <widget class="QLabel" name="m_pLabelVideoCaptureQualityMax"/>
     649               </item>
     650              </layout>
    609651             </item>
    610652             <item row="4" column="2">
    611653              <widget class="QSpinBox" name="m_pEditorVideoCaptureBitRate">
    612654               <property name="whatsThis">
    613                 <string>This setting determines the &lt;b>bitrate&lt;/b> in kilobits per second. Increasing this value makes the video look better for the cost of an increased file size.</string>
     655                <string>This setting determines the bitrate in &lt;b>kilobits per second&lt;/b>. Increasing this value makes the video look better for the cost of an increased file size.</string>
    614656               </property>
    615657              </widget>
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette