VirtualBox

Ignore:
Timestamp:
May 28, 2021 8:23:42 AM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
144681
Message:

AudioMixer: Removed AudioMixBufWriteAt, eliminated last non-testcase AudioMixBufWriteCirc use. Fixed testcase buffer clearing failure. bugref:9890

File:
1 edited

Legend:

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

    r89330 r89332  
    159159    PDMAudioPropsClearBuffer(&Cfg441StereoU16, pbPage, PAGE_SIZE, PAGE_SIZE / 4);
    160160    for (uint32_t off = 0; off < PAGE_SIZE; off += 2)
    161         RTTESTI_CHECK_MSG(pbPage[off] == 0x80 && pbPage[off + 1] == 0, ("off=%#x: %#x %x\n", off, pbPage[off], pbPage[off + 1]));
     161        RTTESTI_CHECK_MSG(pbPage[off] == 0 && pbPage[off + 1] == 0x80, ("off=%#x: %#x %x\n", off, pbPage[off], pbPage[off + 1]));
    162162
    163163    memset(pbPage, 0x42, PAGE_SIZE);
    164164    PDMAudioPropsClearBuffer(&Cfg441StereoU32, pbPage, PAGE_SIZE, PAGE_SIZE / 8);
    165165    for (uint32_t off = 0; off < PAGE_SIZE; off += 4)
    166         RTTESTI_CHECK(pbPage[off] == 0x80 && pbPage[off + 1] == 0 && pbPage[off + 2] == 0 && pbPage[off + 3] == 0);
     166        RTTESTI_CHECK(pbPage[off] == 0 && pbPage[off + 1] == 0 && pbPage[off + 2] == 0 && pbPage[off + 3] == 0x80);
    167167
    168168
     
    175175    PDMAudioPropsClearBuffer(&Cfg441StereoU16, pbPage, PAGE_SIZE, PAGE_SIZE); /* should adjust down the frame count. */
    176176    for (uint32_t off = 0; off < PAGE_SIZE; off += 2)
    177         RTTESTI_CHECK_MSG(pbPage[off] == 0x80 && pbPage[off + 1] == 0, ("off=%#x: %#x %x\n", off, pbPage[off], pbPage[off + 1]));
     177        RTTESTI_CHECK_MSG(pbPage[off] == 0 && pbPage[off + 1] == 0x80, ("off=%#x: %#x %x\n", off, pbPage[off], pbPage[off + 1]));
    178178
    179179    memset(pbPage, 0x42, PAGE_SIZE);
    180180    PDMAudioPropsClearBuffer(&Cfg441StereoU32, pbPage, PAGE_SIZE, PAGE_SIZE); /* should adjust down the frame count. */
    181181    for (uint32_t off = 0; off < PAGE_SIZE; off += 4)
    182         RTTESTI_CHECK(pbPage[off] == 0x80 && pbPage[off + 1] == 0 && pbPage[off + 2] == 0 && pbPage[off + 3] == 0);
     182        RTTESTI_CHECK(pbPage[off] == 0 && pbPage[off + 1] == 0 && pbPage[off + 2] == 0 && pbPage[off + 3] == 0x80);
    183183    RTTestRestoreAssertions(hTest);
    184184
     
    187187
    188188
    189 static int tstSingle(RTTEST hTest)
     189static void tstSimple(RTTEST hTest)
    190190{
    191     RTTestSub(hTest, "Single buffer");
     191    RTTestSub(hTest, "Simple");
    192192
    193193    /* 44100Hz, 2 Channels, S16 */
     
    208208     */
    209209    AUDIOMIXBUF mb;
    210     RTTESTI_CHECK_RC_OK(AudioMixBufInit(&mb, "Single", &config, cBufSize));
     210    RTTESTI_CHECK_RC_OK_RETV(AudioMixBufInit(&mb, "Single", &config, cBufSize));
    211211    RTTESTI_CHECK(AudioMixBufSize(&mb) == cBufSize);
    212212    RTTESTI_CHECK(AUDIOMIXBUF_B2F(&mb, AudioMixBufSizeBytes(&mb)) == cBufSize);
     
    215215    RTTESTI_CHECK(AUDIOMIXBUF_F2B(&mb, AudioMixBufFree(&mb)) == AudioMixBufFreeBytes(&mb));
    216216
    217     /*
    218      * Absolute writes.
     217    AUDIOMIXBUFWRITESTATE WrState;
     218    RTTESTI_CHECK_RC(AudioMixBufInitWriteState(&mb, &WrState, &config), VINF_SUCCESS);
     219
     220    /*
     221     * A few writes (used to be the weird absolute writes).
    219222     */
    220223    uint32_t cFramesRead  = 0, cFramesWritten = 0, cFramesWrittenAbs = 0;
    221     int8_t  aFrames8 [2] = { 0x12, 0x34 };
    222224    int16_t aFrames16[2] = { 0xAA, 0xBB };
    223225    int32_t aFrames32[2] = { 0xCC, 0xDD };
    224226
    225     RTTESTI_CHECK_RC_OK(AudioMixBufWriteAt(&mb, 0 /* Offset */, &aFrames8, sizeof(aFrames8), &cFramesWritten));
    226     RTTESTI_CHECK(cFramesWritten == 0 /* Frames */);
    227227    RTTESTI_CHECK(AudioMixBufUsed(&mb) == 0);
    228228
    229     RTTESTI_CHECK_RC_OK(AudioMixBufWriteAt(&mb, 0 /* Offset */, &aFrames16, sizeof(aFrames16), &cFramesWritten));
     229    AudioMixBufWrite(&mb, &WrState, &aFrames16, sizeof(aFrames16), 0 /*offDstFrame*/, cBufSize / 4, &cFramesWritten);
    230230    RTTESTI_CHECK(cFramesWritten == 1 /* Frames */);
     231    RTTESTI_CHECK(AudioMixBufUsed(&mb) == 0);
     232    AudioMixBufCommit(&mb, cFramesWritten);
    231233    RTTESTI_CHECK(AudioMixBufUsed(&mb) == 1);
    232 
    233     RTTESTI_CHECK_RC_OK(AudioMixBufWriteAt(&mb, 2 /* Offset */, &aFrames32, sizeof(aFrames32), &cFramesWritten));
     234    RTTESTI_CHECK(AudioMixBufReadPos(&mb) == 0);
     235    RTTESTI_CHECK(AudioMixBufWritePos(&mb) == 1);
     236
     237    AudioMixBufWrite(&mb, &WrState, &aFrames32, sizeof(aFrames32), 0 /*offDstFrame*/, cBufSize / 4, &cFramesWritten);
    234238    RTTESTI_CHECK(cFramesWritten == 2 /* Frames */);
    235     RTTESTI_CHECK(AudioMixBufUsed(&mb) == 2);
    236 
    237     /* Beyond buffer. */
    238     RTTESTI_CHECK_RC(AudioMixBufWriteAt(&mb, AudioMixBufSize(&mb) + 1, &aFrames16, sizeof(aFrames16),
    239                                         &cFramesWritten), VERR_BUFFER_OVERFLOW);
    240 
    241     /* Offset wrap-around: When writing as much (or more) frames the mixing buffer can hold. */
    242     uint32_t  cbSamples = cBufSize * sizeof(int16_t) * 2 /* Channels */;
    243     RTTESTI_CHECK(cbSamples);
     239    AudioMixBufCommit(&mb, cFramesWritten);
     240    RTTESTI_CHECK(AudioMixBufUsed(&mb) == 3);
     241    RTTESTI_CHECK(AudioMixBufReadPos(&mb) == 0);
     242    RTTESTI_CHECK(AudioMixBufWritePos(&mb) == 3);
     243
     244    /* Pretend we read the frames.*/
     245    AudioMixBufAdvance(&mb, 3);
     246    RTTESTI_CHECK(AudioMixBufUsed(&mb) == 0);
     247    RTTESTI_CHECK(AudioMixBufReadPos(&mb) == 3);
     248    RTTESTI_CHECK(AudioMixBufWritePos(&mb) == 3);
     249
     250    /* Fill up the buffer completely and check wraps. */
     251
     252    uint32_t  cbSamples = PDMAudioPropsFramesToBytes(&config, cBufSize);
    244253    uint16_t *paSamples = (uint16_t *)RTMemAlloc(cbSamples);
    245     RTTESTI_CHECK(paSamples);
    246     RTTESTI_CHECK_RC_OK(AudioMixBufWriteAt(&mb, 0 /* Offset */, paSamples, cbSamples, &cFramesWritten));
    247     RTTESTI_CHECK(cFramesWritten == cBufSize /* Frames */);
     254    RTTESTI_CHECK_RETV(paSamples);
     255    AudioMixBufWrite(&mb, &WrState, paSamples, cbSamples, 0 /*offDstFrame*/, cBufSize, &cFramesWritten);
     256    RTTESTI_CHECK(cFramesWritten == cBufSize);
     257    AudioMixBufCommit(&mb, cFramesWritten);
    248258    RTTESTI_CHECK(AudioMixBufUsed(&mb) == cBufSize);
    249     RTTESTI_CHECK(AudioMixBufReadPos(&mb) == 0);
    250     RTTESTI_CHECK(AudioMixBufWritePos(&mb) == 0);
     259    RTTESTI_CHECK(AudioMixBufReadPos(&mb) == 3);
     260    RTTESTI_CHECK(AudioMixBufWritePos(&mb) == 3);
    251261    RTMemFree(paSamples);
    252262    cbSamples = 0;
     
    256266     */
    257267    AudioMixBufReset(&mb);
    258 
    259     RTTESTI_CHECK_RC_OK(AudioMixBufWriteAt(&mb, 2 /* Offset */, &aFrames32, sizeof(aFrames32), &cFramesWritten));
    260     RTTESTI_CHECK(cFramesWritten == 2 /* Frames */);
    261     RTTESTI_CHECK(AudioMixBufUsed(&mb) == 2);
    262268
    263269    cFramesWrittenAbs = AudioMixBufUsed(&mb);
     
    303309
    304310    AudioMixBufDestroy(&mb);
    305 
    306     return RTTestSubErrorCount(hTest) ? VERR_GENERAL_FAILURE : VINF_SUCCESS;
    307311}
    308312
     
    990994
    991995    tstBasics(hTest);
    992     tstSingle(hTest);
     996    tstSimple(hTest);
    993997    //tstParentChild(hTest);
    994998    //tstConversion8(hTest);
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette