VirtualBox

Changeset 68415 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Aug 15, 2017 8:09:42 AM (7 years ago)
Author:
vboxsync
Message:

Audio/DevIchAc97.cpp: Fixes for async I/O handling. Not enabled by default yet.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Audio/DevIchAc97.cpp

    r68412 r68415  
    472472static uint32_t           ichac97StreamGetFree(PAC97STREAM pStream);
    473473static int                ichac97StreamTransfer(PAC97STATE pThis, PAC97STREAM pStream, uint32_t cbToProcessMax);
     474static void               ichac97StreamUpdate(PAC97STATE pThis, PAC97STREAM pStream, bool fInTimer);
    474475
    475476static DECLCALLBACK(void) ichac97Reset(PPDMDEVINS pDevIns);
     
    10161017            }
    10171018
    1018             uint32_t cbToProcess;
    1019             uint32_t cbProcessed = 0;
    1020 
    1021             switch (pStream->u8SD)
    1022             {
    1023                 /* Input. */
    1024                 case AC97SOUNDSOURCE_PI_INDEX:
    1025                 case AC97SOUNDSOURCE_MC_INDEX:
    1026                 {
    1027                     cbToProcess = (uint32_t)RTCircBufFree(pCircBuf);
    1028                     if (cbToProcess)
    1029                         rc2 = ichac97StreamWrite(pThis, pStream, pMixSink, (uint32_t)cbToProcess, &cbProcessed);
    1030                     break;
    1031                 }
    1032 
    1033                 /* Output. */
    1034                 case AC97SOUNDSOURCE_PO_INDEX:
    1035                 {
    1036                     cbToProcess = (uint32_t)RTCircBufUsed(pCircBuf);
    1037                     if (cbToProcess)
    1038                         rc2 = ichac97StreamRead(pThis, pStream, pMixSink, (uint32_t)cbToProcess, &cbProcessed);
    1039                     break;
    1040                 }
    1041 
    1042                 default:
    1043                     AssertFailedStmt(rc2 = VERR_NOT_SUPPORTED);
    1044                     break;
    1045             }
    1046 
    1047             if (RT_SUCCESS(rc2))
    1048                 rc2 = AudioMixerSinkUpdate(pMixSink);
     1019            ichac97StreamUpdate(pThis, pStream, false /* fInTimer */);
    10491020
    10501021            int rc3 = RTCritSectLeave(&pAIO->CritSect);
     
    12191190static void ichac97StreamUpdate(PAC97STATE pThis, PAC97STREAM pStream, bool fInTimer)
    12201191{
    1221     ichac97StreamLock(pStream);
    1222 
    12231192    PAUDMIXSINK pSink = ichac97IndexToSink(pThis, pStream->u8SD);
    12241193    AssertPtr(pSink);
    12251194
    12261195    if (!AudioMixerSinkIsActive(pSink)) /* No sink available? Bail out. */
    1227     {
    1228         ichac97StreamUnlock(pStream);
    12291196        return;
    1230     }
    12311197
    12321198    int rc2;
     
    13401306#endif
    13411307    }
    1342 
    1343     ichac97StreamUnlock(pStream);
    13441308}
    13451309
     
    21882152    AssertReturn(cbToProcessMax, VERR_INVALID_PARAMETER);
    21892153
     2154    ichac97StreamLock(pStream);
     2155
    21902156    PAC97BMREGS pRegs = &pStream->Regs;
    21912157
     
    22052171        }
    22062172
     2173        ichac97StreamUnlock(pStream);
    22072174        return VINF_SUCCESS;
    22082175    }
     
    22122179    {
    22132180        Log3Func(("[SD%RU8] BCIS set\n", pStream->u8SD));
     2181
     2182        ichac97StreamUnlock(pStream);
    22142183        return VINF_SUCCESS;
    22152184    }
     
    23752344        }
    23762345    }
     2346
     2347    ichac97StreamUnlock(pStream);
    23772348
    23782349    LogFlowFuncLeaveRC(rc);
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