VirtualBox

Changeset 65035 in vbox


Ignore:
Timestamp:
Dec 30, 2016 11:24:17 AM (8 years ago)
Author:
vboxsync
Message:

Audio/DrvAudioCommon.cpp: Fixes for DrvAudioHlpClearBuf().

File:
1 edited

Legend:

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

    r65015 r65035  
    149149        return;
    150150
     151    Assert(pPCMProps->cBits);
     152    size_t cbToClear = cSamples * (pPCMProps->cBits / 8 /* Bytes */);
     153    Assert(cbBuf >= cbToClear);
     154
     155    if (cbBuf < cbToClear)
     156        cbToClear = cbBuf;
     157
    151158    Log2Func(("pPCMInfo=%p, pvBuf=%p, cSamples=%RU32, fSigned=%RTbool, cBits=%RU8, cShift=%RU8\n",
    152159              pPCMProps, pvBuf, cSamples, pPCMProps->fSigned, pPCMProps->cBits, pPCMProps->cShift));
     
    154161    if (pPCMProps->fSigned)
    155162    {
    156         memset(pvBuf, 0, cSamples << pPCMProps->cShift);
     163        RT_BZERO(pvBuf, cbToClear);
    157164    }
    158165    else
     
    162169            case 8:
    163170            {
    164                 memset(pvBuf, 0x80, cSamples << pPCMProps->cShift);
     171                memset(pvBuf, 0x80, cbToClear);
    165172                break;
    166173            }
     
    169176            {
    170177                uint16_t *p = (uint16_t *)pvBuf;
    171                 int shift = pPCMProps->cChannels - 1;
    172                 short s = INT16_MAX;
     178                int16_t   s = INT16_MAX;
    173179
    174180                if (pPCMProps->fSwapEndian)
    175181                    s = RT_BSWAP_U16(s);
    176182
    177                 for (unsigned i = 0; i < cSamples << shift; i++)
     183                for (uint32_t i = 0; i < cSamples; i++)
    178184                    p[i] = s;
    179185
     
    184190            {
    185191                uint32_t *p = (uint32_t *)pvBuf;
    186                 int shift = pPCMProps->cChannels - 1;
    187                 int32_t s = INT32_MAX;
     192                int32_t   s = INT32_MAX;
    188193
    189194                if (pPCMProps->fSwapEndian)
    190195                    s = RT_BSWAP_U32(s);
    191196
    192                 for (unsigned i = 0; i < cSamples << shift; i++)
     197                for (uint32_t i = 0; i < cSamples; i++)
    193198                    p[i] = s;
    194199
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