VirtualBox

Changeset 54482 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Feb 25, 2015 11:40:56 AM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
98590
Message:

Audio/AudioMixBuffer: Bugfixes, updated testcase.

Location:
trunk/src/VBox/Devices/Audio
Files:
2 edited

Legend:

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

    r54460 r54482  
    1919#include <iprt/asm-math.h>
    2020#include <iprt/assert.h>
    21 #ifdef DEBUG_andy
     21#ifdef DEBUG_DUMP_PCM_DATA
    2222# include <iprt/file.h>
    2323#endif
    2424#include <iprt/mem.h>
    2525#include <iprt/string.h> /* For RT_BZERO. */
     26
     27#ifdef LOG_GROUP
     28# undef LOG_GROUP
     29#endif
     30#define LOG_GROUP LOG_GROUP_DEV_AUDIO
     31#include <VBox/log.h>
     32
    2633#ifdef TESTCASE
     34# define LOG_ENABLED
    2735# include <iprt/stream.h>
    2836#endif
     
    3139#include "AudioMixBuffer.h"
    3240
    33 #ifdef LOG_GROUP
    34 # undef LOG_GROUP
    35 #endif
    3641#if 0
    3742# define AUDMIXBUF_LOG(x) LogFlowFunc(x)
    38 # define LOG_GROUP LOG_GROUP_DEV_AUDIO
    39 # include <VBox/log.h>
    4043#else
    41 # define AUDMIXBUF_LOG(x) do {} while (0)
     44# if defined(TESTCASE)
     45#  define AUDMIXBUF_LOG(x) LogFunc(x)
     46# else
     47#  define AUDMIXBUF_LOG(x) do {} while (0)
     48# endif
    4249#endif
    4350
     
    126133                       pIter->pszName, pIter->cMixed, pIter->cMixed - cSamplesToClear));
    127134
    128         Assert(pIter->cMixed >= cSamplesToClear);
    129         pIter->cMixed -= cSamplesToClear;
     135        pIter->cMixed -= RT_MIN(pIter->cMixed, cSamplesToClear);
    130136        pIter->offReadWrite = 0;
    131137    }
     
    376382        while (paDst < paDstEnd) \
    377383        { \
    378             if (paSrc >= paSrcEnd) \
    379                 break; \
    380             \
    381384            while (pRate->srcOffset <= (pRate->dstOffset >> 32)) \
    382385            { \
    383                 AUDMIXBUF_MACRO_LOG(("foo1\n")); \
    384386                samLast = *paSrc++; \
    385387                pRate->srcOffset++; \
     
    387389                if (paSrc >= paSrcEnd) \
    388390                    break; \
    389                     AUDMIXBUF_MACRO_LOG(("foo1.1\n")); \
    390391            } \
    391             AUDMIXBUF_MACRO_LOG(("foo2\n")); \
    392392            \
    393393            samCur = *paSrc; \
     
    410410            \
    411411            AUDMIXBUF_MACRO_LOG(("\t\tpRate->dstOffset=%RU64\n", pRate->dstOffset)); \
     412            \
     413            if (paSrc >= paSrcEnd) \
     414                break; \
     415            \
    412416        } \
    413417        \
     
    903907{
    904908    AssertPtrReturn(pMixBuf, 0);
     909
     910    AUDMIXBUF_LOG(("%s: cProcessed=%RU32\n", pMixBuf->pszName, pMixBuf->cProcessed));
    905911    return pMixBuf->cProcessed;
    906912}
     
    970976        return VINF_SUCCESS;
    971977
    972     uint32_t cToRead = RT_MIN(AUDIOMIXBUF_B2S(pMixBuf, cbBuf),
    973                               pMixBuf->cProcessed);
     978    uint32_t cToRead = RT_MIN(AUDIOMIXBUF_B2S(pMixBuf, cbBuf), pMixBuf->cProcessed);
    974979
    975980    AUDMIXBUF_LOG(("%s: pvBuf=%p, cbBuf=%zu (%RU32 samples), cToRead=%RU32\n",
    976                    pMixBuf->pszName, pvBuf,
    977                    cbBuf, AUDIOMIXBUF_B2S(pMixBuf, cbBuf), cToRead));
     981                   pMixBuf->pszName, pvBuf, cbBuf, AUDIOMIXBUF_B2S(pMixBuf, cbBuf), cToRead));
    978982
    979983    if (!cToRead)
     
    11671171    uint32_t cWritten;
    11681172
    1169 #if 0
     1173#ifdef DEBUG_DUMP_PCM_DATA
    11701174    RTFILE fh;
    11711175    rc = RTFileOpen(&fh, "c:\\temp\\test_writeat.pcm",
     
    12851289    }
    12861290
    1287 #if 0
     1291#ifdef DEBUG_DUMP_PCM_DATA
    12881292        RTFILE fh;
    12891293        RTFileOpen(&fh, "c:\\temp\\test_writeex.pcm",
  • trunk/src/VBox/Devices/Audio/testcase/tstAudioMixBuffer.cpp

    r54460 r54482  
    2323#include <iprt/initterm.h>
    2424#include <iprt/mem.h>
     25#include <iprt/rand.h>
    2526#include <iprt/stream.h>
    2627#include <iprt/string.h>
     
    152153    RTTESTI_CHECK_RC_OK(audioMixBufInit(&parent, "Parent", &props, cBufSize));
    153154
    154     PDMAUDIOSTREAMCFG cfg_c1 = /* Downmixing */
     155    PDMAUDIOSTREAMCFG cfg_c1 = /* Upmixing to parent */
    155156    {
    156157        22100,                   /* Hz */
     
    167168    RTTESTI_CHECK_RC_OK(audioMixBufLinkTo(&child1, &parent));
    168169
    169     PDMAUDIOSTREAMCFG cfg_c2 = /* Upmixing */
     170    PDMAUDIOSTREAMCFG cfg_c2 = /* Downmixing to parent */
    170171    {
    171172        48000,                   /* Hz */
     
    187188    size_t cbBuf = _1K;
    188189    char pvBuf[_1K];
    189     int16_t samples16[32] = { 0xAA, 0xBB };
    190     uint32_t read , written, proc, mixed;
    191 
     190    int16_t samples[32] = { 0xAA, 0xBB };
     191    uint32_t free, read , written, proc, mixed, temp;
     192
     193    uint32_t cChild1Free     = cBufSize;
     194    uint32_t cChild1Mixed    = 0;
    192195    uint32_t cSamplesParent1 = 16;
    193196    uint32_t cSamplesChild1  = 16;
    194     uint32_t cSamplesParent2 = 32;
     197
     198    uint32_t cChild2Free     = cBufSize;
     199    uint32_t cChild2Mixed    = 0;
     200    uint32_t cSamplesParent2 = 16;
    195201    uint32_t cSamplesChild2  = 16;
    196202
    197     for (int i = 0; i < 32; i++)
    198     {
    199         RTTESTI_CHECK_RC_OK(audioMixBufWriteAt(&child1, 0, &samples16, sizeof(samples16), &written));
    200         RTTESTI_CHECK(written == cSamplesChild1);
    201         RTTESTI_CHECK_RC_OK(audioMixBufMixToParent(&child1, written, &mixed));
    202         RTTESTI_CHECK(mixed == cSamplesChild1);
    203 
    204         RTTESTI_CHECK_RC_OK(audioMixBufReadCirc(&parent, pvBuf, cbBuf, &read));
    205         RTTESTI_CHECK(read == 31);
    206 
    207         RTTESTI_CHECK_RC_OK(audioMixBufWriteAt(&child2, 0, &samples16, sizeof(samples16), &written));
    208         RTTESTI_CHECK(written == cSamplesChild2);
    209         RTTESTI_CHECK_RC_OK(audioMixBufMixToParent(&child2, written, &mixed));
    210         RTTESTI_CHECK(mixed == cSamplesChild2);
    211 
    212         RTTESTI_CHECK_RC_OK(audioMixBufReadCirc(&parent, pvBuf, cbBuf, &read));
    213         RTTESTI_CHECK(read == 15);
     203    uint32_t t = RTRandU32() % 64;
     204
     205    for (uint32_t i = 0; i < t; i++)
     206    {
     207        RTTestPrintf(hTest, RTTESTLVL_DEBUG, "i=%RU32\n", i);
     208        RTTESTI_CHECK_RC_OK_BREAK(audioMixBufWriteAt(&child1, 0, &samples, sizeof(samples), &written));
     209        RTTESTI_CHECK_MSG_BREAK(written == cSamplesChild1, ("Child1: Expected %RU32 written samples, got %RU32\n", cSamplesChild1, written));
     210        RTTESTI_CHECK_RC_OK_BREAK(audioMixBufMixToParent(&child1, written, &mixed));
     211        temp = audioMixBufProcessed(&parent) - audioMixBufMixed(&child2);
     212        RTTESTI_CHECK_MSG_BREAK(audioMixBufMixed(&child1) == temp, ("Child1: Expected %RU32 mixed samples, got %RU32\n", audioMixBufMixed(&child1), temp));
     213
     214        RTTESTI_CHECK_RC_OK_BREAK(audioMixBufWriteAt(&child2, 0, &samples, sizeof(samples), &written));
     215        RTTESTI_CHECK_MSG_BREAK(written == cSamplesChild2, ("Child2: Expected %RU32 written samples, got %RU32\n", cSamplesChild2, written));
     216        RTTESTI_CHECK_RC_OK_BREAK(audioMixBufMixToParent(&child2, written, &mixed));
     217        temp = audioMixBufProcessed(&parent) - audioMixBufMixed(&child1);
     218        RTTESTI_CHECK_MSG_BREAK(audioMixBufMixed(&child2) == temp, ("Child2: Expected %RU32 mixed samples, got %RU32\n", audioMixBufMixed(&child2), temp));
     219    }
     220
     221    RTTESTI_CHECK(audioMixBufProcessed(&parent) == audioMixBufMixed(&child1) + audioMixBufMixed(&child2));
     222
     223    for (;;)
     224    {
     225        RTTESTI_CHECK_RC_OK_BREAK(audioMixBufReadCirc(&parent, pvBuf, cbBuf, &read));
     226        if (!read)
     227            break;
     228        audioMixBufFinish(&parent, read);
    214229    }
    215230
    216231    RTTESTI_CHECK(audioMixBufProcessed(&parent) == 0);
     232    RTTESTI_CHECK(audioMixBufMixed(&child1) == 0);
     233    RTTESTI_CHECK(audioMixBufMixed(&child2) == 0);
    217234
    218235    return RTTestSubErrorCount(hTest) ? VERR_GENERAL_FAILURE : VINF_SUCCESS;
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