Index: /trunk/src/VBox/Main/idl/VirtualBox.xidl
===================================================================
--- /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 75268)
+++ /trunk/src/VBox/Main/idl/VirtualBox.xidl	(revision 75269)
@@ -4766,7 +4766,48 @@
   </enum>
 
+  <enum
+    name="CaptureVideoScalingMethod"
+    uuid="17DA29A9-3F41-482E-A9BB-3D183BA3EE59"
+    >
+    <desc>
+      Capturing video scaling method enumeration.
+    </desc>
+
+    <const name="None"                  value="0">
+      <desc>No scaling performed.</desc>
+    </const>
+    <const name="NearestNeighbor"       value="1">
+      <desc>Performs scaling via nearest-neighbor interpolation.
+        Not yet implemented.</desc>
+    </const>
+    <const name="Bilinear"              value="2">
+      <desc>Performs scaling via bilinear interpolation.
+        Not yet implemented.</desc>
+    </const>
+    <const name="Bicubic"               value="3">
+      <desc>Performs scaling via bicubic interpolation.
+        Not yet implemented.</desc>
+    </const>
+  </enum>
+
+  <enum
+    name="CaptureVideoRateControlMode"
+    uuid="5D392E29-04EC-4FD7-989C-82452F54414C"
+    >
+    <desc>
+      Capturing video rate control mode enumeration.
+    </desc>
+
+    <const name="CBR" value="0">
+      <desc>Constant bit rate (CBR).</desc>
+    </const>
+    <const name="VBR" value="1">
+      <desc>Variable bit rate (VBR). Not yet implemented.</desc>
+    </const>
+  </enum>
+
   <interface
     name="ICaptureScreenSettings" extends="$unknown"
-    uuid="9C8FE192-DD9A-45E9-B17B-2BA23B5951F7"
+    uuid="17DA29A9-3F41-482E-A9BB-3D183BA3EE59"
     wsmap="managed"
     >
@@ -4859,8 +4900,46 @@
     </attribute>
 
+    <attribute name="audioCodec" type="CaptureAudioCodec">
+      <desc>
+        Determines the audio codec to use for encoding the
+        recorded audio data. This setting cannot be changed while capturing is
+        enabled.
+      </desc>
+    </attribute>
+
+    <attribute name="audioHz" type="unsigned long" default="22050">
+      <desc>
+        Determines the Hertz (Hz) rate of the recorded audio data. This setting
+        cannot be changed while capturing is enabled.
+      </desc>
+    </attribute>
+
+    <attribute name="audioBits" type="unsigned long" default="16">
+      <desc>
+        Determines the bits per sample of the recorded audio data. This setting
+        cannot be changed while capturing is enabled.
+      </desc>
+    </attribute>
+
+    <attribute name="audioChannels" type="unsigned long" default="2">
+      <desc>
+        Determines the audio channels of the recorded audio data.
+        Specifiy 2 for stereo or 1 for mono. More than stereo (2) channels
+        are not supported at the moment. This setting cannot be changed while
+        capturing is enabled.
+      </desc>
+    </attribute>
+
+    <attribute name="videoCodec" type="CaptureVideoCodec">
+      <desc>
+        Determines the video codec to use for encoding the recorded video data.
+        This setting cannot be changed while capturing is enabled.
+      </desc>
+    </attribute>
+
     <attribute name="videoWidth" type="unsigned long" default="1024">
       <desc>
-        This setting determines the horizontal resolution of the recorded
-        video. This setting cannot be changed while capturing is enabled.
+        Determines the horizontal resolution of the recorded video data. This
+        setting cannot be changed while capturing is enabled.
       </desc>
     </attribute>
@@ -4868,6 +4947,6 @@
     <attribute name="videoHeight" type="unsigned long" default="768">
       <desc>
-        This setting determines the vertical resolution of the recorded
-        video. This setting cannot be changed while capturing is enabled.
+        Determines the vertical resolution of the recorded video data. This
+        setting cannot be changed while capturing is enabled.
       </desc>
     </attribute>
@@ -4875,7 +4954,13 @@
     <attribute name="videoRate" type="unsigned long" default="512">
       <desc>
