Index: /trunk/include/VBox/vmm/pdmaudioifs.h
===================================================================
--- /trunk/include/VBox/vmm/pdmaudioifs.h	(revision 68075)
+++ /trunk/include/VBox/vmm/pdmaudioifs.h	(revision 68076)
@@ -1213,4 +1213,12 @@
 
     /**
+     * Signals the backend that the host wants to begin playing for this iteration. Optional.
+     *
+     * @param   pInterface          Pointer to the interface structure containing the called function pointer.
+     * @param   pStream             Pointer to audio stream.
+     */
+    DECLR3CALLBACKMEMBER(void, pfnStreamPlayBegin, (PPDMIHOSTAUDIO pInterface, PPDMAUDIOBACKENDSTREAM pStream));
+
+    /**
      * Plays (writes to) an audio (output) stream.
      *
@@ -1225,4 +1233,20 @@
 
     /**
+     * Signals the backend that the host finished playing for this iteration. Optional.
+     *
+     * @param   pInterface          Pointer to the interface structure containing the called function pointer.
+     * @param   pStream             Pointer to audio stream.
+     */
+    DECLR3CALLBACKMEMBER(void, pfnStreamPlayEnd, (PPDMIHOSTAUDIO pInterface, PPDMAUDIOBACKENDSTREAM pStream));
+
+    /**
+     * Signals the backend that the host wants to begin capturing for this iteration. Optional.
+     *
+     * @param   pInterface          Pointer to the interface structure containing the called function pointer.
+     * @param   pStream             Pointer to audio stream.
+     */
+    DECLR3CALLBACKMEMBER(void, pfnStreamCaptureBegin, (PPDMIHOSTAUDIO pInterface, PPDMAUDIOBACKENDSTREAM pStream));
+
+    /**
      * Captures (reads from) an audio (input) stream.
      *
@@ -1236,8 +1260,16 @@
     DECLR3CALLBACKMEMBER(int, pfnStreamCapture, (PPDMIHOSTAUDIO pInterface, PPDMAUDIOBACKENDSTREAM pStream, void *pvBuf, uint32_t cbBuf, uint32_t *pcbRead));
 
+    /**
+     * Signals the backend that the host finished capturing for this iteration. Optional.
+     *
+     * @param   pInterface          Pointer to the interface structure containing the called function pointer.
+     * @param   pStream             Pointer to audio stream.
+     */
+    DECLR3CALLBACKMEMBER(void, pfnStreamCaptureEnd, (PPDMIHOSTAUDIO pInterface, PPDMAUDIOBACKENDSTREAM pStream));
+
 } PDMIHOSTAUDIO;
 
 /** PDMIHOSTAUDIO interface ID. */
-#define PDMIHOSTAUDIO_IID                           "12DF859E-416A-4332-9980-A049AC70D187"
+#define PDMIHOSTAUDIO_IID                           "378A5C7F-A45A-4B8B-C1DA-CB49E84894AA"
 
 /** @} */
Index: /trunk/src/VBox/Devices/Audio/DrvAudio.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/DrvAudio.cpp	(revision 68075)
+++ /trunk/src/VBox/Devices/Audio/DrvAudio.cpp	(revision 68076)
@@ -1503,4 +1503,7 @@
         uint32_t csToPlay = AudioMixBufLive(&pHstStream->MixBuf);
 
+        if (pThis->pHostDrvAudio->pfnStreamPlayBegin)
+            pThis->pHostDrvAudio->pfnStreamPlayBegin(pThis->pHostDrvAudio, pHstStream->pvBackend);
+
         if (RT_LIKELY(pHstStream->Cfg.enmLayout == PDMAUDIOSTREAMLAYOUT_NON_INTERLEAVED))
         {
@@ -1513,4 +1516,7 @@
         else
             AssertFailedStmt(rc = VERR_NOT_IMPLEMENTED);
+
+        if (pThis->pHostDrvAudio->pfnStreamPlayEnd)
+            pThis->pHostDrvAudio->pfnStreamPlayEnd(pThis->pHostDrvAudio, pHstStream->pvBackend);
 
         uint32_t csLive = 0;
@@ -1789,4 +1795,7 @@
          */
 
+        if (pThis->pHostDrvAudio->pfnStreamCaptureBegin)
+            pThis->pHostDrvAudio->pfnStreamCaptureBegin(pThis->pHostDrvAudio, pHstStream->pvBackend);
+
         if (RT_LIKELY(pHstStream->Cfg.enmLayout == PDMAUDIOSTREAMLAYOUT_NON_INTERLEAVED))
         {
@@ -1799,4 +1808,7 @@
         else
             AssertFailedStmt(rc = VERR_NOT_IMPLEMENTED);
+
+        if (pThis->pHostDrvAudio->pfnStreamCaptureEnd)
+            pThis->pHostDrvAudio->pfnStreamCaptureEnd(pThis->pHostDrvAudio, pHstStream->pvBackend);
 
 #ifdef LOG_ENABLED
