VirtualBox

Ignore:
Timestamp:
Feb 6, 2017 2:13:36 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
113296
Message:

Audio: More abstraction for the backends: Now the backend stream's data is completely separate from the audio connector interface. That way the backends cannot mess with the audio connector's data (e.g. mixing buffers and friends) anymore, and those are forced to use the audio connector API as meant now. Needs more testing, partly work in progress.

File:
1 edited

Legend:

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

    r63362 r65624  
    4646        PDMAUDIODIR_OUT,
    4747        { PDMAUDIOPLAYBACKDEST_UNKNOWN },
    48         44100,                    /* Hz */
    49         2                         /* Channels */,
    50         PDMAUDIOFMT_S16           /* Format */,
    51         PDMAUDIOENDIANNESS_LITTLE /* ENDIANNESS */
    52     };
    53     PDMAUDIOPCMPROPS props;
    54 
    55     int rc = DrvAudioHlpStreamCfgToProps(&config, &props);
    56     AssertRC(rc);
     48        { 16,                       /* Bits */
     49          true,                     /* Signed */
     50          1,                        /* Shift */
     51          2,                        /* Channels */
     52          44100,                    /* Hz */
     53          false                     /* Swap Endian */ },
     54        0 /* cSampleBufferSize */
     55    };
     56
     57    RTTESTI_CHECK(DrvAudioHlpStreamCfgIsValid(&config));
    5758
    5859    uint32_t cBufSize = _1K;
     
    6263     */
    6364    PDMAUDIOMIXBUF mb;
    64     RTTESTI_CHECK_RC_OK(AudioMixBufInit(&mb, "Single", &props, cBufSize));
     65    RTTESTI_CHECK_RC_OK(AudioMixBufInit(&mb, "Single", &config.Props, cBufSize));
    6566    RTTESTI_CHECK(AudioMixBufSize(&mb) == cBufSize);
    6667    RTTESTI_CHECK(AUDIOMIXBUF_B2S(&mb, AudioMixBufSizeBytes(&mb)) == cBufSize);
     
    149150        PDMAUDIODIR_OUT,
    150151        { PDMAUDIOPLAYBACKDEST_UNKNOWN },
    151         44100,                    /* Hz */
    152         2                         /* Channels */,
    153         PDMAUDIOFMT_S16           /* Format */,
    154         PDMAUDIOENDIANNESS_LITTLE /* ENDIANNESS */
    155     };
    156 
    157     PDMAUDIOPCMPROPS props;
    158     int rc = DrvAudioHlpStreamCfgToProps(&cfg_p, &props);
    159     AssertRC(rc);
     152        { 16,                       /* Bits */
     153          true,                     /* Signed */
     154          1,                        /* Shift */
     155          2,                        /* Channels */
     156          44100,                    /* Hz */
     157          false                     /* Swap Endian */ },
     158        0 /* cSampleBufferSize */
     159    };
     160
     161    RTTESTI_CHECK(DrvAudioHlpStreamCfgIsValid(&cfg_p));
    160162
    161163    PDMAUDIOMIXBUF parent;
    162     RTTESTI_CHECK_RC_OK(AudioMixBufInit(&parent, "Parent", &props, cBufSize));
     164    RTTESTI_CHECK_RC_OK(AudioMixBufInit(&parent, "Parent", &cfg_p.Props, cBufSize));
    163165
    164166    PDMAUDIOSTREAMCFG cfg_c1 = /* Upmixing to parent */
     
    167169        PDMAUDIODIR_OUT,
    168170        { PDMAUDIOPLAYBACKDEST_UNKNOWN },
    169         22050,                    /* Hz */
    170         2                         /* Channels */,
    171         PDMAUDIOFMT_S16           /* Format */,
    172         PDMAUDIOENDIANNESS_LITTLE /* ENDIANNESS */
    173     };
    174 
    175     rc = DrvAudioHlpStreamCfgToProps(&cfg_c1, &props);
    176     AssertRC(rc);
     171        { 16,                       /* Bits */
     172          true,                     /* Signed */
     173          1,                        /* Shift */
     174          2,                        /* Channels */
     175          22050,                    /* Hz */
     176          false                     /* Swap Endian */ },
     177        0 /* cSampleBufferSize */
     178    };
     179
     180    RTTESTI_CHECK(DrvAudioHlpStreamCfgIsValid(&cfg_c1));
    177181
    178182    PDMAUDIOMIXBUF child1;
    179     RTTESTI_CHECK_RC_OK(AudioMixBufInit(&child1, "Child1", &props, cBufSize));
     183    RTTESTI_CHECK_RC_OK(AudioMixBufInit(&child1, "Child1", &cfg_c1.Props, cBufSize));
    180184    RTTESTI_CHECK_RC_OK(AudioMixBufLinkTo(&child1, &parent));
    181185
     
    185189        PDMAUDIODIR_OUT,
    186190        { PDMAUDIOPLAYBACKDEST_UNKNOWN },
    187         48000,                    /* Hz */
    188         2                         /* Channels */,
    189         PDMAUDIOFMT_S16           /* Format */,
    190         PDMAUDIOENDIANNESS_LITTLE /* ENDIANNESS */
    191     };
    192 
    193     rc = DrvAudioHlpStreamCfgToProps(&cfg_c2, &props);
    194     AssertRC(rc);
     191        { 16,                       /* Bits */
     192          true,                     /* Signed */
     193          1,                        /* Shift */
     194          2,                        /* Channels */
     195          48000,                    /* Hz */
     196          false                     /* Swap Endian */ },
     197        0 /* cSampleBufferSize */
     198    };
     199
     200    RTTESTI_CHECK(DrvAudioHlpStreamCfgIsValid(&cfg_c2));
    195201
    196202    PDMAUDIOMIXBUF child2;
    197     RTTESTI_CHECK_RC_OK(AudioMixBufInit(&child2, "Child2", &props, cBufSize));
     203    RTTESTI_CHECK_RC_OK(AudioMixBufInit(&child2, "Child2", &cfg_c2.Props, cBufSize));
    198204    RTTESTI_CHECK_RC_OK(AudioMixBufLinkTo(&child2, &parent));
    199205
     
    262268    unsigned         i;
    263269    uint32_t         cBufSize = 256;
    264     PDMAUDIOPCMPROPS props;
    265270
    266271    RTTestSubF(hTest, "Sample conversion (U8)");
     
    271276        PDMAUDIODIR_OUT,
    272277        { PDMAUDIOPLAYBACKDEST_UNKNOWN },
    273         44100,                    /* Hz */
    274         1                         /* Channels */,
    275         PDMAUDIOFMT_U8            /* Format */,
    276         PDMAUDIOENDIANNESS_LITTLE /* ENDIANNESS */
    277     };
    278 
    279     int rc = DrvAudioHlpStreamCfgToProps(&cfg_p, &props);
    280     AssertRC(rc);
     278        { 8,                        /* Bits */
     279          false,                    /* Signed */
     280          1,                        /* Shift */
     281          1,                        /* Channels */
     282          44100,                    /* Hz */
     283          false                     /* Swap Endian */ },
     284        0 /* cSampleBufferSize */
     285    };
     286
     287    RTTESTI_CHECK(DrvAudioHlpStreamCfgIsValid(&cfg_p));
    281288
    282289    PDMAUDIOMIXBUF parent;
    283     RTTESTI_CHECK_RC_OK(AudioMixBufInit(&parent, "Parent", &props, cBufSize));
     290    RTTESTI_CHECK_RC_OK(AudioMixBufInit(&parent, "Parent", &cfg_p.Props, cBufSize));
    284291
    285292    /* Child uses half the sample rate; that ensures the mixing engine can't
     
    295302        PDMAUDIODIR_OUT,
    296303        { PDMAUDIOPLAYBACKDEST_UNKNOWN },
    297         22050,                    /* Hz */
    298         1                         /* Channels */,
    299         PDMAUDIOFMT_U8            /* Format */,
    300         PDMAUDIOENDIANNESS_LITTLE /* ENDIANNESS */
    301     };
    302 
    303     rc = DrvAudioHlpStreamCfgToProps(&cfg_c, &props);
    304     AssertRC(rc);
     304        { 8,                        /* Bits */
     305          false,                    /* Signed */
     306          1,                        /* Shift */
     307          1,                        /* Channels */
     308          22050,                    /* Hz */
     309          false                     /* Swap Endian */ },
     310        0 /* cSampleBufferSize */
     311    };
     312
     313    RTTESTI_CHECK(DrvAudioHlpStreamCfgIsValid(&cfg_c));
    305314
    306315    PDMAUDIOMIXBUF child;
    307     RTTESTI_CHECK_RC_OK(AudioMixBufInit(&child, "Child", &props, cBufSize));
     316    RTTESTI_CHECK_RC_OK(AudioMixBufInit(&child, "Child", &cfg_c.Props, cBufSize));
    308317    RTTESTI_CHECK_RC_OK(AudioMixBufLinkTo(&child, &parent));
    309318
     
    324333
    325334    /**** 8-bit unsigned samples ****/
    326     RTTestPrintf(hTest, RTTESTLVL_DEBUG, "Conversion test %uHz %uch 8-bit\n", cfg_c.uHz, cfg_c.cChannels);
     335    RTTestPrintf(hTest, RTTESTLVL_DEBUG, "Conversion test %uHz %uch 8-bit\n", cfg_c.Props.uHz, cfg_c.Props.cChannels);
    327336    RTTESTI_CHECK_RC_OK(AudioMixBufWriteCirc(&child, &samples, sizeof(samples), &cSamplesWritten));
    328337    RTTESTI_CHECK_MSG(cSamplesWritten == cSamplesChild, ("Child: Expected %RU32 written samples, got %RU32\n", cSamplesChild, cSamplesWritten));
     
    370379    unsigned         i;
    371380    uint32_t         cBufSize = 256;
    372     PDMAUDIOPCMPROPS props;
    373381
    374382    RTTestSubF(hTest, "Sample conversion (S16)");
     
    379387        PDMAUDIODIR_OUT,
    380388        { PDMAUDIOPLAYBACKDEST_UNKNOWN },
    381         44100,                    /* Hz */
    382         1                         /* Channels */,
    383         PDMAUDIOFMT_S16           /* Format */,
    384         PDMAUDIOENDIANNESS_LITTLE /* ENDIANNESS */
    385     };
    386 
    387     int rc = DrvAudioHlpStreamCfgToProps(&cfg_p, &props);
    388     AssertRC(rc);
     389        { 16,                       /* Bits */
     390          true,                     /* Signed */
     391          1,                        /* Shift */
     392          1,                        /* Channels */
     393          44100,                    /* Hz */
     394          false                     /* Swap Endian */ },
     395        0 /* cSampleBufferSize */
     396    };
     397
     398    RTTESTI_CHECK(DrvAudioHlpStreamCfgIsValid(&cfg_p));
    389399
    390400    PDMAUDIOMIXBUF parent;
    391     RTTESTI_CHECK_RC_OK(AudioMixBufInit(&parent, "Parent", &props, cBufSize));
     401    RTTESTI_CHECK_RC_OK(AudioMixBufInit(&parent, "Parent", &cfg_p.Props, cBufSize));
    392402
    393403    PDMAUDIOSTREAMCFG cfg_c =   /* Upmixing to parent */
     
    396406        PDMAUDIODIR_OUT,
    397407        { PDMAUDIOPLAYBACKDEST_UNKNOWN },
    398         22050,                    /* Hz */
    399         1                         /* Channels */,
    400         PDMAUDIOFMT_S16               /* Format */,
    401         PDMAUDIOENDIANNESS_LITTLE /* ENDIANNESS */
    402     };
    403 
    404     rc = DrvAudioHlpStreamCfgToProps(&cfg_c, &props);
    405     AssertRC(rc);
     408        { 16,                       /* Bits */
     409          true,                     /* Signed */
     410          1,                        /* Shift */
     411          1,                        /* Channels */
     412          22050,                    /* Hz */
     413          false                     /* Swap Endian */ },
     414        0 /* cSampleBufferSize */
     415    };
     416
     417    RTTESTI_CHECK(DrvAudioHlpStreamCfgIsValid(&cfg_c));
    406418
    407419    PDMAUDIOMIXBUF child;
    408     RTTESTI_CHECK_RC_OK(AudioMixBufInit(&child, "Child", &props, cBufSize));
     420    RTTESTI_CHECK_RC_OK(AudioMixBufInit(&child, "Child", &cfg_c.Props, cBufSize));
    409421    RTTESTI_CHECK_RC_OK(AudioMixBufLinkTo(&child, &parent));
    410422
     
    425437
    426438    /**** 16-bit signed samples ****/
    427     RTTestPrintf(hTest, RTTESTLVL_DEBUG, "Conversion test %uHz %uch 16-bit\n", cfg_c.uHz, cfg_c.cChannels);
     439    RTTestPrintf(hTest, RTTESTLVL_DEBUG, "Conversion test %uHz %uch 16-bit\n", cfg_c.Props.uHz, cfg_c.Props.cChannels);
    428440    RTTESTI_CHECK_RC_OK(AudioMixBufWriteCirc(&child, &samples, sizeof(samples), &cSamplesWritten));
    429441    RTTESTI_CHECK_MSG(cSamplesWritten == cSamplesChild, ("Child: Expected %RU32 written samples, got %RU32\n", cSamplesChild, cSamplesWritten));
     
    470482    unsigned         i;
    471483    uint32_t         cBufSize = 256;
    472     PDMAUDIOPCMPROPS props;
    473484
    474485    RTTestSubF(hTest, "Volume control");
     
    480491        PDMAUDIODIR_OUT,
    481492        { PDMAUDIOPLAYBACKDEST_UNKNOWN },
    482         44100,                    /* Hz */
    483         2                         /* Channels */,
    484         PDMAUDIOFMT_S16               /* Format */,
    485         PDMAUDIOENDIANNESS_LITTLE /* ENDIANNESS */
    486     };
    487 
    488     int rc = DrvAudioHlpStreamCfgToProps(&cfg, &props);
    489     AssertRC(rc);
     493        { 16,                       /* Bits */
     494          true,                     /* Signed */
     495          1,                        /* Shift */
     496          2,                        /* Channels */
     497          44100,                    /* Hz */
     498          false                     /* Swap Endian */ },
     499        0 /* cSampleBufferSize */
     500    };
     501
     502    RTTESTI_CHECK(DrvAudioHlpStreamCfgIsValid(&cfg));
    490503
    491504    PDMAUDIOVOLUME vol = { false, 0, 0 };   /* Not muted. */
    492505    PDMAUDIOMIXBUF parent;
    493     RTTESTI_CHECK_RC_OK(AudioMixBufInit(&parent, "Parent", &props, cBufSize));
     506    RTTESTI_CHECK_RC_OK(AudioMixBufInit(&parent, "Parent", &cfg.Props, cBufSize));
    494507
    495508    PDMAUDIOMIXBUF child;
    496     RTTESTI_CHECK_RC_OK(AudioMixBufInit(&child, "Child", &props, cBufSize));
     509    RTTESTI_CHECK_RC_OK(AudioMixBufInit(&child, "Child", &cfg.Props, cBufSize));
    497510    RTTESTI_CHECK_RC_OK(AudioMixBufLinkTo(&child, &parent));
    498511
     
    515528
    516529    /**** Volume control test ****/
    517     RTTestPrintf(hTest, RTTESTLVL_DEBUG, "Volume control test %uHz %uch \n", cfg.uHz, cfg.cChannels);
     530    RTTestPrintf(hTest, RTTESTLVL_DEBUG, "Volume control test %uHz %uch \n", cfg.Props.uHz, cfg.Props.cChannels);
    518531
    519532    /* 1) Full volume/0dB attenuation (255). */
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