-        This setting determines the bitrate in kilobits per second.
-        Increasing this value makes the video look better for the
-        cost of an increased file size. This setting cannot be changed
+        Determines the bitrate in kilobits per second. Increasing this value
+        makes the video look better for the cost of an increased file size or
+        transfer rate. This setting cannot be changed while capturing is enabled.
+      </desc>
+    </attribute>
+
+    <attribute name="videoRateControlMode" type="CaptureVideoRateControlMode">
+      <desc>
+        Determines the rate control mode. This setting cannot be changed
         while capturing is enabled.
       </desc>
@@ -4884,9 +4969,15 @@
     <attribute name="videoFPS" type="unsigned long" default="25">
       <desc>
-        This setting determines the maximum number of frames per second.
-        Frames with a higher frequency will be skipped. Reducing this
-        value increases the number of skipped frames and reduces the
-        file size. This setting cannot be changed while capturing
-        is enabled.
+        Determines the maximum number of frames per second (FPS). Frames with
+        a higher frequency will be skipped. Reducing this value increases the
+        number of skipped frames and reduces the file size or transfer rate.
+        This setting cannot be changed while capturing is enabled.
+      </desc>
+    </attribute>
+
+    <attribute name="videoScalingMethod" type="CaptureVideoScalingMethod">
+      <desc>
+        Determines the video scaling method to use.
+        This setting cannot be changed while capturing is enabled.
       </desc>
     </attribute>
Index: /trunk/src/VBox/Main/include/CaptureScreenSettingsImpl.h
===================================================================
--- /trunk/src/VBox/Main/include/CaptureScreenSettingsImpl.h	(revision 75268)
+++ /trunk/src/VBox/Main/include/CaptureScreenSettingsImpl.h	(revision 75269)
@@ -75,4 +75,15 @@
     HRESULT setOptions(const com::Utf8Str &aOptions);
 
+    HRESULT getAudioCodec(CaptureAudioCodec_T *aCodec);
+    HRESULT setAudioCodec(CaptureAudioCodec_T aCodec);
+    HRESULT getAudioHz(ULONG *aHz);
+    HRESULT setAudioHz(ULONG aHz);
+    HRESULT getAudioBits(ULONG *aBits);
+    HRESULT setAudioBits(ULONG aBits);
+    HRESULT getAudioChannels(ULONG *aChannels);
+    HRESULT setAudioChannels(ULONG aChannels);
+
+    HRESULT getVideoCodec(CaptureVideoCodec_T *aCodec);
+    HRESULT setVideoCodec(CaptureVideoCodec_T aCodec);
     HRESULT getVideoWidth(ULONG *aVideoWidth);
     HRESULT setVideoWidth(ULONG aVideoWidth);
@@ -81,6 +92,10 @@
     HRESULT getVideoRate(ULONG *aVideoRate);
     HRESULT setVideoRate(ULONG aVideoRate);
+    HRESULT getVideoRateControlMode(CaptureVideoRateControlMode_T *aMode);
+    HRESULT setVideoRateControlMode(CaptureVideoRateControlMode_T aMode);
     HRESULT getVideoFPS(ULONG *aVideoFPS);
     HRESULT setVideoFPS(ULONG aVideoFPS);
+    HRESULT getVideoScalingMethod(CaptureVideoScalingMethod_T *aMode);
+    HRESULT setVideoScalingMethod(CaptureVideoScalingMethod_T aMode);
 
 private:
Index: /trunk/src/VBox/Main/src-server/CaptureScreenSettingsImpl.cpp
===================================================================
--- /trunk/src/VBox/Main/src-server/CaptureScreenSettingsImpl.cpp	(revision 75268)
+++ /trunk/src/VBox/Main/src-server/CaptureScreenSettingsImpl.cpp	(revision 75269)
@@ -409,4 +409,124 @@
 }
 
