Index: /trunk/src/VBox/Devices/Audio/HDAStream.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/HDAStream.cpp	(revision 75982)
+++ /trunk/src/VBox/Devices/Audio/HDAStream.cpp	(revision 75983)
@@ -402,6 +402,9 @@
 
                 /* Initialize position adjustment counter. */
-                pStream->State.cPosAdjustFramesLeft = cfPosAdjust;
-                LogRel2(("HDA: Position adjustment for stream #%RU8 active (%RU32 frames)\n", pStream->u8SD, cfPosAdjust));
+                pStream->State.cfPosAdjustDefault = cfPosAdjust;
+                pStream->State.cfPosAdjustLeft    = pStream->State.cfPosAdjustDefault;
+
+                LogRel2(("HDA: Position adjustment for stream #%RU8 active (%RU32 frames)\n",
+                         pStream->u8SD, pStream->State.cfPosAdjustDefault));
             }
         }
@@ -507,4 +510,7 @@
     pStream->pMixSink = hdaR3GetDefaultSink(pThis, uSD);
 
+    /* Reset position adjustment counter. */
+    pStream->State.cfPosAdjustLeft = pStream->State.cfPosAdjustDefault;
+
     /* Reset transfer stuff. */
     pStream->State.cbTransferProcessed        = 0;
@@ -963,9 +969,9 @@
         /* If there are position adjustment frames left to be processed,
          * make sure that we process them first as a whole. */
-        if (pStream->State.cPosAdjustFramesLeft)
-            cbChunk = RT_MIN(cbChunk, uint32_t(pStream->State.cPosAdjustFramesLeft * pStream->State.Mapping.cbFrameSize));
+        if (pStream->State.cfPosAdjustLeft)
+            cbChunk = RT_MIN(cbChunk, uint32_t(pStream->State.cfPosAdjustLeft * pStream->State.Mapping.cbFrameSize));
 
         Log3Func(("[SD%RU8] cbChunk=%RU32, cPosAdjustFramesLeft=%RU16\n",
-                  pStream->u8SD, cbChunk, pStream->State.cPosAdjustFramesLeft));
+                  pStream->u8SD, cbChunk, pStream->State.cfPosAdjustLeft));
 
         if (!cbChunk)
@@ -1168,5 +1174,5 @@
             /* Are we done doing the position adjustment?
              * Only then do the transfer accounting .*/
-            if (pStream->State.cPosAdjustFramesLeft == 0)
+            if (pStream->State.cfPosAdjustLeft == 0)
             {
                 Assert(cbLeft >= cbDMA);
@@ -1199,5 +1205,5 @@
                  *
                  * In such a case we need to skip such an interrupt and just move on. */
-                && pStream->State.cPosAdjustFramesLeft == 0)
+                && pStream->State.cfPosAdjustLeft == 0)
             {
                 /* If the IOCE ("Interrupt On Completion Enable") bit of the SDCTL register is set
@@ -1226,6 +1232,6 @@
 
         /* Do the position adjustment accounting. */
-        pStream->State.cPosAdjustFramesLeft -=
-            RT_MIN(pStream->State.cPosAdjustFramesLeft, cbDMA / pStream->State.Mapping.cbFrameSize);
+        pStream->State.cfPosAdjustLeft -=
+            RT_MIN(pStream->State.cfPosAdjustLeft, cbDMA / pStream->State.Mapping.cbFrameSize);
 
         if (RT_FAILURE(rc))
@@ -1242,5 +1248,5 @@
     /* Only do the data accounting if we don't have to do any position
      * adjustment anymore. */
-    if (pStream->State.cPosAdjustFramesLeft == 0)
+    if (pStream->State.cfPosAdjustLeft == 0)
     {
         hdaR3StreamPeriodInc(pPeriod, RT_MIN(cbProcessed / pStream->State.Mapping.cbFrameSize,
Index: /trunk/src/VBox/Devices/Audio/HDAStream.h
===================================================================
--- /trunk/src/VBox/Devices/Audio/HDAStream.h	(revision 75982)
+++ /trunk/src/VBox/Devices/Audio/HDAStream.h	(revision 75983)
@@ -151,10 +151,12 @@
     uint8_t                 cTransferPendingInterrupts;
     uint8_t                 Padding2[4];
+    /** Number of audio data frames for the position adjustment.
+     *  0 if no position adjustment is needed. */
+    uint16_t                cfPosAdjustDefault;
     /** How many audio data frames are left to be processed
      *  for the position adjustment handling.
      *
      *  0 if position adjustment handling is done or inactive. */
-    uint16_t                cPosAdjustFramesLeft;
-    uint8_t                 Padding3[2];
+    uint16_t                cfPosAdjustLeft;
     /** (Virtual) clock ticks per byte. */
     uint64_t                cTicksPerByte;
