VirtualBox

Changeset 95741 in vbox for trunk/src/VBox/Main


Ignore:
Timestamp:
Jul 20, 2022 9:30:30 AM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
152447
Message:

Main/Recording: Added ISystemProperties::getRecordingFeatures to allow clients querying for enabled recording features at runtime. Also added IRecordingScreenSettings::videoDeadline + audioDeadline attributes to allow specifying the video/audio codec's (encoding) deadlines. bugref:10244

Location:
trunk/src/VBox/Main
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/Makefile.kmk

    r95570 r95741  
    8484VBOX_MAIN_DEFS += VBOX_WITH_AUDIO_PULSE
    8585endif
     86ifdef VBOX_WITH_AUDIO_RECORDING
     87VBOX_MAIN_DEFS += VBOX_WITH_AUDIO_RECORDING
     88endif
    8689ifdef VBOX_WITH_AUDIO_VALIDATIONKIT
    8790VBOX_MAIN_DEFS += VBOX_WITH_AUDIO_VALIDATIONKIT
     
    137140ifdef VBOX_WITH_PDM_ASYNC_COMPLETION
    138141VBOX_MAIN_DEFS += VBOX_WITH_PDM_ASYNC_COMPLETION
     142endif
     143ifdef VBOX_WITH_RECORDING
     144VBOX_MAIN_DEFS += VBOX_WITH_RECORDING
    139145endif
    140146ifdef VBOX_WITH_SDS
     
    10001006if defined(VBOX_WITH_RECORDING) && defined(VBOX_WITH_LIBVPX)
    10011007VBoxC_SDKS += VBOX_VPX
    1002 VBoxC_DEFS += VBOX_WITH_RECORDING VBOX_WITH_LIBVPX
     1008VBoxC_DEFS += VBOX_WITH_LIBVPX
    10031009VBoxC_SOURCES += \
    10041010        src-client/EBMLWriter.cpp \
  • trunk/src/VBox/Main/idl/VirtualBox.xidl

    r95617 r95741  
    58055805
    58065806  <enum
     5807    name="RecordingCodecDeadline"
     5808    uuid="53627ae1-31cf-4303-9cd5-0c22fd2637cf"
     5809    >
     5810    <desc>
     5811      Recording codec deadline.
     5812
     5813      How (and if at all) this deadline is being implemented depends on the codec being used.
     5814    </desc>
     5815
     5816    <const name="Default"               value="0">
     5817      <desc>Default deadline.</desc>
     5818    </const>
     5819    <const name="Realtime"              value="1">
     5820      <desc>Realtime quality, often resulting in poor / basic quality.</desc>
     5821    </const>
     5822    <const name="Good"                  value="2">
     5823      <desc>Balance between realtime and best deadline.</desc>
     5824    </const>
     5825    <const name="Best"                  value="3">
     5826      <desc>Best quality, slowest.</desc>
     5827    </const>
     5828  </enum>
     5829
     5830  <enum
    58075831    name="RecordingVideoCodec"
    58085832    uuid="93791063-3e8c-4310-987c-ddb43ff03ffe"
     
    58875911  <interface
    58885912    name="IRecordingScreenSettings" extends="$unknown"
    5889     uuid="678fbd9a-93af-42a7-7f13-79ad6ef1a18d"
     5913    uuid="92eb5328-c0b3-4ad2-ae25-75b12c52871f"
    58905914    wsmap="managed"
    58915915    rest="managed"
     
    59665990    <attribute name="options" type="wstring">
    59675991      <desc>
    5968         This setting contains any additional recording options
    5969         required in comma-separated key=value format. This setting
    5970         cannot be changed while recording is enabled.
     5992        <para>This setting contains any additional recording options
     5993        required in comma-separated key=value format, which are currently not
     5994        represented via own attribtues.</para>
     5995        <para>Consider these options as experimental and mostly for codec-specific
     5996        settings, and are subject to change.</para>
     5997
     5998        This setting cannot be changed while recording is enabled.
    59715999
    59726000        The following keys and their corresponding values are available:
    59736001
    59746002        <table>
     6003          <tr>
     6004            <td>vc_enabled</td>
     6005            <td>Enables video recording when set to <pre>true</pre>, otherwise
     6006                set to <pre>false</pre> to disable.</td>
     6007          </tr>
    59756008          <tr>
    59766009            <td>ac_enabled</td>
     
    59976030    </attribute>
    59986031
     6032    <attribute name="audioDeadline" type="RecordingCodecDeadline" default="Default">
     6033      <desc>
     6034        Determines the audio deadline to use.
     6035        This setting cannot be changed while recording is enabled.
     6036      </desc>
     6037    </attribute>
     6038
    59996039    <attribute name="audioHz" type="unsigned long" default="22050">
    60006040      <desc>
     
    60286068          Only the VP8 codec is supported currently.
    60296069        </note>
     6070      </desc>
     6071    </attribute>
     6072
     6073    <attribute name="videoDeadline" type="RecordingCodecDeadline" default="Default">
     6074      <desc>
     6075        Determines the video deadline to use.
     6076        This setting cannot be changed while recording is enabled.
    60306077      </desc>
    60316078    </attribute>
     
    1234512392    name="ISystemProperties"
    1234612393    extends="$unknown"
    12347     uuid="a2a3be3d-664a-47e9-a4c5-add220d4ebb1"
     12394    uuid="3624830f-4ac4-404f-bc58-cf20ed8836b0"
    1234812395    wsmap="managed"
    1234912396    rest="managed"
     
    1275712804      <desc>
    1275812805        Returns an array of officially supported values for enum <link to="ExportOptions"/>,
     12806        in the sense of what is e.g. worth offering in the VirtualBox GUI.
     12807      </desc>
     12808    </attribute>
     12809
     12810    <attribute name="supportedRecordingFeatures" type="RecordingFeature" safearray="yes" readonly="yes">
     12811      <desc>
     12812        Returns an array of officially supported values for enum <link to="RecordingFeature"/>,
    1275912813        in the sense of what is e.g. worth offering in the VirtualBox GUI.
    1276012814      </desc>
  • trunk/src/VBox/Main/include/RecordingScreenSettingsImpl.h

    r95714 r95741  
    8989    HRESULT getAudioCodec(RecordingAudioCodec_T *aCodec);
    9090    HRESULT setAudioCodec(RecordingAudioCodec_T aCodec);
     91    HRESULT getAudioDeadline(RecordingCodecDeadline_T *aDeadline);
     92    HRESULT setAudioDeadline(RecordingCodecDeadline_T aDeadline);
    9193    HRESULT getAudioHz(ULONG *aHz);
    9294    HRESULT setAudioHz(ULONG aHz);
     
    98100    HRESULT getVideoCodec(RecordingVideoCodec_T *aCodec);
    99101    HRESULT setVideoCodec(RecordingVideoCodec_T aCodec);
     102    HRESULT getVideoDeadline(RecordingCodecDeadline_T *aDeadline);
     103    HRESULT setVideoDeadline(RecordingCodecDeadline_T aDeadline);
    100104    HRESULT getVideoWidth(ULONG *aVideoWidth);
    101105    HRESULT setVideoWidth(ULONG aVideoWidth);
  • trunk/src/VBox/Main/include/SystemPropertiesImpl.h

    r94714 r95741  
    126126    HRESULT getSupportedImportOptions(std::vector<ImportOptions_T> &aSupportedImportOptions) RT_OVERRIDE;
    127127    HRESULT getSupportedExportOptions(std::vector<ExportOptions_T> &aSupportedExportOptions) RT_OVERRIDE;
     128    HRESULT getSupportedRecordingFeatures(std::vector<RecordingFeature_T> &aSupportedRecordingFeatures) RT_OVERRIDE;
    128129    HRESULT getSupportedRecordingAudioCodecs(std::vector<RecordingAudioCodec_T> &aSupportedRecordingAudioCodecs) RT_OVERRIDE;
    129130    HRESULT getSupportedRecordingVideoCodecs(std::vector<RecordingVideoCodec_T> &aSupportedRecordingVideoCodecs) RT_OVERRIDE;
  • trunk/src/VBox/Main/src-server/RecordingScreenSettingsImpl.cpp

    r95718 r95741  
    591591}
    592592
     593HRESULT RecordingScreenSettings::getAudioDeadline(RecordingCodecDeadline_T *aDeadline)
     594{
     595    AutoCaller autoCaller(this);
     596    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     597
     598    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
     599
     600    *aDeadline = m->bd->Audio.enmDeadline;
     601
     602    return S_OK;
     603}
     604
     605HRESULT RecordingScreenSettings::setAudioDeadline(RecordingCodecDeadline_T aDeadline)
     606{
     607    AutoCaller autoCaller(this);
     608    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     609
     610    if (!m->pParent->i_canChangeSettings())
     611        return setError(E_INVALIDARG, tr("Cannot change audio deadline while recording is enabled"));
     612
     613    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
     614
     615    if (m->bd->Audio.enmDeadline != aDeadline)
     616    {
     617        m->bd.backup();
     618        m->bd->Audio.enmDeadline = aDeadline;
     619
     620        alock.release();
     621
     622        m->pParent->i_onSettingsChanged();
     623    }
     624
     625    return S_OK;
     626}
     627
    593628HRESULT RecordingScreenSettings::getAudioHz(ULONG *aHz)
    594629{
     
    725760        m->bd.backup();
    726761        m->bd->Video.enmCodec = aCodec;
     762
     763        alock.release();
     764
     765        m->pParent->i_onSettingsChanged();
     766    }
     767
     768    return S_OK;
     769}
     770
     771HRESULT RecordingScreenSettings::getVideoDeadline(RecordingCodecDeadline_T *aDeadline)
     772{
     773    AutoCaller autoCaller(this);
     774    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     775
     776    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
     777
     778    *aDeadline = m->bd->Video.enmDeadline;
     779
     780    return S_OK;
     781}
     782
     783HRESULT RecordingScreenSettings::setVideoDeadline(RecordingCodecDeadline_T aDeadline)
     784{
     785    AutoCaller autoCaller(this);
     786    if (FAILED(autoCaller.rc())) return autoCaller.rc();
     787
     788    if (!m->pParent->i_canChangeSettings())
     789        return setError(E_INVALIDARG, tr("Cannot change video deadline while recording is enabled"));
     790
     791    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
     792
     793    if (m->bd->Video.enmDeadline != aDeadline)
     794    {
     795        m->bd.backup();
     796        m->bd->Video.enmDeadline = aDeadline;
    727797
    728798        alock.release();
  • trunk/src/VBox/Main/src-server/SystemPropertiesImpl.cpp

    r95395 r95741  
    15761576}
    15771577
     1578HRESULT SystemProperties::getSupportedRecordingFeatures(std::vector<RecordingFeature_T> &aSupportedRecordingFeatures)
     1579{
     1580#ifdef VBOX_WITH_RECORDING
     1581    static const RecordingFeature_T aRecordingFeatures[] =
     1582    {
     1583# ifdef VBOX_WITH_AUDIO_RECORDING
     1584        RecordingFeature_Audio,
     1585# endif
     1586        RecordingFeature_Video,
     1587    };
     1588    aSupportedRecordingFeatures.assign(aRecordingFeatures,
     1589                                       aRecordingFeatures + RT_ELEMENTS(aRecordingFeatures));
     1590#else  /* !VBOX_WITH_RECORDING */
     1591    aSupportedRecordingFeatures.clear();
     1592#endif /* VBOX_WITH_RECORDING */
     1593    return S_OK;
     1594}
     1595
    15781596HRESULT SystemProperties::getSupportedRecordingAudioCodecs(std::vector<RecordingAudioCodec_T> &aSupportedRecordingAudioCodecs)
    15791597{
  • trunk/src/VBox/Main/xml/Settings.cpp

    r95662 r95741  
    28052805    File.strName         = "";
    28062806    Video.enmCodec       = RecordingVideoCodec_VP8;
     2807    Video.enmDeadline    = RecordingCodecDeadline_Default;
    28072808    Video.ulWidth        = 1024;
    28082809    Video.ulHeight       = 768;
     
    28102811    Video.ulFPS          = 25;
    28112812    Audio.enmAudioCodec  = RecordingAudioCodec_Opus;
     2813    Audio.enmDeadline    = RecordingCodecDeadline_Default;
    28122814    Audio.cBits          = 16;
    28132815    Audio.cChannels      = 2;
     
    28302832           && File.strName                                    == ""
    28312833           && Video.enmCodec                                  == RecordingVideoCodec_VP8
     2834           && Video.enmDeadline                               == RecordingCodecDeadline_Default
    28322835           && Video.ulWidth                                   == 1024
    28332836           && Video.ulHeight                                  == 768
     
    28352838           && Video.ulFPS                                     == 25
    28362839           && Audio.enmAudioCodec                             == RecordingAudioCodec_Opus
     2840           && Audio.enmDeadline                               == RecordingCodecDeadline_Default
    28372841           && Audio.cBits                                     == 16
    28382842           && Audio.cChannels                                 == 2
     
    28712875           && File.strName        == d.File.strName
    28722876           && File.ulMaxSizeMB    == d.File.ulMaxSizeMB
     2877           && Video.enmDeadline   == d.Video.enmDeadline
    28732878           && Video.enmCodec      == d.Video.enmCodec
    28742879           && Video.ulWidth       == d.Video.ulWidth
     
    28772882           && Video.ulFPS         == d.Video.ulFPS
    28782883           && Audio.enmAudioCodec == d.Audio.enmAudioCodec
     2884           && Audio.enmDeadline   == d.Audio.enmDeadline
    28792885           && Audio.cBits         == d.Audio.cBits
    28802886           && Audio.cChannels     == d.Audio.cChannels
     
    60226028                                      N_("Not supported Recording/@dest attribute '%#x'"), screenSettings.enmDest);
    60236029            (*itScreen)->getAttributeValue("maxSizeMB", screenSettings.File.ulMaxSizeMB);
    6024             (*itScreen)->getAttributeValue("horzRes",   screenSettings.Video.ulWidth);
    6025             (*itScreen)->getAttributeValue("vertRes",   screenSettings.Video.ulHeight);
    6026             (*itScreen)->getAttributeValue("rateKbps",  screenSettings.Video.ulRate);
    6027             (*itScreen)->getAttributeValue("fps",       screenSettings.Video.ulFPS);
     6030
     6031            (*itScreen)->getAttributeValue("videoDeadline", (uint32_t &)screenSettings.Video.enmDeadline);
     6032            (*itScreen)->getAttributeValue("horzRes",       screenSettings.Video.ulWidth);
     6033            (*itScreen)->getAttributeValue("vertRes",       screenSettings.Video.ulHeight);
     6034            (*itScreen)->getAttributeValue("rateKbps",      screenSettings.Video.ulRate);
     6035            (*itScreen)->getAttributeValue("fps",           screenSettings.Video.ulFPS);
     6036
     6037            (*itScreen)->getAttributeValue("audioDeadline", (uint32_t &)screenSettings.Audio.enmDeadline);
     6038            (*itScreen)->getAttributeValue("audioHz",       (uint32_t &)screenSettings.Audio.uHz);
     6039            (*itScreen)->getAttributeValue("audioBits",     (uint32_t &)screenSettings.Audio.cBits);
     6040            (*itScreen)->getAttributeValue("audioChannels", (uint32_t &)screenSettings.Audio.cChannels);
    60286041        }
    60296042    }
     
    80518064                    pelmScreen->setAttribute("maxSizeMB",       itScreen->second.File.ulMaxSizeMB);
    80528065
     8066                if (itScreen->second.Video.enmDeadline != RecordingCodecDeadline_Default)
     8067                    pelmScreen->setAttribute("videoDeadline",   itScreen->second.Video.enmDeadline);
    80538068                if (   itScreen->second.Video.ulWidth  != 1024
    80548069                    || itScreen->second.Video.ulHeight != 768)
     
    80618076                if (itScreen->second.Video.ulFPS)
    80628077                    pelmScreen->setAttribute("fps",             itScreen->second.Video.ulFPS);
     8078
     8079                if (itScreen->second.Audio.enmDeadline != RecordingCodecDeadline_Default)
     8080                    pelmScreen->setAttribute("audioDeadline",   itScreen->second.Audio.enmDeadline);
     8081                if (itScreen->second.Audio.uHz != 22050)
     8082                    pelmScreen->setAttribute("audioHz",         itScreen->second.Audio.uHz);
     8083                if (itScreen->second.Audio.cBits != 16)
     8084                    pelmScreen->setAttribute("audioBits",       itScreen->second.Audio.cBits);
     8085                if (itScreen->second.Audio.cChannels != 2)
     8086                    pelmScreen->setAttribute("audioChannels",   itScreen->second.Audio.cChannels);
    80638087            }
    80648088            ++itScreen;
Note: See TracChangeset for help on using the changeset viewer.

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