+HRESULT CaptureScreenSettings::getAudioCodec(CaptureAudioCodec_T *aCodec)
+{
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aCodec = m->bd->Audio.enmAudioCodec;
+
+    return S_OK;
+}
+
+HRESULT CaptureScreenSettings::setAudioCodec(CaptureAudioCodec_T aCodec)
+{
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    if (!i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change audio codec while capturing is enabled"));
+
+    m->pMachine->i_setModified(Machine::IsModified_Capture);
+    m->bd.backup();
+
+    m->bd->Audio.enmAudioCodec = aCodec;
+
+    return S_OK;
+}
+
+HRESULT CaptureScreenSettings::getAudioHz(ULONG *aHz)
+{
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aHz = m->bd->Audio.uHz;
+
+    return S_OK;
+}
+
+HRESULT CaptureScreenSettings::setAudioHz(ULONG aHz)
+{
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    if (!i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change audio Hertz rate while capturing is enabled"));
+
+    m->pMachine->i_setModified(Machine::IsModified_Capture);
+    m->bd.backup();
+
+    m->bd->Audio.uHz = (uint16_t)aHz;
+
+    return S_OK;
+}
+
+HRESULT CaptureScreenSettings::getAudioBits(ULONG *aBits)
+{
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aBits = m->bd->Audio.cBits;
+
+    return S_OK;
+}
+
+HRESULT CaptureScreenSettings::setAudioBits(ULONG aBits)
+{
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    if (!i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change audio bits while capturing is enabled"));
+
+    m->pMachine->i_setModified(Machine::IsModified_Capture);
+    m->bd.backup();
+
+    m->bd->Audio.cBits = (uint8_t)aBits;
+
+    return S_OK;
+}
+
+HRESULT CaptureScreenSettings::getAudioChannels(ULONG *aChannels)
+{
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aChannels = m->bd->Audio.cChannels;
+
+    return S_OK;
+}
+
+HRESULT CaptureScreenSettings::setAudioChannels(ULONG aChannels)
+{
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    if (!i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change audio channels while capturing is enabled"));
+
+    m->pMachine->i_setModified(Machine::IsModified_Capture);
+    m->bd.backup();
+
+    m->bd->Audio.cChannels = (uint8_t)aChannels;
+
+    return S_OK;
+}
+
+HRESULT CaptureScreenSettings::getVideoCodec(CaptureVideoCodec_T *aCodec)
+{
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aCodec = m->bd->Video.enmCodec;
+
+    return S_OK;
+}
+
+HRESULT CaptureScreenSettings::setVideoCodec(CaptureVideoCodec_T aCodec)
+{
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    if (!i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change video codec while capturing is enabled"));
+
+    m->pMachine->i_setModified(Machine::IsModified_Capture);
+    m->bd.backup();
+
+    m->bd->Video.enmCodec = aCodec;
+
+    return S_OK;
+}
+
 HRESULT CaptureScreenSettings::getVideoWidth(ULONG *aVideoWidth)
 {
@@ -481,4 +601,26 @@
 }
 
+HRESULT CaptureScreenSettings::getVideoRateControlMode(CaptureVideoRateControlMode_T *aMode)
+{
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aMode = CaptureVideoRateControlMode_CBR; /** @todo Implement VBR. */
+
+    return S_OK;
+}
+
+HRESULT CaptureScreenSettings::setVideoRateControlMode(CaptureVideoRateControlMode_T aMode)
+{
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    if (!i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change video rate control mode while capturing is enabled"));
+
+    /** @todo Implement this. */
+    RT_NOREF(aMode);
+
+    return E_NOTIMPL;
+}
+
 HRESULT CaptureScreenSettings::getVideoFPS(ULONG *aVideoFPS)
 {
@@ -495,5 +637,5 @@
 
     if (!i_canChangeSettings())
-        return setError(E_INVALIDARG, tr("Cannot change parameters while capturing is enabled"));
+        return setError(E_INVALIDARG, tr("Cannot change video FPS while capturing is enabled"));
 
     m->pMachine->i_setModified(Machine::IsModified_Capture);
@@ -503,4 +645,26 @@
 
     return S_OK;
+}
+
+HRESULT CaptureScreenSettings::getVideoScalingMethod(CaptureVideoScalingMethod_T *aMode)
+{
+    AutoReadLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    *aMode = CaptureVideoScalingMethod_None; /** @todo Implement this. */
+
+    return S_OK;
+}
+
+HRESULT CaptureScreenSettings::setVideoScalingMethod(CaptureVideoScalingMethod_T aMode)
+{
+    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
+
+    if (!i_canChangeSettings())
+        return setError(E_INVALIDARG, tr("Cannot change video rate scaling method while capturing is enabled"));
+
+    /** @todo Implement this. */
+    RT_NOREF(aMode);
+
+    return E_NOTIMPL;
 }
 
