VirtualBox

Ignore:
Timestamp:
Mar 8, 2021 1:06:36 AM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
143120
Message:

Audio: Fixed the 16-bit and 32-bit signed cases of DrvAudioHlpClearBuf. Also, eliminated repeated calls to DrvAudioHlpBytesToFrames for each for-loop iteration. bugref:9890

File:
1 edited

Legend:

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

    r87996 r87997  
    3535static void tstBasics(RTTEST hTest)
    3636{
    37     RTTestSubF(hTest, "Single buffer");
     37    RTTestSub(hTest, "Single buffer");
    3838
    3939    static const PDMAUDIOPCMPROPS s_Cfg441StereoS16 = PDMAUDIOPCMPROPS_INITIALIZOR(
     
    4545        /* a_fSwapEndian: */    false
    4646    );
     47    static const PDMAUDIOPCMPROPS s_Cfg441StereoU16 = PDMAUDIOPCMPROPS_INITIALIZOR(
     48        /* a_cb: */             2,
     49        /* a_fSigned: */        false,
     50        /* a_cChannels: */      2,
     51        /* a_uHz: */            44100,
     52        /* a_cShift: */         PDMAUDIOPCMPROPS_MAKE_SHIFT_PARMS(2 /* cb */, 2 /* cChannels */),
     53        /* a_fSwapEndian: */    false
     54    );
     55    static const PDMAUDIOPCMPROPS s_Cfg441StereoU32 = PDMAUDIOPCMPROPS_INITIALIZOR(
     56        /* a_cb: */             4,
     57        /* a_fSigned: */        false,
     58        /* a_cChannels: */      2,
     59        /* a_uHz: */            44100,
     60        /* a_cShift: */         PDMAUDIOPCMPROPS_MAKE_SHIFT_PARMS(4 /* cb */, 2 /* cChannels */),
     61        /* a_fSwapEndian: */    false
     62    );
    4763
    4864    RTTESTI_CHECK_MSG(PDMAUDIOPCMPROPS_F2B(&s_Cfg441StereoS16, 1) == 4,
    4965                      ("got %x, expected 4\n", PDMAUDIOPCMPROPS_F2B(&s_Cfg441StereoS16, 1)));
     66    RTTESTI_CHECK_MSG(PDMAUDIOPCMPROPS_F2B(&s_Cfg441StereoU16, 1) == 4,
     67                      ("got %x, expected 4\n", PDMAUDIOPCMPROPS_F2B(&s_Cfg441StereoU16, 1)));
     68    RTTESTI_CHECK_MSG(PDMAUDIOPCMPROPS_F2B(&s_Cfg441StereoU32, 1) == 8,
     69                      ("got %x, expected 4\n", PDMAUDIOPCMPROPS_F2B(&s_Cfg441StereoU32, 1)));
    5070
    5171    uint32_t u32;
     
    5373                      ("cb=%RU32\n", u32));
    5474    RTTESTI_CHECK_MSG((u32 = DrvAudioHlpFramesToBytes(&s_Cfg441StereoS16, 2)) == 2 * 2 * 2,
     75                      ("cb=%RU32\n", u32));
     76    RTTESTI_CHECK_MSG((u32 = DrvAudioHlpFramesToBytes(&s_Cfg441StereoS16, 1)) == 4,
     77                      ("cb=%RU32\n", u32));
     78    RTTESTI_CHECK_MSG((u32 = DrvAudioHlpFramesToBytes(&s_Cfg441StereoU16, 1)) == 4,
     79                      ("cb=%RU32\n", u32));
     80    RTTESTI_CHECK_MSG((u32 = DrvAudioHlpFramesToBytes(&s_Cfg441StereoU32, 1)) == 8,
     81                      ("cb=%RU32\n", u32));
     82
     83    RTTESTI_CHECK_MSG((u32 = DrvAudioHlpBytesToFrames(4, &s_Cfg441StereoS16)) == 1,
     84                      ("cb=%RU32\n", u32));
     85    RTTESTI_CHECK_MSG((u32 = DrvAudioHlpBytesToFrames(4, &s_Cfg441StereoU16)) == 1,
     86                      ("cb=%RU32\n", u32));
     87    RTTESTI_CHECK_MSG((u32 = DrvAudioHlpBytesToFrames(8, &s_Cfg441StereoU32)) == 1,
    5588                      ("cb=%RU32\n", u32));
    5689
     
    6295    RTTESTI_CHECK_MSG((u64 = DrvAudioHlpBytesToMilli(&s_Cfg441StereoS16, 44100 * 2 * 2)) == RT_MS_1SEC,
    6396                      ("ms=%RU64\n", u64));
    64 
    6597
    6698    RTTESTI_CHECK_MSG((u64 = DrvAudioHlpFramesToNano(&s_Cfg441StereoS16, 44100)) == RT_NS_1SEC, ("ns=%RU64\n", u64));
     
    73105    RTTESTI_CHECK_MSG((u64 = DrvAudioHlpFramesToMilli(&s_Cfg441StereoS16,   255)) == 5,          ("ms=%RU64\n", u64));
    74106
     107    /* DrvAudioHlpClearBuf: */
     108    uint8_t *pbPage;
     109    int rc = RTTestGuardedAlloc(hTest, PAGE_SIZE, 0, false /*fHead*/, (void **)&pbPage);
     110    RTTESTI_CHECK_RC_OK_RETV(rc);
     111
     112    memset(pbPage, 0x42, PAGE_SIZE);
     113    DrvAudioHlpClearBuf(&s_Cfg441StereoS16, pbPage, PAGE_SIZE, PAGE_SIZE / 4);
     114    RTTESTI_CHECK(ASMMemIsZero(pbPage, PAGE_SIZE));
     115
     116    memset(pbPage, 0x42, PAGE_SIZE);
     117    DrvAudioHlpClearBuf(&s_Cfg441StereoU16, pbPage, PAGE_SIZE, PAGE_SIZE / 4);
     118    for (uint32_t off = 0; off < PAGE_SIZE; off += 2)
     119        RTTESTI_CHECK_MSG(pbPage[off] == 0x80 && pbPage[off + 1] == 0, ("off=%#x: %#x %x\n", off, pbPage[off], pbPage[off + 1]));
     120
     121    memset(pbPage, 0x42, PAGE_SIZE);
     122    DrvAudioHlpClearBuf(&s_Cfg441StereoU32, pbPage, PAGE_SIZE, PAGE_SIZE / 8);
     123    for (uint32_t off = 0; off < PAGE_SIZE; off += 4)
     124        RTTESTI_CHECK(pbPage[off] == 0x80 && pbPage[off + 1] == 0 && pbPage[off + 2] == 0 && pbPage[off + 3] == 0);
     125
     126
     127    RTTestDisableAssertions(hTest);
     128    memset(pbPage, 0x42, PAGE_SIZE);
     129    DrvAudioHlpClearBuf(&s_Cfg441StereoS16, pbPage, PAGE_SIZE, PAGE_SIZE); /* should adjust down the frame count. */
     130    RTTESTI_CHECK(ASMMemIsZero(pbPage, PAGE_SIZE));
     131
     132    memset(pbPage, 0x42, PAGE_SIZE);
     133    DrvAudioHlpClearBuf(&s_Cfg441StereoU16, pbPage, PAGE_SIZE, PAGE_SIZE); /* should adjust down the frame count. */
     134    for (uint32_t off = 0; off < PAGE_SIZE; off += 2)
     135        RTTESTI_CHECK_MSG(pbPage[off] == 0x80 && pbPage[off + 1] == 0, ("off=%#x: %#x %x\n", off, pbPage[off], pbPage[off + 1]));
     136
     137    memset(pbPage, 0x42, PAGE_SIZE);
     138    DrvAudioHlpClearBuf(&s_Cfg441StereoU32, pbPage, PAGE_SIZE, PAGE_SIZE); /* should adjust down the frame count. */
     139    for (uint32_t off = 0; off < PAGE_SIZE; off += 4)
     140        RTTESTI_CHECK(pbPage[off] == 0x80 && pbPage[off + 1] == 0 && pbPage[off + 2] == 0 && pbPage[off + 3] == 0);
     141    RTTestRestoreAssertions(hTest);
     142
     143    RTTestGuardedFree(hTest, pbPage);
    75144}
    76145
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