VirtualBox

Changeset 96175 in vbox for trunk/src/VBox/Main/xml


Ignore:
Timestamp:
Aug 12, 2022 2:01:17 PM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
152983
Message:

Recording: Implemented support for Vorbis codec (provided by libvorbis, not enabled by default yet). This also makes all the codec handling more abstract by using a simple codec wrapper, to keep other places free from codec-specific as much as possible. Initial implementation works and output files are being recognized by media players, but there still are some timing bugs to resolve, as well as optimizing the performance. bugref:10275

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/xml/Settings.cpp

    r96172 r96175  
    30253025    Video.ulRate         = 512;
    30263026    Video.ulFPS          = 25;
     3027#ifdef VBOX_WITH_AUDIO_RECORDING
     3028    /* When both codecs are defined, prefer Ogg Vorbis as a default. */
     3029# if   defined(VBOX_WITH_LIBVORBIS)
     3030    Audio.enmCodec       = RecordingAudioCodec_OggVorbis;
     3031# elif defined(VBOX_WITH_LIBOPUS)
    30273032    Audio.enmCodec       = RecordingAudioCodec_Opus;
     3033# else
     3034    Audio.enmCodec       = RecordingAudioCodec_None;
     3035# endif
     3036#else
     3037    Audio.enmCodec       = RecordingAudioCodec_None;
     3038#endif /* VBOX_WITH_RECORDING */
    30283039    Audio.enmDeadline    = RecordingCodecDeadline_Default;
    30293040    Audio.enmRateCtlMode = RecordingRateControlMode_VBR;
     
    30613072           && Video.ulRate                                    == 512
    30623073           && Video.ulFPS                                     == 25
     3074#ifdef VBOX_WITH_AUDIO_RECORDING
     3075/* When both codecs are defined, prefer Ogg Vorbis as a default. */
     3076# if   defined(VBOX_WITH_LIBVORBIS)
     3077           && Audio.enmCodec                                  == RecordingAudioCodec_OggVorbis
     3078# elif defined(VBOX_WITH_LIBOPUS)
    30633079           && Audio.enmCodec                                  == RecordingAudioCodec_Opus
     3080# else
     3081           && Audio.enmCodec                                  == RecordingAudioCodec_None
     3082# endif
     3083#else
     3084           && Audio.enmCodec                                  == RecordingAudioCodec_None
     3085#endif /* VBOX_WITH_AUDIO_RECORDING */
    30643086           && Audio.enmDeadline                               == RecordingCodecDeadline_Default
    30653087           && Audio.enmRateCtlMode                            == RecordingRateControlMode_VBR
     
    30933115bool RecordingScreenSettings::operator==(const RecordingScreenSettings &d) const
    30943116{
    3095     return    fEnabled            == d.fEnabled
    3096            && enmDest             == d.enmDest
    3097            && featureMap          == d.featureMap
    3098            && ulMaxTimeS          == d.ulMaxTimeS
    3099            && strOptions          == d.strOptions
    3100            && File.strName        == d.File.strName
    3101            && File.ulMaxSizeMB    == d.File.ulMaxSizeMB
    3102            && Video.enmDeadline   == d.Video.enmDeadline
    3103            && Video.enmCodec      == d.Video.enmCodec
    3104            && Video.ulWidth       == d.Video.ulWidth
    3105            && Video.ulHeight      == d.Video.ulHeight
    3106            && Video.ulRate        == d.Video.ulRate
    3107            && Video.ulFPS         == d.Video.ulFPS
    3108            && Audio.enmCodec      == d.Audio.enmCodec
    3109            && Audio.enmDeadline   == d.Audio.enmDeadline
    3110            && Audio.cBits         == d.Audio.cBits
    3111            && Audio.cChannels     == d.Audio.cChannels
    3112            && Audio.uHz           == d.Audio.uHz
    3113            && featureMap          == d.featureMap;
     3117    return    fEnabled             == d.fEnabled
     3118           && enmDest              == d.enmDest
     3119           && featureMap           == d.featureMap
     3120           && ulMaxTimeS           == d.ulMaxTimeS
     3121           && strOptions           == d.strOptions
     3122           && File.strName         == d.File.strName
     3123           && File.ulMaxSizeMB     == d.File.ulMaxSizeMB
     3124           && Video.enmCodec       == d.Video.enmCodec
     3125           && Video.enmDeadline    == d.Video.enmDeadline
     3126           && Video.enmRateCtlMode == d.Video.enmRateCtlMode
     3127           && Video.enmScalingMode == d.Video.enmScalingMode
     3128           && Video.ulWidth        == d.Video.ulWidth
     3129           && Video.ulHeight       == d.Video.ulHeight
     3130           && Video.ulRate         == d.Video.ulRate
     3131           && Video.ulFPS          == d.Video.ulFPS
     3132           && Audio.enmCodec       == d.Audio.enmCodec
     3133           && Audio.enmDeadline    == d.Audio.enmDeadline
     3134           && Audio.enmRateCtlMode == d.Audio.enmRateCtlMode
     3135           && Audio.cBits          == d.Audio.cBits
     3136           && Audio.cChannels      == d.Audio.cChannels
     3137           && Audio.uHz            == d.Audio.uHz
     3138           && featureMap           == d.featureMap;
    31143139}
    31153140
     
    62726297            if ((*itScreen)->getAttributeValue("videoCodec", strTemp)) /* Stick with default if not set. */
    62736298                RecordingScreenSettings::videoCodecFromString(strTemp, screenSettings.Video.enmCodec);
     6299            (*itScreen)->getAttributeValue("videoDeadline", (uint32_t &)screenSettings.Video.enmDeadline);
     6300            (*itScreen)->getAttributeValue("videoRateCtlMode", (uint32_t &)screenSettings.Video.enmRateCtlMode);
    62746301            (*itScreen)->getAttributeValue("videoScalingMode", (uint32_t &)screenSettings.Video.enmScalingMode);
    6275             (*itScreen)->getAttributeValue("videoDeadline", (uint32_t &)screenSettings.Video.enmDeadline);
    62766302            (*itScreen)->getAttributeValue("horzRes",       screenSettings.Video.ulWidth);
    62776303            (*itScreen)->getAttributeValue("vertRes",       screenSettings.Video.ulHeight);
     
    62826308                RecordingScreenSettings::audioCodecFromString(strTemp, screenSettings.Audio.enmCodec);
    62836309            (*itScreen)->getAttributeValue("audioDeadline", (uint32_t &)screenSettings.Audio.enmDeadline);
     6310            (*itScreen)->getAttributeValue("audioRateCtlMode", (uint32_t &)screenSettings.Audio.enmRateCtlMode);
    62846311            (*itScreen)->getAttributeValue("audioHz",       (uint32_t &)screenSettings.Audio.uHz);
    62856312            (*itScreen)->getAttributeValue("audioBits",     (uint32_t &)screenSettings.Audio.cBits);
     
    83418368                if (itScreen->second.Video.enmDeadline != RecordingCodecDeadline_Default)
    83428369                    pelmScreen->setAttribute("videoDeadline",   itScreen->second.Video.enmDeadline);
     8370                if (itScreen->second.Video.enmRateCtlMode != RecordingRateControlMode_VBR) /* Is default. */
     8371                    pelmScreen->setAttribute("videoRateCtlMode", itScreen->second.Video.enmRateCtlMode);
    83438372                if (itScreen->second.Video.enmScalingMode != RecordingVideoScalingMode_None)
    83448373                    pelmScreen->setAttribute("videoScalingMode",itScreen->second.Video.enmScalingMode);
     
    83588387                if (itScreen->second.Audio.enmDeadline != RecordingCodecDeadline_Default)
    83598388                    pelmScreen->setAttribute("audioDeadline",   itScreen->second.Audio.enmDeadline);
     8389                if (itScreen->second.Audio.enmRateCtlMode != RecordingRateControlMode_VBR) /* Is default. */
     8390                    pelmScreen->setAttribute("audioRateCtlMode", itScreen->second.Audio.enmRateCtlMode);
    83608391                if (itScreen->second.Audio.uHz != 22050)
    83618392                    pelmScreen->setAttribute("audioHz",         itScreen->second.Audio.uHz);
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